mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-10-06 15:21:09 +00:00
Compare commits
248
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
34e3fabc56 | ||
|
|
f97aa6a5af | ||
|
|
d2aa937ad7 | ||
|
|
c43d541267 | ||
|
|
61a0db4a87 | ||
|
|
a3dea04ade | ||
|
|
9dbd0307f8 | ||
|
|
bfd3c32ef7 | ||
|
|
98c5eed4a6 | ||
|
|
8d0608275b | ||
|
|
2cb72dce0a | ||
|
|
ac51e157ea | ||
|
|
a7c1595738 | ||
|
|
325ecdda10 | ||
|
|
c57bf3c044 | ||
|
|
7eb9aa3832 | ||
|
|
56f5ff8128 | ||
|
|
1b4153f0cd | ||
|
|
e8a499df7b | ||
|
|
bbb94724ba | ||
|
|
ee88b3f0b0 | ||
|
|
b22384a559 | ||
|
|
69e7cc1544 | ||
|
|
6a0d07664f | ||
|
|
ca934716f5 | ||
|
|
82c462ab2a | ||
|
|
2782374d8d | ||
|
|
0c3b7bc72e | ||
|
|
6b304884d2 | ||
|
|
488c6d8226 | ||
|
|
d35af1806a | ||
|
|
5ac0dd19d0 | ||
|
|
550229b0fa | ||
|
|
997fac8752 | ||
|
|
007071bd56 | ||
|
|
7a23d9ea2c | ||
|
|
bfbf5ad1c2 | ||
|
|
31494a9836 | ||
|
|
441ae8e877 | ||
|
|
461063856d | ||
|
|
1b392955de | ||
|
|
3beb448ae6 | ||
|
|
412564cae3 | ||
|
|
360a68e078 | ||
|
|
556569c0e3 | ||
|
|
646fe6384c | ||
|
|
f7b822abb7 | ||
|
|
c0ba2c8c44 | ||
|
|
0701f64ba9 | ||
|
|
c49e8d32c8 | ||
|
|
3752144995 | ||
|
|
2aa4122aae | ||
|
|
97034b22f6 | ||
|
|
3776739cb5 | ||
|
|
93fc4b31e9 | ||
|
|
33fc99785a | ||
|
|
f219431935 | ||
|
|
b8a8e38ceb | ||
|
|
d755580c99 | ||
|
|
e8926efbe3 | ||
|
|
2ae41bb0ef | ||
|
|
6a6ceb2612 | ||
|
|
6be7911e40 | ||
|
|
d57549159d | ||
|
|
4f110bc261 | ||
|
|
69a08915d1 | ||
|
|
2c0570c97d | ||
|
|
48af5b5d97 | ||
|
|
6cf747808c | ||
|
|
ad6afce67b | ||
|
|
2b2c710626 | ||
|
|
2b1a7e38df | ||
|
|
b4052ec99f | ||
|
|
14cf7861e0 | ||
|
|
18c08862a8 | ||
|
|
62ef0fa4f8 | ||
|
|
a8a45439db | ||
|
|
5cd6661280 | ||
|
|
33aec258da | ||
|
|
76aba24ddf | ||
|
|
cb5b489e90 | ||
|
|
19a085206c | ||
|
|
708212a306 | ||
|
|
3b302b4666 | ||
|
|
4a7311bf01 | ||
|
|
f2a11928f6 | ||
|
|
4ed56954e8 | ||
|
|
6e33f3f5dd | ||
|
|
5092831007 | ||
|
|
9cca3093ee | ||
|
|
6873267a9c | ||
|
|
8e330f951a | ||
|
|
9c83631d20 | ||
|
|
a430430690 | ||
|
|
1bcfe58064 | ||
|
|
1b6fb2a81f | ||
|
|
767db71500 | ||
|
|
4d2c3a0af4 | ||
|
|
e695da66df | ||
|
|
c96945490b | ||
|
|
e5d4ad2aa7 | ||
|
|
4fab8d0b39 | ||
|
|
e341a9b84e | ||
|
|
a7bc054974 | ||
|
|
30351d40e1 | ||
|
|
d289478618 | ||
|
|
306e379a2a | ||
|
|
3d11b60e71 | ||
|
|
e8597fe942 | ||
|
|
99ee8893cd | ||
|
|
ee3e014f02 | ||
|
|
3d270c2aa7 | ||
|
|
5ea6ccc56a | ||
|
|
bcfb09481c | ||
|
|
c80f1ab312 | ||
|
|
131b61b726 | ||
|
|
d367bcef92 | ||
|
|
79c93733d3 | ||
|
|
7cc50d750c | ||
|
|
62d8f22f52 | ||
|
|
60e9ee26c9 | ||
|
|
854dae8dd2 | ||
|
|
ec4e9717d3 | ||
|
|
88726d76e8 | ||
|
|
39b087d6ea | ||
|
|
8b2e28817d | ||
|
|
ac9b5433b7 | ||
|
|
a453cb1eba | ||
|
|
1bd3404c03 | ||
|
|
c1a90fc451 | ||
|
|
7fc86db5f0 | ||
|
|
6fd2de76e6 | ||
|
|
f8fe5a07cd | ||
|
|
049612022a | ||
|
|
10810908a9 | ||
|
|
0d92180325 | ||
|
|
88d5e9e442 | ||
|
|
c51d19f6b2 | ||
|
|
849e6493f8 | ||
|
|
b1905ebc20 | ||
|
|
55b4dca9bc | ||
|
|
386364f84b | ||
|
|
725df64108 | ||
|
|
c5bf238859 | ||
|
|
f563df04f6 | ||
|
|
613dad92a1 | ||
|
|
a83cd8aa29 | ||
|
|
02e313a115 | ||
|
|
04554abae6 | ||
|
|
0342e06d87 | ||
|
|
79fd847ce3 | ||
|
|
8f6802fff8 | ||
|
|
b61ba98183 | ||
|
|
175075fd08 | ||
|
|
5428a0715d | ||
|
|
75770321dd | ||
|
|
c950c3fb6b | ||
|
|
2ca843a38e | ||
|
|
0ef7c6d581 | ||
|
|
34b0d36cda | ||
|
|
d619c7e19c | ||
|
|
31b44cb731 | ||
|
|
ddbee84e68 | ||
|
|
bf6cce1f40 | ||
|
|
8bdf0df00a | ||
|
|
d6c9187c71 | ||
|
|
0cdfb88357 | ||
|
|
14cec7239b | ||
|
|
86c6a1a66f | ||
|
|
07f08dfe40 | ||
|
|
a4fb5af9e1 | ||
|
|
8593d66a39 | ||
|
|
3fc3b8a8ae | ||
|
|
695a1f897a | ||
|
|
2d69f6e17c | ||
|
|
340ce575e2 | ||
|
|
d795900fcf | ||
|
|
9b1fb2217a | ||
|
|
ef6f65eacc | ||
|
|
0add523e1b | ||
|
|
375036f330 | ||
|
|
fbbeb1fab0 | ||
|
|
0bca3fd2e5 | ||
|
|
85fd613cf7 | ||
|
|
0da24cd38b | ||
|
|
d7b75540d0 | ||
|
|
b7bda9912b | ||
|
|
4f3a608009 | ||
|
|
f682ab5cd3 | ||
|
|
2bcb775b90 | ||
|
|
e29a82c672 | ||
|
|
5b243eec92 | ||
|
|
fee6be98b2 | ||
|
|
9405ac5976 | ||
|
|
6ed2437848 | ||
|
|
da3fee2dfa | ||
|
|
c0d6ae8540 | ||
|
|
573e1c6544 | ||
|
|
20be78a96e | ||
|
|
02d45c3258 | ||
|
|
f9888c7d7a | ||
|
|
0bda684dd7 | ||
|
|
8a578cdf00 | ||
|
|
6b256db012 | ||
|
|
2dc4900292 | ||
|
|
0f75d6bc4e | ||
|
|
e913621369 | ||
|
|
48b6db93b8 | ||
|
|
72cafcbe06 | ||
|
|
a9bae54f20 | ||
|
|
218881c6f6 | ||
|
|
cd5fb68d38 | ||
|
|
f87a46ec6e | ||
|
|
8dc91d8b1d | ||
|
|
da8b11b8ab | ||
|
|
c79970bedb | ||
|
|
7252f6acb7 | ||
|
|
6a2d690f45 | ||
|
|
8fa6a4602b | ||
|
|
0f29437135 | ||
|
|
75cc0de071 | ||
|
|
bc6d0ef0fb | ||
|
|
c17ae25bbc | ||
|
|
e981a517cd | ||
|
|
0703728e56 | ||
|
|
1e9ee0c120 | ||
|
|
e9a579b604 | ||
|
|
783acd932a | ||
|
|
c8a1bf3a99 | ||
|
|
2facaac9e8 | ||
|
|
9bbac19de4 | ||
|
|
ea5c6776b3 | ||
|
|
98f4d34dcb | ||
|
|
501aff7e53 | ||
|
|
c808653565 | ||
|
|
a7441c7f48 | ||
|
|
3bc13e5cfd | ||
|
|
141749a6f2 | ||
|
|
4634a5dfd7 | ||
|
|
372139c770 | ||
|
|
44eebdb8ad | ||
|
|
c7aa4ca3ef | ||
|
|
b297f68921 | ||
|
|
7ff6bc42b1 | ||
|
|
719af2d81d | ||
|
|
cb13a22e57 | ||
|
|
ed6ea086a2 | ||
|
|
08aa277974 |
@@ -74,12 +74,26 @@ jobs:
|
||||
set +e
|
||||
./OrcaSlicer_profile_validator -p ${{ github.workspace }}/resources/profiles -l 2 2>&1 | tee ${{ runner.temp }}/validate_system.log
|
||||
exit ${PIPESTATUS[0]}
|
||||
# The validator above is the nightly build of main, so it cannot slice profiles that use
|
||||
# settings a PR adds to the engine: it reports their placeholders as undefined. A PR that
|
||||
# changes src/ also runs Build all, whose Slice check runs this same sweep with the
|
||||
# validator built from the PR, so the sweep below only runs for the other PRs.
|
||||
- name: Detect engine changes
|
||||
id: engine_changes
|
||||
if: ${{ github.event_name == 'pull_request' }}
|
||||
run: |
|
||||
base=${{ github.event.pull_request.base.sha }}
|
||||
if git fetch --no-tags --depth=1 origin "$base" && ! git diff --quiet "$base" HEAD -- src/; then
|
||||
echo "changed=true" >> "$GITHUB_OUTPUT"
|
||||
echo "::notice::This PR changes src/, so Build all's Slice check slices the profiles with the PR-built validator."
|
||||
fi
|
||||
# Slice a two-colour cube through every printer, and through every system process/filament whose
|
||||
# templates no printer's own slice reaches, so every custom g-code and filename_format shipped is
|
||||
# expanded (names in {if} branches not taken included) - catches undefined-placeholder /
|
||||
# invalid-flow bugs the static checks above cannot see.
|
||||
- name: validate slice (expand custom g-code)
|
||||
id: validate_slice
|
||||
if: ${{ steps.engine_changes.outputs.changed != 'true' }}
|
||||
continue-on-error: true
|
||||
run: |
|
||||
set +e
|
||||
|
||||
@@ -131,13 +131,6 @@
|
||||
<true/>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>${MACOSX_BUNDLE_COPYRIGHT}</string>
|
||||
<key>NSLocalNetworkUsageDescription</key>
|
||||
<string>OrcaSlicer uses your local network to discover and connect to printers.</string>
|
||||
<key>NSBonjourServices</key>
|
||||
<array>
|
||||
<string>_octoprint._tcp</string>
|
||||
<string>_http._tcp</string>
|
||||
</array>
|
||||
<key>NSAppTransportSecurity</key>
|
||||
<dict>
|
||||
<!-- Disable App Transport Security. Resolves https://github.com/OrcaSlicer/OrcaSlicer/issues/791 -->
|
||||
|
||||
@@ -88,6 +88,18 @@ struct NfpPConfig {
|
||||
*/
|
||||
bool explore_holes = false;
|
||||
|
||||
/**
|
||||
* @brief Keep the final pile on the bin.
|
||||
*
|
||||
* The final alignment centres the pile on the alignment target. A target
|
||||
* near an edge (a belt printer starts its parts at the leading end of the
|
||||
* belt) would push part of a pile that is larger than the room around that
|
||||
* point off the bed; with this set the pile stops at the edge instead, and a
|
||||
* pile that does not fit along an axis is centred on it. Off by default, so
|
||||
* the alignment of every other printer is unchanged.
|
||||
*/
|
||||
bool clamp_to_bin = false;
|
||||
|
||||
/**
|
||||
* @brief If true, use all CPUs available. Run on a single core otherwise.
|
||||
*/
|
||||
@@ -1111,7 +1123,24 @@ private:
|
||||
default: ; // DONT_ALIGN
|
||||
}
|
||||
|
||||
auto d = cb - ci;
|
||||
auto d = cb - ci;
|
||||
|
||||
// Keep the pile on the bin (see Config::clamp_to_bin). The items' boxes carry
|
||||
// their inflation, which is the margin left at the edge.
|
||||
if (config_.clamp_to_bin) {
|
||||
auto on_bin = [](Coord lo, Coord hi, Coord bin_lo, Coord bin_hi, Coord shift) {
|
||||
if (hi - lo >= bin_hi - bin_lo)
|
||||
return (bin_lo + bin_hi) / 2 - (lo + hi) / 2;
|
||||
if (lo + shift < bin_lo)
|
||||
shift = bin_lo - lo;
|
||||
if (hi + shift > bin_hi)
|
||||
shift = bin_hi - hi;
|
||||
return shift;
|
||||
};
|
||||
setX(d, on_bin(getX(bb.minCorner()), getX(bb.maxCorner()), getX(bbin.minCorner()), getX(bbin.maxCorner()), getX(d)));
|
||||
setY(d, on_bin(getY(bb.minCorner()), getY(bb.maxCorner()), getY(bbin.minCorner()), getY(bbin.maxCorner()), getY(d)));
|
||||
cb = ci + d;
|
||||
}
|
||||
|
||||
// BBS make sure the item won't clash with excluded regions
|
||||
// do we have wipe tower after arranging?
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-10-06 13:42+0800\n"
|
||||
"POT-Creation-Date: 2026-10-05 10:49-0300\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -4046,9 +4046,6 @@ msgstr ""
|
||||
msgid "You need to select the material type and color first."
|
||||
msgstr ""
|
||||
|
||||
msgid "The minimum temperature cannot be greater than the maximum temperature."
|
||||
msgstr ""
|
||||
|
||||
#, possible-c-format, possible-boost-format
|
||||
msgid "Please input a valid value (K in %.1f~%.1f)"
|
||||
msgstr ""
|
||||
@@ -5785,7 +5782,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 ""
|
||||
|
||||
@@ -6624,22 +6621,6 @@ msgstr ""
|
||||
msgid "File '%s' was lost! Please download it again."
|
||||
msgstr ""
|
||||
|
||||
msgid "gcodes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to delete the file from printer."
|
||||
msgstr ""
|
||||
|
||||
#, possible-c-format, possible-boost-format
|
||||
msgid "Do you want to print the file '%s' from printer?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Print file"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to start the print job."
|
||||
msgstr ""
|
||||
|
||||
#, possible-c-format, possible-boost-format
|
||||
msgid ""
|
||||
"File: %s\n"
|
||||
@@ -9483,6 +9464,14 @@ msgstr ""
|
||||
msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected."
|
||||
msgstr ""
|
||||
|
||||
msgid "(Experimental) Use printer agents instead of print hosts"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
|
||||
msgid "Experimental Features"
|
||||
msgstr ""
|
||||
|
||||
@@ -9494,14 +9483,6 @@ msgid ""
|
||||
"Highly experimental! Slow and may create artifact."
|
||||
msgstr ""
|
||||
|
||||
msgid "Use printer agents instead of print hosts"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
|
||||
msgid "Allow Abnormal Storage"
|
||||
msgstr ""
|
||||
|
||||
@@ -10207,12 +10188,6 @@ msgstr ""
|
||||
msgid "Clean Up"
|
||||
msgstr ""
|
||||
|
||||
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "Preparing print job"
|
||||
msgstr ""
|
||||
|
||||
@@ -14804,12 +14779,6 @@ msgstr ""
|
||||
msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts."
|
||||
msgstr ""
|
||||
|
||||
msgid "Fill pattern tops"
|
||||
msgstr ""
|
||||
|
||||
msgid "Choose this option if you want to completely fill in the tops of the infill pattern"
|
||||
msgstr ""
|
||||
|
||||
msgid "Infill combination - Max layer height"
|
||||
msgstr ""
|
||||
|
||||
@@ -26331,9 +26300,6 @@ msgstr ""
|
||||
msgid "An error occurred loading %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "/"
|
||||
msgstr ""
|
||||
|
||||
#, possible-boost-format
|
||||
msgid "Load %1% to %2%"
|
||||
msgstr ""
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-10-06 13:42+0800\n"
|
||||
"POT-Creation-Date: 2026-10-05 10:49-0300\n"
|
||||
"PO-Revision-Date: 2025-03-15 10:55+0100\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
@@ -4426,9 +4426,6 @@ msgstr "Estàs segur que vols esborrar la informació del filament?"
|
||||
msgid "You need to select the material type and color first."
|
||||
msgstr "Primer heu de seleccionar el tipus de material i el color."
|
||||
|
||||
msgid "The minimum temperature cannot be greater than the maximum temperature."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Please input a valid value (K in %.1f~%.1f)"
|
||||
msgstr "Introduïu un valor vàlid (K a %.1f~%.1f)"
|
||||
@@ -6303,7 +6300,7 @@ msgid "Size:"
|
||||
msgstr "Mida:"
|
||||
|
||||
# AI Translated
|
||||
#, boost-format
|
||||
#, c-format, boost-format
|
||||
msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)."
|
||||
msgstr "S'han trobat conflictes de rutes de G-code a la capa %d, Z = %.2lfmm. Si us plau, separeu els objectes conflictius més lluny ( %s <-> %s )."
|
||||
|
||||
@@ -7183,22 +7180,6 @@ msgstr "El fitxer .gcode.3mf no conté dades de G-code. Lamineu-lo amb Orca Slic
|
||||
msgid "File '%s' was lost! Please download it again."
|
||||
msgstr "L'arxiu '%s' s'ha perdut! Si us plau, descarregueu-lo de nou."
|
||||
|
||||
msgid "gcodes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to delete the file from printer."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Do you want to print the file '%s' from printer?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Print file"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to start the print job."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"File: %s\n"
|
||||
@@ -10439,6 +10420,18 @@ msgstr "Mostrar els perfils no compatibles"
|
||||
msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected."
|
||||
msgstr "Mostra els perfils incompatibles o no compatibles a les llistes desplegables d'impressora i de filament. Aquests perfils no es poden seleccionar."
|
||||
|
||||
# AI Translated
|
||||
msgid "(Experimental) Use printer agents instead of print hosts"
|
||||
msgstr "(Experimental) Utilitza agents d'impressora en lloc d'amfitrions d'impressió"
|
||||
|
||||
# AI Translated
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
"Envia els treballs d'impressió de les impressores que no són Bambu a través dels agents de connector d'impressora en lloc del flux clàssic de pujada a l'amfitrió d'impressió.\n"
|
||||
"Quan està desactivat, OrcaSlicer utilitza el comportament antic de l'amfitrió d'impressió."
|
||||
|
||||
# AI Translated
|
||||
msgid "Experimental Features"
|
||||
msgstr "Funcions experimentals"
|
||||
@@ -10455,17 +10448,6 @@ msgstr ""
|
||||
"Intenta conservar les característiques pintades (color/costura/suport/pell difusa, etc.) després de canviar la malla de l'objecte (com ara tallar, recarregar des del disc, simplificar, reparar, etc.).\n"
|
||||
"Molt experimental! És lent i pot generar defectes."
|
||||
|
||||
msgid "Use printer agents instead of print hosts"
|
||||
msgstr ""
|
||||
|
||||
# AI Translated
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
"Envia els treballs d'impressió de les impressores que no són Bambu a través dels agents de connector d'impressora en lloc del flux clàssic de pujada a l'amfitrió d'impressió.\n"
|
||||
"Quan està desactivat, OrcaSlicer utilitza el comportament antic de l'amfitrió d'impressió."
|
||||
|
||||
msgid "Allow Abnormal Storage"
|
||||
msgstr "Permet emmagatzematge anormal"
|
||||
|
||||
@@ -11281,12 +11263,6 @@ msgstr "Cancel·lar el timelapse i imprimir"
|
||||
msgid "Clean Up"
|
||||
msgstr "Netejar"
|
||||
|
||||
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "Preparing print job"
|
||||
msgstr "Preparant el treball d'impressió"
|
||||
|
||||
@@ -16588,12 +16564,6 @@ msgstr "Farciment simètric eix Y"
|
||||
msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts."
|
||||
msgstr "Si el model té dues parts simètriques respecte a l'eix Y i voleu que aquestes parts tinguin textures simètriques, feu clic en aquesta opció en una de les parts."
|
||||
|
||||
msgid "Fill pattern tops"
|
||||
msgstr ""
|
||||
|
||||
msgid "Choose this option if you want to completely fill in the tops of the infill pattern"
|
||||
msgstr ""
|
||||
|
||||
msgid "Infill combination - Max layer height"
|
||||
msgstr "Combinació de farciment: alçada màxima de la capa"
|
||||
|
||||
@@ -30537,9 +30507,6 @@ msgstr "Activar les eines de desenvolupament"
|
||||
msgid "An error occurred loading %s"
|
||||
msgstr "S'ha produït un error en carregar %s"
|
||||
|
||||
msgid "/"
|
||||
msgstr "/"
|
||||
|
||||
# AI Translated
|
||||
#, boost-format
|
||||
msgid "Load %1% to %2%"
|
||||
@@ -32243,6 +32210,9 @@ msgstr ""
|
||||
#~ msgid "An error occurred loading "
|
||||
#~ msgstr "S'ha produït un error en carregar "
|
||||
|
||||
#~ msgid "/"
|
||||
#~ msgstr "/"
|
||||
|
||||
# AI Translated
|
||||
#, c-format, boost-format
|
||||
#~ msgid "Load %s to "
|
||||
@@ -32448,10 +32418,6 @@ msgstr ""
|
||||
#~ msgid "Support/Color Painting: adjust section position"
|
||||
#~ msgstr "Suport/Pintat de color: configuració de la posició de la secció"
|
||||
|
||||
# AI Translated
|
||||
#~ msgid "(Experimental) Use printer agents instead of print hosts"
|
||||
#~ msgstr "(Experimental) Utilitza agents d'impressora en lloc d'amfitrions d'impressió"
|
||||
|
||||
# AI Translated
|
||||
#~ msgid "Tab"
|
||||
#~ msgstr "Pestanya"
|
||||
|
||||
@@ -3,7 +3,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Orca Slicer\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-10-06 13:42+0800\n"
|
||||
"POT-Creation-Date: 2026-10-05 10:49-0300\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: Jakub Hencl\n"
|
||||
"Language-Team: \n"
|
||||
@@ -4384,9 +4384,6 @@ msgstr "Opravdu chcete vymazat informace o filamentu?"
|
||||
msgid "You need to select the material type and color first."
|
||||
msgstr "Nejprve musíte vybrat typ materiálu a barvu."
|
||||
|
||||
msgid "The minimum temperature cannot be greater than the maximum temperature."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Please input a valid value (K in %.1f~%.1f)"
|
||||
msgstr "Zadejte platnou hodnotu (K v rozsahu %.1f~%.1f)"
|
||||
@@ -6272,7 +6269,7 @@ msgid "Size:"
|
||||
msgstr "Velikost:"
|
||||
|
||||
# AI Translated
|
||||
#, boost-format
|
||||
#, c-format, boost-format
|
||||
msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)."
|
||||
msgstr "Byly nalezeny konflikty drah G-code ve vrstvě %d, Z = %.2lf mm. Oddělte prosím konfliktní objekty více od sebe (%s <-> %s)."
|
||||
|
||||
@@ -7162,22 +7159,6 @@ msgstr "Soubor .gcode.3mf neobsahuje žádná G-code data. Prosím, rozřežte m
|
||||
msgid "File '%s' was lost! Please download it again."
|
||||
msgstr "Soubor '%s' byl ztracen! Stáhněte jej prosím znovu."
|
||||
|
||||
msgid "gcodes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to delete the file from printer."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Do you want to print the file '%s' from printer?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Print file"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to start the print job."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"File: %s\n"
|
||||
@@ -10401,6 +10382,18 @@ msgstr "Zobrazit nepodporované předvolby"
|
||||
msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected."
|
||||
msgstr "Zobrazovat nekompatibilní/nepodporované předvolby v rozevíracích seznamech tiskáren a filamentů. Tyto předvolby nelze vybrat."
|
||||
|
||||
# AI Translated
|
||||
msgid "(Experimental) Use printer agents instead of print hosts"
|
||||
msgstr "(Experimentální) Používat agenty tiskárny místo tiskových hostů"
|
||||
|
||||
# AI Translated
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
"Směruje tiskové úlohy pro tiskárny jiné než Bambu přes agenty pluginů tiskárny místo klasického nahrávání na tiskový host.\n"
|
||||
"Pokud je vypnuto, OrcaSlicer používá původní chování tiskového hosta."
|
||||
|
||||
# AI Translated
|
||||
msgid "Experimental Features"
|
||||
msgstr "Experimentální funkce"
|
||||
@@ -10417,17 +10410,6 @@ msgstr ""
|
||||
"Pokusí se zachovat malované prvky (barva/šev/podpory/fuzzy atd.) po změně sítě objektu (například řez / znovunačtení z disku / zjednodušení / oprava atd.)\n"
|
||||
"Vysoce experimentální! Pomalé a může vytvářet artefakty."
|
||||
|
||||
msgid "Use printer agents instead of print hosts"
|
||||
msgstr ""
|
||||
|
||||
# AI Translated
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
"Směruje tiskové úlohy pro tiskárny jiné než Bambu přes agenty pluginů tiskárny místo klasického nahrávání na tiskový host.\n"
|
||||
"Pokud je vypnuto, OrcaSlicer používá původní chování tiskového hosta."
|
||||
|
||||
msgid "Allow Abnormal Storage"
|
||||
msgstr "Povolit neobvyklé úložiště"
|
||||
|
||||
@@ -11245,12 +11227,6 @@ msgstr "Zrušit časosběr a tisknout"
|
||||
msgid "Clean Up"
|
||||
msgstr "Vyčistit"
|
||||
|
||||
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "Preparing print job"
|
||||
msgstr "Příprava tiskové úlohy"
|
||||
|
||||
@@ -16558,12 +16534,6 @@ msgstr "Symetrická výplň podle osy Y"
|
||||
msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts."
|
||||
msgstr "Pokud má model dvě části symetrické podle osy Y a chcete, aby měly symetrické textury, klikněte na tuto možnost u jedné z těchto částí."
|
||||
|
||||
msgid "Fill pattern tops"
|
||||
msgstr ""
|
||||
|
||||
msgid "Choose this option if you want to completely fill in the tops of the infill pattern"
|
||||
msgstr ""
|
||||
|
||||
msgid "Infill combination - Max layer height"
|
||||
msgstr "Kombinace výplně – maximální výška vrstvy"
|
||||
|
||||
@@ -30547,10 +30517,6 @@ msgstr "Povolit vývojářské nástroje"
|
||||
msgid "An error occurred loading %s"
|
||||
msgstr "Při načítání %s došlo k chybě"
|
||||
|
||||
# AI Translated
|
||||
msgid "/"
|
||||
msgstr "/"
|
||||
|
||||
# AI Translated
|
||||
#, boost-format
|
||||
msgid "Load %1% to %2%"
|
||||
@@ -32260,6 +32226,10 @@ msgstr ""
|
||||
#~ msgid "An error occurred loading "
|
||||
#~ msgstr "Při načítání došlo k chybě: "
|
||||
|
||||
# AI Translated
|
||||
#~ msgid "/"
|
||||
#~ msgstr "/"
|
||||
|
||||
# AI Translated
|
||||
#, c-format, boost-format
|
||||
#~ msgid "Load %s to "
|
||||
@@ -32466,10 +32436,6 @@ msgstr ""
|
||||
#~ msgid "Support/Color Painting: adjust section position"
|
||||
#~ msgstr "Podpora/barva malování: nastavení pozice úseku"
|
||||
|
||||
# AI Translated
|
||||
#~ msgid "(Experimental) Use printer agents instead of print hosts"
|
||||
#~ msgstr "(Experimentální) Používat agenty tiskárny místo tiskových hostů"
|
||||
|
||||
# AI Translated
|
||||
#~ msgid "Tab"
|
||||
#~ msgstr "Tab"
|
||||
|
||||
@@ -3,7 +3,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Orca Slicer\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-10-06 13:42+0800\n"
|
||||
"POT-Creation-Date: 2026-10-05 10:49-0300\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: Heiko Liebscher <hliebschergmail.com>\n"
|
||||
"Language-Team: \n"
|
||||
@@ -4297,9 +4297,6 @@ msgstr "Sind Sie sicher, dass Sie die Filamentinformationen löschen möchten?"
|
||||
msgid "You need to select the material type and color first."
|
||||
msgstr "Sie müssen zuerst den Materialtyp und die Farbe auswählen."
|
||||
|
||||
msgid "The minimum temperature cannot be greater than the maximum temperature."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Please input a valid value (K in %.1f~%.1f)"
|
||||
msgstr "Bitte geben Sie einen gültigen Wert ein (K in %.1f~%.1f)"
|
||||
@@ -6162,7 +6159,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)."
|
||||
|
||||
@@ -7030,22 +7027,6 @@ msgstr "Die .gcode.3mf-Datei enthält keine G-Code-Daten. Bitte slicen Sie sie m
|
||||
msgid "File '%s' was lost! Please download it again."
|
||||
msgstr "Die Datei '%s' ist verloren gegangen! Bitte laden Sie diese erneut herunter."
|
||||
|
||||
msgid "gcodes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to delete the file from printer."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Do you want to print the file '%s' from printer?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Print file"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to start the print job."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"File: %s\n"
|
||||
@@ -10230,6 +10211,18 @@ msgstr "Nicht unterstützte Profile anzeigen"
|
||||
msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected."
|
||||
msgstr "Zeigt inkompatible/nicht unterstützte Profile in den Dropdown-Listen für Drucker und Filament an. Diese Profile können nicht ausgewählt werden."
|
||||
|
||||
# AI Translated
|
||||
msgid "(Experimental) Use printer agents instead of print hosts"
|
||||
msgstr "(Experimentell) Drucker-Agenten anstelle von Druck-Hosts verwenden"
|
||||
|
||||
# AI Translated
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
"Leitet Druckaufträge für Nicht-Bambu-Drucker über Drucker-Plugin-Agenten statt über den klassischen Druck-Host-Upload.\n"
|
||||
"Wenn deaktiviert, verwendet OrcaSlicer das bisherige Druck-Host-Verhalten."
|
||||
|
||||
msgid "Experimental Features"
|
||||
msgstr "Experimentelle Funktionen"
|
||||
|
||||
@@ -10243,17 +10236,6 @@ msgstr ""
|
||||
"Versuchen Sie, bemalte Funktionen (Farbe/Naht/Stütze/unscharf usw.) nach Änderung des Objekt-Meshs (z. B. schneiden/neu laden von der Festplatte/vereinfachen/reparieren usw.) beizubehalten\n"
|
||||
"Sehr experimentell! Langsam und kann Artefakte erzeugen."
|
||||
|
||||
msgid "Use printer agents instead of print hosts"
|
||||
msgstr ""
|
||||
|
||||
# AI Translated
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
"Leitet Druckaufträge für Nicht-Bambu-Drucker über Drucker-Plugin-Agenten statt über den klassischen Druck-Host-Upload.\n"
|
||||
"Wenn deaktiviert, verwendet OrcaSlicer das bisherige Druck-Host-Verhalten."
|
||||
|
||||
msgid "Allow Abnormal Storage"
|
||||
msgstr "Fehlerhaften Speicher zulassen"
|
||||
|
||||
@@ -11064,12 +11046,6 @@ msgstr "Zeitraffer abbrechen & Drucken"
|
||||
msgid "Clean Up"
|
||||
msgstr "Bereinigen"
|
||||
|
||||
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "Preparing print job"
|
||||
msgstr "Druckauftrag vorbereiten"
|
||||
|
||||
@@ -16235,12 +16211,6 @@ msgstr "Symmetrische Füllung Y-Achse"
|
||||
msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts."
|
||||
msgstr "Wenn das Modell zwei Teile hat, die symmetrisch zur Y-Achse sind, und Sie möchten, dass diese Teile symmetrische Texturen haben, klicken Sie bitte auf diese Option auf einem der Teile."
|
||||
|
||||
msgid "Fill pattern tops"
|
||||
msgstr ""
|
||||
|
||||
msgid "Choose this option if you want to completely fill in the tops of the infill pattern"
|
||||
msgstr ""
|
||||
|
||||
msgid "Infill combination - Max layer height"
|
||||
msgstr "Kombinieren der Füllung - Maximale Schichthöhe"
|
||||
|
||||
@@ -29933,9 +29903,6 @@ msgstr "Entwicklertools aktivieren"
|
||||
msgid "An error occurred loading %s"
|
||||
msgstr "Fehler beim Laden von %s"
|
||||
|
||||
msgid "/"
|
||||
msgstr "/"
|
||||
|
||||
# AI Translated
|
||||
#, boost-format
|
||||
msgid "Load %1% to %2%"
|
||||
@@ -31637,6 +31604,9 @@ msgstr ""
|
||||
#~ msgid "An error occurred loading "
|
||||
#~ msgstr "Fehler beim Laden von "
|
||||
|
||||
#~ msgid "/"
|
||||
#~ msgstr "/"
|
||||
|
||||
# AI Translated
|
||||
#, c-format, boost-format
|
||||
#~ msgid "Load %s to "
|
||||
@@ -31842,10 +31812,6 @@ msgstr ""
|
||||
#~ msgid "Support/Color Painting: adjust section position"
|
||||
#~ msgstr "Stützen/Farbmalen: Position des Abschnitts anpassen"
|
||||
|
||||
# AI Translated
|
||||
#~ msgid "(Experimental) Use printer agents instead of print hosts"
|
||||
#~ msgstr "(Experimentell) Drucker-Agenten anstelle von Druck-Hosts verwenden"
|
||||
|
||||
# AI Translated
|
||||
#~ msgid "Tab"
|
||||
#~ msgstr "Tab"
|
||||
|
||||
@@ -3,7 +3,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Orca Slicer\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-10-06 13:42+0800\n"
|
||||
"POT-Creation-Date: 2026-10-05 10:49-0300\n"
|
||||
"PO-Revision-Date: 2026-06-17 15:44-0300\n"
|
||||
"Last-Translator: Alexandre Folle de Menezes\n"
|
||||
"Language-Team: \n"
|
||||
@@ -4042,9 +4042,6 @@ msgstr ""
|
||||
msgid "You need to select the material type and color first."
|
||||
msgstr ""
|
||||
|
||||
msgid "The minimum temperature cannot be greater than the maximum temperature."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Please input a valid value (K in %.1f~%.1f)"
|
||||
msgstr ""
|
||||
@@ -5781,7 +5778,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 ""
|
||||
|
||||
@@ -6620,22 +6617,6 @@ msgstr ""
|
||||
msgid "File '%s' was lost! Please download it again."
|
||||
msgstr ""
|
||||
|
||||
msgid "gcodes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to delete the file from printer."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Do you want to print the file '%s' from printer?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Print file"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to start the print job."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"File: %s\n"
|
||||
@@ -9479,6 +9460,14 @@ msgstr ""
|
||||
msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected."
|
||||
msgstr ""
|
||||
|
||||
msgid "(Experimental) Use printer agents instead of print hosts"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
|
||||
msgid "Experimental Features"
|
||||
msgstr ""
|
||||
|
||||
@@ -9490,14 +9479,6 @@ msgid ""
|
||||
"Highly experimental! Slow and may create artifact."
|
||||
msgstr ""
|
||||
|
||||
msgid "Use printer agents instead of print hosts"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
|
||||
msgid "Allow Abnormal Storage"
|
||||
msgstr ""
|
||||
|
||||
@@ -10203,12 +10184,6 @@ msgstr ""
|
||||
msgid "Clean Up"
|
||||
msgstr ""
|
||||
|
||||
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "Preparing print job"
|
||||
msgstr ""
|
||||
|
||||
@@ -14800,12 +14775,6 @@ msgstr ""
|
||||
msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts."
|
||||
msgstr ""
|
||||
|
||||
msgid "Fill pattern tops"
|
||||
msgstr ""
|
||||
|
||||
msgid "Choose this option if you want to completely fill in the tops of the infill pattern"
|
||||
msgstr ""
|
||||
|
||||
msgid "Infill combination - Max layer height"
|
||||
msgstr ""
|
||||
|
||||
@@ -26327,9 +26296,6 @@ msgstr ""
|
||||
msgid "An error occurred loading %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "/"
|
||||
msgstr ""
|
||||
|
||||
#, boost-format
|
||||
msgid "Load %1% to %2%"
|
||||
msgstr ""
|
||||
|
||||
@@ -3,7 +3,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Orca Slicer\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-10-06 13:42+0800\n"
|
||||
"POT-Creation-Date: 2026-10-05 10:49-0300\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: Ian A. Bassi <>\n"
|
||||
"Language-Team: \n"
|
||||
@@ -4175,9 +4175,6 @@ msgstr "¿Estás seguro que quieres limpiar la información de filamento?"
|
||||
msgid "You need to select the material type and color first."
|
||||
msgstr "Necesitas seleccionar el tipo y el color del material primero."
|
||||
|
||||
msgid "The minimum temperature cannot be greater than the maximum temperature."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Please input a valid value (K in %.1f~%.1f)"
|
||||
msgstr "Por favor, introduzca un valor válido (K in %.1f~%.1f)"
|
||||
@@ -6015,7 +6012,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)."
|
||||
|
||||
@@ -6882,22 +6879,6 @@ msgstr "El archivo .gcode .3mf no contiene datos de G-Code. Por favor, lamine co
|
||||
msgid "File '%s' was lost! Please download it again."
|
||||
msgstr "¡El archivo '%s' se perdió!\" Por favor, vuelva a descargárlo."
|
||||
|
||||
msgid "gcodes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to delete the file from printer."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Do you want to print the file '%s' from printer?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Print file"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to start the print job."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"File: %s\n"
|
||||
@@ -9991,6 +9972,18 @@ msgstr "Mostrar ajustes preestablecidos no compatibles"
|
||||
msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected."
|
||||
msgstr "Mostrar los ajustes preestablecidos incompatibles o no compatibles en los menús desplegables de impresoras y filamentos. Estos ajustes preestablecidos no se pueden seleccionar."
|
||||
|
||||
# AI Translated
|
||||
msgid "(Experimental) Use printer agents instead of print hosts"
|
||||
msgstr "(Experimental) Usar agentes de impresora en lugar de hosts de impresión"
|
||||
|
||||
# AI Translated
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
"Envía los trabajos de impresión de impresoras que no son Bambu a través de los agentes de plugin de impresora en lugar del flujo clásico de subida al host de impresión.\n"
|
||||
"Cuando está desactivado, OrcaSlicer utiliza el comportamiento heredado del host de impresión."
|
||||
|
||||
msgid "Experimental Features"
|
||||
msgstr "Funciones experimentales"
|
||||
|
||||
@@ -10004,17 +9997,6 @@ msgstr ""
|
||||
"Intenta conservar las característica pintadas (color, costuras, soportes, piel rugosa, etc.) tras modificar la malla del objeto (por ejemplo, al cortar, volver a cargar desde el disco, simplificar, corregir, etc.).\n"
|
||||
"¡Muy experimental! Es lento y puede generar artefactos."
|
||||
|
||||
msgid "Use printer agents instead of print hosts"
|
||||
msgstr ""
|
||||
|
||||
# AI Translated
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
"Envía los trabajos de impresión de impresoras que no son Bambu a través de los agentes de plugin de impresora en lugar del flujo clásico de subida al host de impresión.\n"
|
||||
"Cuando está desactivado, OrcaSlicer utiliza el comportamiento heredado del host de impresión."
|
||||
|
||||
msgid "Allow Abnormal Storage"
|
||||
msgstr "Permitir almacenamiento anómalo"
|
||||
|
||||
@@ -10796,12 +10778,6 @@ msgstr "Cancelar timelapse e imprimir"
|
||||
msgid "Clean Up"
|
||||
msgstr "Limpiar"
|
||||
|
||||
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "Preparing print job"
|
||||
msgstr "Preparando el trabajo de impresión"
|
||||
|
||||
@@ -15887,12 +15863,6 @@ msgstr "Relleno simétrico respecto al eje Y"
|
||||
msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts."
|
||||
msgstr "Si el modelo tiene dos piezas simétricas respecto al eje Y y desea que tengan texturas simétricas, active esta opción en una de las piezas."
|
||||
|
||||
msgid "Fill pattern tops"
|
||||
msgstr ""
|
||||
|
||||
msgid "Choose this option if you want to completely fill in the tops of the infill pattern"
|
||||
msgstr ""
|
||||
|
||||
msgid "Infill combination - Max layer height"
|
||||
msgstr "Combinación de relleno - Altura máxima de la capa"
|
||||
|
||||
@@ -29489,9 +29459,6 @@ msgstr "Activar herramientas de desarrollo"
|
||||
msgid "An error occurred loading %s"
|
||||
msgstr "Se produjo un error al cargar %s"
|
||||
|
||||
msgid "/"
|
||||
msgstr "/"
|
||||
|
||||
# AI Translated
|
||||
#, boost-format
|
||||
msgid "Load %1% to %2%"
|
||||
@@ -30171,10 +30138,6 @@ msgstr ""
|
||||
"Evita la deformación\n"
|
||||
"¿Sabías que al imprimir materiales propensos a la deformación como el ABS, aumentar adecuadamente la temperatura de la cama térmica puede reducir la probabilidad de deformaciones?"
|
||||
|
||||
# AI Translated
|
||||
#~ msgid "(Experimental) Use printer agents instead of print hosts"
|
||||
#~ msgstr "(Experimental) Usar agentes de impresora en lugar de hosts de impresión"
|
||||
|
||||
#~ msgid "X"
|
||||
#~ msgstr "X"
|
||||
|
||||
@@ -31197,6 +31160,9 @@ msgstr ""
|
||||
#~ msgid "An error occurred loading "
|
||||
#~ msgstr "Se produjo un error al cargar "
|
||||
|
||||
#~ msgid "/"
|
||||
#~ msgstr "/"
|
||||
|
||||
# AI Translated
|
||||
#, c-format, boost-format
|
||||
#~ msgid "Load %s to "
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-10-06 13:42+0800\n"
|
||||
"POT-Creation-Date: 2026-10-05 10:49-0300\n"
|
||||
"PO-Revision-Date: 2026-07-20 13:33+0200\n"
|
||||
"Last-Translator: Manu Goiogana <mgoiogana@gmail.com>\n"
|
||||
"Language-Team: \n"
|
||||
@@ -4218,9 +4218,6 @@ msgstr "Ziur zaude filamentuaren informazioa garbitu nahi duzula?"
|
||||
msgid "You need to select the material type and color first."
|
||||
msgstr "Lehenik eta behin, material-mota eta kolorea hautatu behar dituzu."
|
||||
|
||||
msgid "The minimum temperature cannot be greater than the maximum temperature."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Please input a valid value (K in %.1f~%.1f)"
|
||||
msgstr "Mesedez, sartu baliozko balio bat (K in %.1f~%.1f)"
|
||||
@@ -6069,7 +6066,7 @@ msgstr "Bolumena:"
|
||||
msgid "Size:"
|
||||
msgstr "Tamaina:"
|
||||
|
||||
#, boost-format
|
||||
#, c-format, boost-format
|
||||
msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)."
|
||||
msgstr "G-code ibilbideen gatazkak aurkitu dira %d geruzan, Z = %.2lf mm. Urrundu gehiago gatazkan dauden objektuak (%s <-> %s)."
|
||||
|
||||
@@ -6933,22 +6930,6 @@ msgstr ".gcode.3mf fitxategiak ez du G-code daturik. Mesedez, xerratu OrcaSlicer
|
||||
msgid "File '%s' was lost! Please download it again."
|
||||
msgstr "'%s' fitxategia galdu da! Deskargatu berriro."
|
||||
|
||||
msgid "gcodes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to delete the file from printer."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Do you want to print the file '%s' from printer?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Print file"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to start the print job."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"File: %s\n"
|
||||
@@ -10080,6 +10061,18 @@ msgstr "Erakutsi onartzen ez diren aurrezarpenak"
|
||||
msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected."
|
||||
msgstr "Erakutsi bateraezinak edo onartu gabeak diren aurrezarpenak inprimagailuaren eta filamentuaren goitibeherako zerrendetan. Aurrezarpen hauek ezin dira hautatu."
|
||||
|
||||
# AI Translated
|
||||
msgid "(Experimental) Use printer agents instead of print hosts"
|
||||
msgstr "(Esperimentala) Erabili inprimagailu-agenteak inprimatze-hostenen ordez"
|
||||
|
||||
# AI Translated
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
"Bideratu Bambu ez diren inprimagailuen inprimatze-lanak inprimagailuaren plugin-agenteen bidez, inprimatze-hostera igotzeko fluxu klasikoaren ordez.\n"
|
||||
"Desgaituta dagoenean, OrcaSlicer-ek inprimatze-hostaren aurreko portaera erabiltzen du."
|
||||
|
||||
msgid "Experimental Features"
|
||||
msgstr "Ezaugarri esperimentalak"
|
||||
|
||||
@@ -10093,17 +10086,6 @@ msgstr ""
|
||||
"Saiatu pintatutako eginbideak (kolorea/jostura/euskarria/gainazal zimurra eta abar) mantentzen objektuaren sarea aldatu ondoren (adibidez, ebaki/diskotik birkargatu/sinplifikatu/konpondu eta abar).\n"
|
||||
"Oso esperimentala! Motela da eta artefaktuak sor ditzake."
|
||||
|
||||
msgid "Use printer agents instead of print hosts"
|
||||
msgstr ""
|
||||
|
||||
# AI Translated
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
"Bideratu Bambu ez diren inprimagailuen inprimatze-lanak inprimagailuaren plugin-agenteen bidez, inprimatze-hostera igotzeko fluxu klasikoaren ordez.\n"
|
||||
"Desgaituta dagoenean, OrcaSlicer-ek inprimatze-hostaren aurreko portaera erabiltzen du."
|
||||
|
||||
msgid "Allow Abnormal Storage"
|
||||
msgstr "Baimendu biltegiratze anormala"
|
||||
|
||||
@@ -10902,12 +10884,6 @@ msgstr "Utzi timelapsea eta inprimatu"
|
||||
msgid "Clean Up"
|
||||
msgstr "Garbitu"
|
||||
|
||||
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "Preparing print job"
|
||||
msgstr "Inprimatze-lana prestatzen"
|
||||
|
||||
@@ -16046,12 +16022,6 @@ msgstr "Betegarri simetrikoaren Y ardatza"
|
||||
msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts."
|
||||
msgstr "Modeloak Y ardatzarekiko simetrikoak diren bi zati baditu eta zati horiek testura simetrikoak izatea nahi baduzu, aktibatu aukera hau zatietako batean."
|
||||
|
||||
msgid "Fill pattern tops"
|
||||
msgstr ""
|
||||
|
||||
msgid "Choose this option if you want to completely fill in the tops of the infill pattern"
|
||||
msgstr ""
|
||||
|
||||
msgid "Infill combination - Max layer height"
|
||||
msgstr "Betegarri-konbinazioa - Gehieneko geruza-altuera"
|
||||
|
||||
@@ -29680,9 +29650,6 @@ msgstr "Gaitu garapen-tresnak"
|
||||
msgid "An error occurred loading %s"
|
||||
msgstr "Errore bat gertatu da %s kargatzean"
|
||||
|
||||
msgid "/"
|
||||
msgstr "/"
|
||||
|
||||
# AI Translated
|
||||
#, boost-format
|
||||
msgid "Load %1% to %2%"
|
||||
@@ -30362,10 +30329,6 @@ msgstr ""
|
||||
"Saihestu okertzea\n"
|
||||
"Ba al zenekien ABS bezalako okertzeko joera duten materialak inprimatzean ohe beroaren tenperatura egoki igotzeak okertzeko probabilitatea murriztu dezakeela?"
|
||||
|
||||
# AI Translated
|
||||
#~ msgid "(Experimental) Use printer agents instead of print hosts"
|
||||
#~ msgstr "(Esperimentala) Erabili inprimagailu-agenteak inprimatze-hostenen ordez"
|
||||
|
||||
#~ msgid "X"
|
||||
#~ msgstr "X"
|
||||
|
||||
@@ -31392,6 +31355,9 @@ msgstr ""
|
||||
#~ msgid "An error occurred loading "
|
||||
#~ msgstr "Errore bat gertatu da hau kargatzean: "
|
||||
|
||||
#~ msgid "/"
|
||||
#~ msgstr "/"
|
||||
|
||||
# AI Translated
|
||||
#, c-format, boost-format
|
||||
#~ msgid "Load %s to "
|
||||
|
||||
@@ -6,7 +6,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Orca Slicer\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-10-06 13:42+0800\n"
|
||||
"POT-Creation-Date: 2026-10-05 10:49-0300\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Guislain Cyril, Thomas Lété\n"
|
||||
@@ -4247,9 +4247,6 @@ msgstr "Voulez-vous vraiment effacer les informations du filament ?"
|
||||
msgid "You need to select the material type and color first."
|
||||
msgstr "Vous devez d'abord sélectionner le type de matériau et sa couleur."
|
||||
|
||||
msgid "The minimum temperature cannot be greater than the maximum temperature."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Please input a valid value (K in %.1f~%.1f)"
|
||||
msgstr "Veuillez saisir une valeur valide (K entre %.1f~%.1f)"
|
||||
@@ -6104,7 +6101,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)."
|
||||
|
||||
@@ -6972,22 +6969,6 @@ msgstr "Le fichier G-code .3mf ne contient pas de données G-code. Veuillez le d
|
||||
msgid "File '%s' was lost! Please download it again."
|
||||
msgstr "Le fichier « %s » a été perdu ! Veuillez le télécharger à nouveau."
|
||||
|
||||
msgid "gcodes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to delete the file from printer."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Do you want to print the file '%s' from printer?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Print file"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to start the print job."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"File: %s\n"
|
||||
@@ -10100,6 +10081,18 @@ msgstr "Afficher les préréglages non pris en charge"
|
||||
msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected."
|
||||
msgstr "Affiche les préréglages incompatibles ou non pris en charge dans les listes déroulantes d’imprimantes et de filaments. Ces préréglages ne peuvent pas être sélectionnés."
|
||||
|
||||
# AI Translated
|
||||
msgid "(Experimental) Use printer agents instead of print hosts"
|
||||
msgstr "(Expérimental) Utiliser les agents d’imprimante au lieu des hôtes d’impression"
|
||||
|
||||
# AI Translated
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
"Achemine les tâches d’impression des imprimantes non Bambu via les agents de plugin d’imprimante au lieu du flux classique d’envoi vers l’hôte d’impression.\n"
|
||||
"Lorsque cette option est désactivée, OrcaSlicer utilise l’ancien comportement de l’hôte d’impression."
|
||||
|
||||
msgid "Experimental Features"
|
||||
msgstr "Fonctionnalités expérimentales"
|
||||
|
||||
@@ -10113,17 +10106,6 @@ msgstr ""
|
||||
"Tente de conserver les éléments peints (couleur/couture/support/surface irrégulière, etc.) après une modification du maillage de l’objet (découpe/rechargement depuis le disque/simplification/réparation, etc.)\n"
|
||||
"Hautement expérimental ! Lent et susceptible de créer des artefacts."
|
||||
|
||||
msgid "Use printer agents instead of print hosts"
|
||||
msgstr ""
|
||||
|
||||
# AI Translated
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
"Achemine les tâches d’impression des imprimantes non Bambu via les agents de plugin d’imprimante au lieu du flux classique d’envoi vers l’hôte d’impression.\n"
|
||||
"Lorsque cette option est désactivée, OrcaSlicer utilise l’ancien comportement de l’hôte d’impression."
|
||||
|
||||
msgid "Allow Abnormal Storage"
|
||||
msgstr "Autoriser le stockage anormal"
|
||||
|
||||
@@ -10918,12 +10900,6 @@ msgstr "Annuler le timelapse et imprimer"
|
||||
msgid "Clean Up"
|
||||
msgstr "Nettoyer"
|
||||
|
||||
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "Preparing print job"
|
||||
msgstr "Préparation du travail d'impression"
|
||||
|
||||
@@ -16069,12 +16045,6 @@ msgstr "Axe Y de remplissage symétrique"
|
||||
msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts."
|
||||
msgstr "Si le modèle a deux parties symétriques par rapport à l'axe Y et que vous souhaitez que ces parties aient des textures symétriques, veuillez cliquer sur cette option sur l'une des parties."
|
||||
|
||||
msgid "Fill pattern tops"
|
||||
msgstr ""
|
||||
|
||||
msgid "Choose this option if you want to completely fill in the tops of the infill pattern"
|
||||
msgstr ""
|
||||
|
||||
msgid "Infill combination - Max layer height"
|
||||
msgstr "Combinaison de remplissage - Hauteur maximale de la couche"
|
||||
|
||||
@@ -29422,9 +29392,6 @@ msgstr "Activer les outils de développement"
|
||||
msgid "An error occurred loading %s"
|
||||
msgstr "Une erreur s’est produite lors du chargement de %s"
|
||||
|
||||
msgid "/"
|
||||
msgstr "/"
|
||||
|
||||
# AI Translated
|
||||
#, boost-format
|
||||
msgid "Load %1% to %2%"
|
||||
@@ -30104,10 +30071,6 @@ msgstr ""
|
||||
"Éviter la déformation\n"
|
||||
"Saviez-vous que lors de l’impression de matériaux susceptibles de se déformer, tels que l’ABS, une augmentation appropriée de la température du plateau chauffant peut réduire la probabilité de déformation?"
|
||||
|
||||
# AI Translated
|
||||
#~ msgid "(Experimental) Use printer agents instead of print hosts"
|
||||
#~ msgstr "(Expérimental) Utiliser les agents d’imprimante au lieu des hôtes d’impression"
|
||||
|
||||
#~ msgid "X"
|
||||
#~ msgstr "X"
|
||||
|
||||
@@ -31127,6 +31090,9 @@ msgstr ""
|
||||
#~ msgid "An error occurred loading "
|
||||
#~ msgstr "Une erreur s’est produite lors du chargement de "
|
||||
|
||||
#~ msgid "/"
|
||||
#~ msgstr "/"
|
||||
|
||||
# AI Translated
|
||||
#, c-format, boost-format
|
||||
#~ msgid "Load %s to "
|
||||
|
||||
@@ -3,7 +3,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Orca Slicer\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-10-06 13:42+0800\n"
|
||||
"POT-Creation-Date: 2026-10-05 10:49-0300\n"
|
||||
"Language: hu\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -4357,9 +4357,6 @@ msgstr "Biztosan törölni szeretnéd a filament adatait?"
|
||||
msgid "You need to select the material type and color first."
|
||||
msgstr "Először ki kell választanod az anyagtípust és a színt."
|
||||
|
||||
msgid "The minimum temperature cannot be greater than the maximum temperature."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Please input a valid value (K in %.1f~%.1f)"
|
||||
msgstr "Adj meg érvényes értéket (K tartomány: %.1f~%.1f)"
|
||||
@@ -6239,7 +6236,7 @@ msgid "Size:"
|
||||
msgstr "Méret:"
|
||||
|
||||
# AI Translated
|
||||
#, boost-format
|
||||
#, c-format, boost-format
|
||||
msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)."
|
||||
msgstr "G-code útvonalütközés található a(z) %d. rétegen, Z = %.2lfmm. Helyezd távolabb egymástól az ütköző objektumokat (%s <-> %s)."
|
||||
|
||||
@@ -7125,22 +7122,6 @@ msgstr "A .gcode.3mf fájl nem tartalmaz G-code adatot. Szeleteld újra Orca Sli
|
||||
msgid "File '%s' was lost! Please download it again."
|
||||
msgstr "A(z) '%s' fájl elveszett! Kérlek, töltsd le újra."
|
||||
|
||||
msgid "gcodes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to delete the file from printer."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Do you want to print the file '%s' from printer?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Print file"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to start the print job."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"File: %s\n"
|
||||
@@ -10351,6 +10332,18 @@ msgstr "Nem támogatott beállítások megjelenítése"
|
||||
msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected."
|
||||
msgstr "Megjeleníti a nem kompatibilis vagy nem támogatott beállításokat a nyomtató- és filamentlegördülő listákban. Ezek a beállítások nem választhatók ki."
|
||||
|
||||
# AI Translated
|
||||
msgid "(Experimental) Use printer agents instead of print hosts"
|
||||
msgstr "(Kísérleti) Nyomtatóügynökök használata nyomtatókiszolgálók helyett"
|
||||
|
||||
# AI Translated
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
"A nem Bambu nyomtatók nyomtatási feladatait a nyomtató bővítményügynökein keresztül továbbítja a klasszikus nyomtatókiszolgálóra való feltöltés helyett.\n"
|
||||
"Ha ki van kapcsolva, az OrcaSlicer a régi nyomtatókiszolgáló-viselkedést használja."
|
||||
|
||||
# AI Translated
|
||||
msgid "Experimental Features"
|
||||
msgstr "Kísérleti funkciók"
|
||||
@@ -10366,17 +10359,6 @@ msgstr ""
|
||||
"Megpróbálja tartani a festett jellemzőket (szín/varrat/támasz/fuzzy stb.) az objektumháló megváltoztatása után (például kivágás/újratöltés lemezről/egyszerűsítés/javítás stb.)\n"
|
||||
"Kísérletei szint! Lassú és hibákat hozhat létre."
|
||||
|
||||
msgid "Use printer agents instead of print hosts"
|
||||
msgstr ""
|
||||
|
||||
# AI Translated
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
"A nem Bambu nyomtatók nyomtatási feladatait a nyomtató bővítményügynökein keresztül továbbítja a klasszikus nyomtatókiszolgálóra való feltöltés helyett.\n"
|
||||
"Ha ki van kapcsolva, az OrcaSlicer a régi nyomtatókiszolgáló-viselkedést használja."
|
||||
|
||||
msgid "Allow Abnormal Storage"
|
||||
msgstr "Rendellenes tároló engedélyezése"
|
||||
|
||||
@@ -11195,12 +11177,6 @@ msgstr "Timelapse megszakítása és nyomtatás"
|
||||
msgid "Clean Up"
|
||||
msgstr "Tisztítás"
|
||||
|
||||
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "Preparing print job"
|
||||
msgstr "Nyomtatási feladat előkészítése"
|
||||
|
||||
@@ -16489,12 +16465,6 @@ msgstr "Szimmetrikus kitöltés Y tengely"
|
||||
msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts."
|
||||
msgstr "Ha a modell két, az Y tengelyre szimmetrikus részből áll, és azt szeretnéd, hogy ezek a részek szimmetrikus textúrát kapjanak, kattints erre az opcióra az egyik részen."
|
||||
|
||||
msgid "Fill pattern tops"
|
||||
msgstr ""
|
||||
|
||||
msgid "Choose this option if you want to completely fill in the tops of the infill pattern"
|
||||
msgstr ""
|
||||
|
||||
msgid "Infill combination - Max layer height"
|
||||
msgstr "Kitöltés összevonása - maximális rétegmagasság"
|
||||
|
||||
@@ -30410,10 +30380,6 @@ msgstr "Fejlesztői eszközök engedélyezése"
|
||||
msgid "An error occurred loading %s"
|
||||
msgstr "Hiba történt a(z) %s betöltésekor"
|
||||
|
||||
# AI Translated
|
||||
msgid "/"
|
||||
msgstr "/"
|
||||
|
||||
# AI Translated
|
||||
#, boost-format
|
||||
msgid "Load %1% to %2%"
|
||||
@@ -32117,6 +32083,10 @@ msgstr ""
|
||||
#~ msgid "An error occurred loading "
|
||||
#~ msgstr "Hiba történt a betöltés során: "
|
||||
|
||||
# AI Translated
|
||||
#~ msgid "/"
|
||||
#~ msgstr "/"
|
||||
|
||||
# AI Translated
|
||||
#, c-format, boost-format
|
||||
#~ msgid "Load %s to "
|
||||
@@ -32323,10 +32293,6 @@ msgstr ""
|
||||
#~ msgid "Support/Color Painting: adjust section position"
|
||||
#~ msgstr "Támasz/Színfestés: metszet pozíciójának beállítása"
|
||||
|
||||
# AI Translated
|
||||
#~ msgid "(Experimental) Use printer agents instead of print hosts"
|
||||
#~ msgstr "(Kísérleti) Nyomtatóügynökök használata nyomtatókiszolgálók helyett"
|
||||
|
||||
# AI Translated
|
||||
#~ msgid "Tab"
|
||||
#~ msgstr "Tab"
|
||||
|
||||
@@ -3,7 +3,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Orca Slicer\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-10-06 13:42+0800\n"
|
||||
"POT-Creation-Date: 2026-10-05 10:49-0300\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
@@ -4350,9 +4350,6 @@ msgstr "Sei sicuro di voler cancellare le informazioni del filamento?"
|
||||
msgid "You need to select the material type and color first."
|
||||
msgstr "Devi prima selezionare il tipo e il colore del materiale."
|
||||
|
||||
msgid "The minimum temperature cannot be greater than the maximum temperature."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Please input a valid value (K in %.1f~%.1f)"
|
||||
msgstr "Si prega di immettere un valore valido (K in %.1f~%.1f)"
|
||||
@@ -6212,7 +6209,7 @@ msgstr "Volume:"
|
||||
msgid "Size:"
|
||||
msgstr "Dimensione:"
|
||||
|
||||
#, boost-format
|
||||
#, c-format, boost-format
|
||||
msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)."
|
||||
msgstr "Sono stati trovati conflitti di percorsi nel G-code sullo strato %d, Z = %.2lfmm. Si prega di separare gli oggetti in conflitto (%s <-> %s)."
|
||||
|
||||
@@ -7089,22 +7086,6 @@ msgstr "Il file .gcode.3mf non contiene dati G-code. Elaboralo con OrcaSlicer ed
|
||||
msgid "File '%s' was lost! Please download it again."
|
||||
msgstr "Il file '%s' è stato perso! Si prega di scaricarlo di nuovo."
|
||||
|
||||
msgid "gcodes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to delete the file from printer."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Do you want to print the file '%s' from printer?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Print file"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to start the print job."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"File: %s\n"
|
||||
@@ -10314,6 +10295,18 @@ msgstr "Mostra i profili non supportati"
|
||||
msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected."
|
||||
msgstr "Mostra i profili incompatibili/non supportati negli elenchi a discesa di stampante e filamento. Questi profili non possono essere selezionati."
|
||||
|
||||
# AI Translated
|
||||
msgid "(Experimental) Use printer agents instead of print hosts"
|
||||
msgstr "(Sperimentale) Usa gli agenti stampante invece degli host di stampa"
|
||||
|
||||
# AI Translated
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
"Instrada i lavori di stampa delle stampanti non Bambu attraverso gli agenti plugin della stampante invece del classico flusso di caricamento sull'host di stampa.\n"
|
||||
"Quando è disattivato, OrcaSlicer usa il comportamento legacy dell'host di stampa."
|
||||
|
||||
# AI Translated
|
||||
msgid "Experimental Features"
|
||||
msgstr "Funzionalità sperimentali"
|
||||
@@ -10330,17 +10323,6 @@ msgstr ""
|
||||
"Tenta di mantenere le zone dipinte (colore/cucitura/supporto/ruvida ecc.) dopo la modifica della mesh dell'oggetto (come taglio/ricarica dal disco/semplifica/correggi ecc.)\n"
|
||||
"Altamente sperimentale! Lento e può creare artefatti."
|
||||
|
||||
msgid "Use printer agents instead of print hosts"
|
||||
msgstr ""
|
||||
|
||||
# AI Translated
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
"Instrada i lavori di stampa delle stampanti non Bambu attraverso gli agenti plugin della stampante invece del classico flusso di caricamento sull'host di stampa.\n"
|
||||
"Quando è disattivato, OrcaSlicer usa il comportamento legacy dell'host di stampa."
|
||||
|
||||
msgid "Allow Abnormal Storage"
|
||||
msgstr "Consenti memoria anomala"
|
||||
|
||||
@@ -11154,12 +11136,6 @@ msgstr "Annulla timelapse e stampa"
|
||||
msgid "Clean Up"
|
||||
msgstr "Pulisci"
|
||||
|
||||
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "Preparing print job"
|
||||
msgstr "Preparazione della stampa"
|
||||
|
||||
@@ -16398,12 +16374,6 @@ msgstr "Riempimento simmetrico asse Y"
|
||||
msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts."
|
||||
msgstr "Se il modello ha due parti simmetriche rispetto all'asse Y e si desidera che queste parti abbiano texture simmetriche, fare clic su questa opzione su una delle parti."
|
||||
|
||||
msgid "Fill pattern tops"
|
||||
msgstr ""
|
||||
|
||||
msgid "Choose this option if you want to completely fill in the tops of the infill pattern"
|
||||
msgstr ""
|
||||
|
||||
msgid "Infill combination - Max layer height"
|
||||
msgstr "Combinazione riempimento - Altezza massima strato"
|
||||
|
||||
@@ -30274,9 +30244,6 @@ msgstr "Abilita strumenti per sviluppatori"
|
||||
msgid "An error occurred loading %s"
|
||||
msgstr "Si è verificato un errore durante il caricamento di %s"
|
||||
|
||||
msgid "/"
|
||||
msgstr "/"
|
||||
|
||||
# AI Translated
|
||||
#, boost-format
|
||||
msgid "Load %1% to %2%"
|
||||
@@ -31980,6 +31947,9 @@ msgstr ""
|
||||
#~ msgid "An error occurred loading "
|
||||
#~ msgstr "Si è verificato un errore durante il caricamento di "
|
||||
|
||||
#~ msgid "/"
|
||||
#~ msgstr "/"
|
||||
|
||||
# AI Translated
|
||||
#, c-format, boost-format
|
||||
#~ msgid "Load %s to "
|
||||
@@ -32185,10 +32155,6 @@ msgstr ""
|
||||
#~ msgid "Support/Color Painting: adjust section position"
|
||||
#~ msgstr "Supporto/Pittura a colori: regola la posizione della sezione"
|
||||
|
||||
# AI Translated
|
||||
#~ msgid "(Experimental) Use printer agents instead of print hosts"
|
||||
#~ msgstr "(Sperimentale) Usa gli agenti stampante invece degli host di stampa"
|
||||
|
||||
# AI Translated
|
||||
#~ msgid "Tab"
|
||||
#~ msgstr "Tab"
|
||||
|
||||
@@ -3,7 +3,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Orca Slicer\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-10-06 13:42+0800\n"
|
||||
"POT-Creation-Date: 2026-10-05 10:49-0300\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
@@ -4352,9 +4352,6 @@ msgstr "フィラメント情報をクリアしてもよろしいですか?"
|
||||
msgid "You need to select the material type and color first."
|
||||
msgstr "まず材料タイプと色を選択してください。"
|
||||
|
||||
msgid "The minimum temperature cannot be greater than the maximum temperature."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Please input a valid value (K in %.1f~%.1f)"
|
||||
msgstr "有効な値を入力してください(Kは%.1f~%.1f)"
|
||||
@@ -6236,7 +6233,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)。"
|
||||
|
||||
@@ -7105,22 +7102,6 @@ msgstr ".gcode.3mfファイルにG-codeデータが含まれていません。Or
|
||||
msgid "File '%s' was lost! Please download it again."
|
||||
msgstr "ファイル %s が見つかりませんでした、もう一度ダウンロードしてください。"
|
||||
|
||||
msgid "gcodes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to delete the file from printer."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Do you want to print the file '%s' from printer?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Print file"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to start the print job."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"File: %s\n"
|
||||
@@ -10348,6 +10329,18 @@ msgstr "非対応のプリセットを表示"
|
||||
msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected."
|
||||
msgstr "プリンターとフィラメントのドロップダウンリストに、互換性のない/非対応のプリセットを表示します。これらのプリセットは選択できません。"
|
||||
|
||||
# AI Translated
|
||||
msgid "(Experimental) Use printer agents instead of print hosts"
|
||||
msgstr "(実験的) プリントホストの代わりにプリンターエージェントを使用"
|
||||
|
||||
# AI Translated
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
"Bambu 以外のプリンターの印刷ジョブを、従来のプリントホストへのアップロードではなく、プリンターのプラグインエージェント経由で送信します。\n"
|
||||
"無効の場合、OrcaSlicer は従来のプリントホストの動作を使用します。"
|
||||
|
||||
# AI Translated
|
||||
msgid "Experimental Features"
|
||||
msgstr "実験的機能"
|
||||
@@ -10364,17 +10357,6 @@ msgstr ""
|
||||
"オブジェクトのメッシュを変更した後 (カット/ディスクから再読み込み/簡略化/修正など) も、ペイントした情報 (カラー/継ぎ目/サポート/ファジーなど) の保持を試みます。\n"
|
||||
"非常に実験的な機能です。処理が遅く、アーティファクトが発生する場合があります。"
|
||||
|
||||
msgid "Use printer agents instead of print hosts"
|
||||
msgstr ""
|
||||
|
||||
# AI Translated
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
"Bambu 以外のプリンターの印刷ジョブを、従来のプリントホストへのアップロードではなく、プリンターのプラグインエージェント経由で送信します。\n"
|
||||
"無効の場合、OrcaSlicer は従来のプリントホストの動作を使用します。"
|
||||
|
||||
msgid "Allow Abnormal Storage"
|
||||
msgstr "異常なストレージを許可"
|
||||
|
||||
@@ -11187,12 +11169,6 @@ msgstr "タイムラプスを中止して印刷"
|
||||
msgid "Clean Up"
|
||||
msgstr "整理する"
|
||||
|
||||
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "Preparing print job"
|
||||
msgstr "造形タスクを準備"
|
||||
|
||||
@@ -16604,12 +16580,6 @@ msgstr "Y軸対称インフィル"
|
||||
msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts."
|
||||
msgstr "モデルにY軸に対して対称な2つのパーツがあり、それらのテクスチャを対称にしたい場合は、一方のパーツでこのオプションをクリックしてください。"
|
||||
|
||||
msgid "Fill pattern tops"
|
||||
msgstr ""
|
||||
|
||||
msgid "Choose this option if you want to completely fill in the tops of the infill pattern"
|
||||
msgstr ""
|
||||
|
||||
# AI Translated
|
||||
msgid "Infill combination - Max layer height"
|
||||
msgstr "インフィル結合 - 最大積層ピッチ"
|
||||
@@ -30796,9 +30766,6 @@ msgstr "開発者ツールを有効化"
|
||||
msgid "An error occurred loading %s"
|
||||
msgstr "%s の読み込み中にエラーが発生しました"
|
||||
|
||||
msgid "/"
|
||||
msgstr "/"
|
||||
|
||||
# AI Translated
|
||||
#, boost-format
|
||||
msgid "Load %1% to %2%"
|
||||
@@ -32539,6 +32506,9 @@ msgstr ""
|
||||
#~ msgid "An error occurred loading "
|
||||
#~ msgstr "読み込み中にエラーが発生しました: "
|
||||
|
||||
#~ msgid "/"
|
||||
#~ msgstr "/"
|
||||
|
||||
# AI Translated
|
||||
#, c-format, boost-format
|
||||
#~ msgid "Load %s to "
|
||||
@@ -32745,10 +32715,6 @@ msgstr ""
|
||||
#~ msgid "Support/Color Painting: adjust section position"
|
||||
#~ msgstr "サポート/色塗り: 断面の位置"
|
||||
|
||||
# AI Translated
|
||||
#~ msgid "(Experimental) Use printer agents instead of print hosts"
|
||||
#~ msgstr "(実験的) プリントホストの代わりにプリンターエージェントを使用"
|
||||
|
||||
# AI Translated
|
||||
#~ msgid "Tab"
|
||||
#~ msgstr "Tab"
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Orca Slicer\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-10-06 13:42+0800\n"
|
||||
"POT-Creation-Date: 2026-10-05 10:49-0300\n"
|
||||
"PO-Revision-Date: 2025-06-02 17:12+0900\n"
|
||||
"Last-Translator: crwusiz <crwusiz@gmail.com>\n"
|
||||
"Language-Team: \n"
|
||||
@@ -4377,9 +4377,6 @@ msgstr "정말 필라멘트 정보를 삭제하시겠습니까?"
|
||||
msgid "You need to select the material type and color first."
|
||||
msgstr "재료 유형과 색상을 먼저 선택해야 합니다."
|
||||
|
||||
msgid "The minimum temperature cannot be greater than the maximum temperature."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Please input a valid value (K in %.1f~%.1f)"
|
||||
msgstr "유효한 값을 입력하세요 (%.1f~%.1f 사이의 K)"
|
||||
@@ -6269,7 +6266,7 @@ msgid "Size:"
|
||||
msgstr "크기:"
|
||||
|
||||
# AI Translated
|
||||
#, boost-format
|
||||
#, c-format, boost-format
|
||||
msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)."
|
||||
msgstr "레이어 %d, Z = %.2lf mm에서 G-code 경로 충돌이 발견되었습니다. 충돌하는 객체를 더 멀리 분리하세요 (%s <-> %s)."
|
||||
|
||||
@@ -7149,22 +7146,6 @@ msgstr ".gcode.3mf 파일에는 G-code 데이터가 없습니다. OrcaSlicer에
|
||||
msgid "File '%s' was lost! Please download it again."
|
||||
msgstr "'%s' 파일이 손실되었습니다! 다시 다운로드하세요."
|
||||
|
||||
msgid "gcodes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to delete the file from printer."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Do you want to print the file '%s' from printer?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Print file"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to start the print job."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"File: %s\n"
|
||||
@@ -10481,6 +10462,18 @@ msgstr "지원되지 않는 사전 설정 표시"
|
||||
msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected."
|
||||
msgstr "프린터 및 필라멘트 드롭다운 목록에 호환되지 않거나 지원되지 않는 사전 설정을 표시합니다. 이러한 사전 설정은 선택할 수 없습니다."
|
||||
|
||||
# AI Translated
|
||||
msgid "(Experimental) Use printer agents instead of print hosts"
|
||||
msgstr "(실험적) 출력 호스트 대신 프린터 에이전트 사용"
|
||||
|
||||
# AI Translated
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
"Bambu 이외의 프린터 출력 작업을 기존 출력 호스트 업로드 방식 대신 프린터 플러그인 에이전트를 통해 전달합니다.\n"
|
||||
"비활성화하면 OrcaSlicer는 기존 출력 호스트 동작을 사용합니다."
|
||||
|
||||
# AI Translated
|
||||
msgid "Experimental Features"
|
||||
msgstr "실험적 기능"
|
||||
@@ -10497,17 +10490,6 @@ msgstr ""
|
||||
"객체 메시를 변경한 후(자르기/디스크에서 다시 불러오기/단순화/수정 등)에도 칠한 기능(색상/재봉선/서포트/퍼지 등)을 유지하려고 시도합니다.\n"
|
||||
"매우 실험적인 기능입니다! 속도가 느리고 아티팩트가 생길 수 있습니다."
|
||||
|
||||
msgid "Use printer agents instead of print hosts"
|
||||
msgstr ""
|
||||
|
||||
# AI Translated
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
"Bambu 이외의 프린터 출력 작업을 기존 출력 호스트 업로드 방식 대신 프린터 플러그인 에이전트를 통해 전달합니다.\n"
|
||||
"비활성화하면 OrcaSlicer는 기존 출력 호스트 동작을 사용합니다."
|
||||
|
||||
# AI Translated
|
||||
msgid "Allow Abnormal Storage"
|
||||
msgstr "비정상 저장 장치 허용"
|
||||
@@ -11328,12 +11310,6 @@ msgstr "타임랩스 취소 후 출력"
|
||||
msgid "Clean Up"
|
||||
msgstr "정리"
|
||||
|
||||
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "Preparing print job"
|
||||
msgstr "출력 작업 준비 중"
|
||||
|
||||
@@ -16762,12 +16738,6 @@ msgstr "Y축 대칭 채우기"
|
||||
msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts."
|
||||
msgstr "모델에 Y축을 기준으로 대칭인 두 부품이 있고 이 부품들이 대칭 질감을 갖게 하려면, 두 부품 중 하나에서 이 옵션을 선택하십시오."
|
||||
|
||||
msgid "Fill pattern tops"
|
||||
msgstr ""
|
||||
|
||||
msgid "Choose this option if you want to completely fill in the tops of the infill pattern"
|
||||
msgstr ""
|
||||
|
||||
msgid "Infill combination - Max layer height"
|
||||
msgstr "채우기 조합 - 최대 레이어 높이"
|
||||
|
||||
@@ -30813,9 +30783,6 @@ msgstr "개발자 도구 사용"
|
||||
msgid "An error occurred loading %s"
|
||||
msgstr "%s 로드 중 오류가 발생했습니다"
|
||||
|
||||
msgid "/"
|
||||
msgstr "/"
|
||||
|
||||
# AI Translated
|
||||
#, boost-format
|
||||
msgid "Load %1% to %2%"
|
||||
@@ -32528,6 +32495,9 @@ msgstr ""
|
||||
#~ msgid "An error occurred loading "
|
||||
#~ msgstr "로드 중 오류가 발생했습니다: "
|
||||
|
||||
#~ msgid "/"
|
||||
#~ msgstr "/"
|
||||
|
||||
# AI Translated
|
||||
#, c-format, boost-format
|
||||
#~ msgid "Load %s to "
|
||||
@@ -32734,10 +32704,6 @@ msgstr ""
|
||||
#~ msgid "Support/Color Painting: adjust section position"
|
||||
#~ msgstr "서포트/색상 칠하기: 단면 위치 조정"
|
||||
|
||||
# AI Translated
|
||||
#~ msgid "(Experimental) Use printer agents instead of print hosts"
|
||||
#~ msgstr "(실험적) 출력 호스트 대신 프린터 에이전트 사용"
|
||||
|
||||
# AI Translated
|
||||
#~ msgid "Tab"
|
||||
#~ msgstr "탭"
|
||||
|
||||
@@ -147,7 +147,6 @@ src/slic3r/GUI/HMSPanel.cpp
|
||||
src/slic3r/GUI/MainFrame.cpp
|
||||
src/slic3r/GUI/MediaPlayCtrl.cpp
|
||||
src/slic3r/GUI/MediaFilePanel.cpp
|
||||
src/slic3r/GUI/OrcaFilesPanel.cpp
|
||||
src/slic3r/GUI/ImageGrid.cpp
|
||||
src/slic3r/GUI/Widgets/ImageSwitchButton.cpp
|
||||
src/slic3r/GUI/Printer/PrinterFileSystem.cpp
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-10-06 13:42+0800\n"
|
||||
"POT-Creation-Date: 2026-10-05 10:49-0300\n"
|
||||
"PO-Revision-Date: 2026-07-02 14:13+0300\n"
|
||||
"Last-Translator: Gintaras Kučinskas <sharanchius@gmail.com>\n"
|
||||
"Language-Team: \n"
|
||||
@@ -4343,9 +4343,6 @@ msgstr "Ar jūs tikrai norite išvalyti gijos informaciją?"
|
||||
msgid "You need to select the material type and color first."
|
||||
msgstr "Pradžioje jums reikia pasirinkti medžiagos tipą ir spalvą."
|
||||
|
||||
msgid "The minimum temperature cannot be greater than the maximum temperature."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Please input a valid value (K in %.1f~%.1f)"
|
||||
msgstr "Įveskite tinkamą reikšmę (K %.1f~%.1f)"
|
||||
@@ -6225,7 +6222,7 @@ msgid "Size:"
|
||||
msgstr "Dydis:"
|
||||
|
||||
# AI Translated
|
||||
#, boost-format
|
||||
#, c-format, boost-format
|
||||
msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)."
|
||||
msgstr "Rasta G-code trajektorijų konfliktų %d sluoksnyje, Z = %.2lfmm. Prašome labiau atskirti konfliktuojančius objektus (%s <-> %s)."
|
||||
|
||||
@@ -7110,22 +7107,6 @@ msgstr "Failas „.gcode.3mf“ neturi G-code duomenų. Supjaustykite jį su „
|
||||
msgid "File '%s' was lost! Please download it again."
|
||||
msgstr "Failas „%s“ nerastas! Atsisiųskite jį iš naujo."
|
||||
|
||||
msgid "gcodes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to delete the file from printer."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Do you want to print the file '%s' from printer?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Print file"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to start the print job."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"File: %s\n"
|
||||
@@ -10316,6 +10297,18 @@ msgstr "Rodyti nepalaikomus profilius"
|
||||
msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected."
|
||||
msgstr "Rodyti nesuderinamus / nepalaikomus profilius spausdintuvų ir gijų išskleidžiamuosiuose sąrašuose. Šių profilių pasirinkti negalima."
|
||||
|
||||
# AI Translated
|
||||
msgid "(Experimental) Use printer agents instead of print hosts"
|
||||
msgstr "(Eksperimentinė) Naudoti spausdintuvo agentus vietoj spausdinimo serverių"
|
||||
|
||||
# AI Translated
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
"Nukreipia ne Bambu spausdintuvų spausdinimo užduotis per spausdintuvo papildinių agentus, o ne per klasikinį įkėlimo į spausdinimo serverį srautą.\n"
|
||||
"Kai išjungta, OrcaSlicer naudoja senąjį spausdinimo serverio veikimą."
|
||||
|
||||
msgid "Experimental Features"
|
||||
msgstr "Eksperimentinis"
|
||||
|
||||
@@ -10329,17 +10322,6 @@ msgstr ""
|
||||
"Bando išsaugoti nudažytas ypatybes (spalvą, siūlę, atramas, šiauštą paviršių ir kt.) pakeitus objekto tinklelio modelį (pvz., po pjovimo, įkėlimo iš naujo, supaprastinimo, taisymo ir kt.)\n"
|
||||
"Labai eksperimentinė funkcija! Veikia lėtai ir gali sukurti artefaktų."
|
||||
|
||||
msgid "Use printer agents instead of print hosts"
|
||||
msgstr ""
|
||||
|
||||
# AI Translated
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
"Nukreipia ne Bambu spausdintuvų spausdinimo užduotis per spausdintuvo papildinių agentus, o ne per klasikinį įkėlimo į spausdinimo serverį srautą.\n"
|
||||
"Kai išjungta, OrcaSlicer naudoja senąjį spausdinimo serverio veikimą."
|
||||
|
||||
msgid "Allow Abnormal Storage"
|
||||
msgstr "Leisti sutrikusią (neįprastą) laikmeną"
|
||||
|
||||
@@ -11150,12 +11132,6 @@ msgstr "Atšaukti intervalinį fotografavimą ir spausdinti"
|
||||
msgid "Clean Up"
|
||||
msgstr "Išvalyti"
|
||||
|
||||
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "Preparing print job"
|
||||
msgstr "Spausdinimo užduoties rengimas"
|
||||
|
||||
@@ -16386,12 +16362,6 @@ msgstr "Simetriškas užpildas pagal Y ašį"
|
||||
msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts."
|
||||
msgstr "Jei modelis turi dvi dalis, kurios yra simetriškos Y ašies atžvilgiu, ir norite, kad šios dalys turėtų simetriškas tekstūras, spustelėkite šią parinktį vienoje iš dalių."
|
||||
|
||||
msgid "Fill pattern tops"
|
||||
msgstr ""
|
||||
|
||||
msgid "Choose this option if you want to completely fill in the tops of the infill pattern"
|
||||
msgstr ""
|
||||
|
||||
msgid "Infill combination - Max layer height"
|
||||
msgstr "Užpildo derinimas – maksimalus sluoksnio aukštis"
|
||||
|
||||
@@ -30146,10 +30116,6 @@ msgstr "Įjungti kūrėjo įrankius"
|
||||
msgid "An error occurred loading %s"
|
||||
msgstr "Įvyko klaida įkeliant %s"
|
||||
|
||||
# AI Translated
|
||||
msgid "/"
|
||||
msgstr "/"
|
||||
|
||||
# AI Translated
|
||||
#, boost-format
|
||||
msgid "Load %1% to %2%"
|
||||
@@ -30830,10 +30796,6 @@ msgstr ""
|
||||
"Venkite deformacijų (warping)\n"
|
||||
"Ar žinojote, kad spausdinant medžiagas, kurios yra linkusios trauktis ir riestis (pvz., ABS), tinkamas kaitinamojo pagrindo temperatūros padidinimas gali sumažinti deformacijų (warping) tikimybę?"
|
||||
|
||||
# AI Translated
|
||||
#~ msgid "(Experimental) Use printer agents instead of print hosts"
|
||||
#~ msgstr "(Eksperimentinė) Naudoti spausdintuvo agentus vietoj spausdinimo serverių"
|
||||
|
||||
#~ msgid "X"
|
||||
#~ msgstr "X"
|
||||
|
||||
@@ -31862,6 +31824,10 @@ msgstr ""
|
||||
#~ msgid "An error occurred loading "
|
||||
#~ msgstr "Įvyko klaida įkeliant "
|
||||
|
||||
# AI Translated
|
||||
#~ msgid "/"
|
||||
#~ msgstr "/"
|
||||
|
||||
# AI Translated
|
||||
#, c-format, boost-format
|
||||
#~ msgid "Load %s to "
|
||||
|
||||
@@ -3,7 +3,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Orca Slicer\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-10-06 13:42+0800\n"
|
||||
"POT-Creation-Date: 2026-10-05 10:49-0300\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
@@ -4719,9 +4719,6 @@ msgstr "Weet u zeker dat u de filamentinformatie wilt wissen?"
|
||||
msgid "You need to select the material type and color first."
|
||||
msgstr "U moet eerst het materiaaltype en de kleur selecteren."
|
||||
|
||||
msgid "The minimum temperature cannot be greater than the maximum temperature."
|
||||
msgstr ""
|
||||
|
||||
# AI Translated
|
||||
#, c-format, boost-format
|
||||
msgid "Please input a valid value (K in %.1f~%.1f)"
|
||||
@@ -6749,7 +6746,7 @@ msgid "Size:"
|
||||
msgstr "Maat:"
|
||||
|
||||
# AI Translated
|
||||
#, boost-format
|
||||
#, c-format, boost-format
|
||||
msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)."
|
||||
msgstr "Er zijn conflicten tussen G-code-paden gevonden op laag %d, Z = %.2lfmm. Plaats de conflicterende objecten verder uit elkaar (%s <-> %s)."
|
||||
|
||||
@@ -7689,22 +7686,6 @@ msgstr "Het .gcode.3mf-bestand bevat geen G-code-gegevens. Slice het met Orca Sl
|
||||
msgid "File '%s' was lost! Please download it again."
|
||||
msgstr "Bestand '%s' is verloren gegaan! Download het opnieuw."
|
||||
|
||||
msgid "gcodes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to delete the file from printer."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Do you want to print the file '%s' from printer?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Print file"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to start the print job."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"File: %s\n"
|
||||
@@ -11173,6 +11154,18 @@ msgstr "Niet-ondersteunde voorinstellingen tonen"
|
||||
msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected."
|
||||
msgstr "Toon incompatibele/niet-ondersteunde voorinstellingen in de keuzelijsten voor printer en filament. Deze voorinstellingen kunnen niet worden geselecteerd."
|
||||
|
||||
# AI Translated
|
||||
msgid "(Experimental) Use printer agents instead of print hosts"
|
||||
msgstr "(Experimenteel) Printeragents gebruiken in plaats van printhosts"
|
||||
|
||||
# AI Translated
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
"Stuurt printtaken voor niet-Bambu-printers via printer-plug-inagents in plaats van via de klassieke uploadstroom naar de printhost.\n"
|
||||
"Wanneer dit is uitgeschakeld, gebruikt OrcaSlicer het oude printhostgedrag."
|
||||
|
||||
# AI Translated
|
||||
msgid "Experimental Features"
|
||||
msgstr "Experimentele functies"
|
||||
@@ -11189,17 +11182,6 @@ msgstr ""
|
||||
"Probeer geschilderde kenmerken (kleur/naad/ondersteuning/vaag enz.) te behouden na het wijzigen van de mesh van het object (zoals snijden/opnieuw laden vanaf schijf/vereenvoudigen/repareren enz.)\n"
|
||||
"Zeer experimenteel! Traag en kan artefacten veroorzaken."
|
||||
|
||||
msgid "Use printer agents instead of print hosts"
|
||||
msgstr ""
|
||||
|
||||
# AI Translated
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
"Stuurt printtaken voor niet-Bambu-printers via printer-plug-inagents in plaats van via de klassieke uploadstroom naar de printhost.\n"
|
||||
"Wanneer dit is uitgeschakeld, gebruikt OrcaSlicer het oude printhostgedrag."
|
||||
|
||||
# AI Translated
|
||||
msgid "Allow Abnormal Storage"
|
||||
msgstr "Afwijkend opslagmedium toestaan"
|
||||
@@ -12044,12 +12026,6 @@ msgstr "Timelapse annuleren en printen"
|
||||
msgid "Clean Up"
|
||||
msgstr "Opruimen"
|
||||
|
||||
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "Preparing print job"
|
||||
msgstr "Print opdracht voorbereiden"
|
||||
|
||||
@@ -17796,12 +17772,6 @@ msgstr "Symmetrische vulling om de Y-as"
|
||||
msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts."
|
||||
msgstr "Als het model twee delen heeft die symmetrisch zijn ten opzichte van de Y-as en u wilt dat deze delen symmetrische texturen hebben, klik dan op deze optie bij een van de delen."
|
||||
|
||||
msgid "Fill pattern tops"
|
||||
msgstr ""
|
||||
|
||||
msgid "Choose this option if you want to completely fill in the tops of the infill pattern"
|
||||
msgstr ""
|
||||
|
||||
# AI Translated
|
||||
msgid "Infill combination - Max layer height"
|
||||
msgstr "Vullingcombinatie - Maximale laaghoogte"
|
||||
@@ -32344,9 +32314,6 @@ msgstr "Ontwikkelaarstools inschakelen"
|
||||
msgid "An error occurred loading %s"
|
||||
msgstr "Er is een fout opgetreden bij het laden van %s"
|
||||
|
||||
msgid "/"
|
||||
msgstr "/"
|
||||
|
||||
# AI Translated
|
||||
#, boost-format
|
||||
msgid "Load %1% to %2%"
|
||||
@@ -34113,6 +34080,9 @@ msgstr ""
|
||||
#~ msgid "An error occurred loading "
|
||||
#~ msgstr "Er is een fout opgetreden bij het laden van "
|
||||
|
||||
#~ msgid "/"
|
||||
#~ msgstr "/"
|
||||
|
||||
# AI Translated
|
||||
#, c-format, boost-format
|
||||
#~ msgid "Load %s to "
|
||||
@@ -34322,10 +34292,6 @@ msgstr ""
|
||||
#~ msgid "Support/Color Painting: adjust section position"
|
||||
#~ msgstr "Support/kleur intekenen: pas de sectie positie aan"
|
||||
|
||||
# AI Translated
|
||||
#~ msgid "(Experimental) Use printer agents instead of print hosts"
|
||||
#~ msgstr "(Experimenteel) Printeragents gebruiken in plaats van printhosts"
|
||||
|
||||
# AI Translated
|
||||
#~ msgid "Tab"
|
||||
#~ msgstr "Tab"
|
||||
|
||||
@@ -3,7 +3,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OrcaSlicer 2.3.0-rc\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-10-06 13:42+0800\n"
|
||||
"POT-Creation-Date: 2026-10-05 10:49-0300\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: Krzysztof Morga <<tlumaczeniebs@gmail.com>>\n"
|
||||
"Language-Team: \n"
|
||||
@@ -4438,9 +4438,6 @@ msgstr "Czy na pewno usunąć informacje o filamentach?"
|
||||
msgid "You need to select the material type and color first."
|
||||
msgstr "Najpierw należy wybrać rodzaj i kolor filamentu."
|
||||
|
||||
msgid "The minimum temperature cannot be greater than the maximum temperature."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Please input a valid value (K in %.1f~%.1f)"
|
||||
msgstr "Proszę podać prawidłową wartość (K w zakresie %.1f~%.1f)"
|
||||
@@ -6344,7 +6341,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)."
|
||||
|
||||
@@ -7241,22 +7238,6 @@ msgstr "Plik .gcode.3mf nie zawiera danych G-code. Proszę poddać go obróbce w
|
||||
msgid "File '%s' was lost! Please download it again."
|
||||
msgstr "Plik „%s” został utracony! Proszę pobrać go ponownie."
|
||||
|
||||
msgid "gcodes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to delete the file from printer."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Do you want to print the file '%s' from printer?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Print file"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to start the print job."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"File: %s\n"
|
||||
@@ -10579,6 +10560,18 @@ msgstr "Pokaż nieobsługiwane profile"
|
||||
msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected."
|
||||
msgstr "Pokazuj niekompatybilne/nieobsługiwane profile na listach rozwijanych drukarek i filamentów. Tych profili nie można wybrać."
|
||||
|
||||
# AI Translated
|
||||
msgid "(Experimental) Use printer agents instead of print hosts"
|
||||
msgstr "(Eksperymentalne) Używaj agentów drukarki zamiast serwerów druku"
|
||||
|
||||
# AI Translated
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
"Kieruje zadania druku dla drukarek innych niż Bambu przez agentów wtyczek drukarki zamiast klasycznego przesyłania do serwera druku.\n"
|
||||
"Gdy opcja jest wyłączona, OrcaSlicer korzysta z dotychczasowego działania serwera druku."
|
||||
|
||||
# AI Translated
|
||||
msgid "Experimental Features"
|
||||
msgstr "Funkcje eksperymentalne"
|
||||
@@ -10595,17 +10588,6 @@ msgstr ""
|
||||
"Próbuje zachować malowane cechy (kolor/szew/podpory/skórę fuzzy itp.) po zmianie siatki obiektu (np. cięcie/wczytanie ponownie z dysku/uproszczenie/naprawa itp.)\n"
|
||||
"Wysoce eksperymentalne! Powolne i może tworzyć artefakty."
|
||||
|
||||
msgid "Use printer agents instead of print hosts"
|
||||
msgstr ""
|
||||
|
||||
# AI Translated
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
"Kieruje zadania druku dla drukarek innych niż Bambu przez agentów wtyczek drukarki zamiast klasycznego przesyłania do serwera druku.\n"
|
||||
"Gdy opcja jest wyłączona, OrcaSlicer korzysta z dotychczasowego działania serwera druku."
|
||||
|
||||
# AI Translated
|
||||
msgid "Allow Abnormal Storage"
|
||||
msgstr "Zezwalaj na nieprawidłową pamięć"
|
||||
@@ -11429,12 +11411,6 @@ msgstr "Anuluj timelapse i drukuj"
|
||||
msgid "Clean Up"
|
||||
msgstr "Wyczyść"
|
||||
|
||||
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "Preparing print job"
|
||||
msgstr "Przygotowywanie zadania do druku"
|
||||
|
||||
@@ -16823,12 +16799,6 @@ msgstr "Symetryczne wypełnienie względem osi Y"
|
||||
msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts."
|
||||
msgstr "Jeśli model ma dwie części symetryczne względem osi Y i chcesz, aby miały symetryczne tekstury, zaznacz tę opcję dla jednej z części."
|
||||
|
||||
msgid "Fill pattern tops"
|
||||
msgstr ""
|
||||
|
||||
msgid "Choose this option if you want to completely fill in the tops of the infill pattern"
|
||||
msgstr ""
|
||||
|
||||
msgid "Infill combination - Max layer height"
|
||||
msgstr "Kombinacja wypełnienia - Maks. wysokość warstwy"
|
||||
|
||||
@@ -30798,9 +30768,6 @@ msgstr "Włącz narzędzia deweloperskie"
|
||||
msgid "An error occurred loading %s"
|
||||
msgstr "Wystąpił błąd podczas ładowania %s"
|
||||
|
||||
msgid "/"
|
||||
msgstr "/"
|
||||
|
||||
# AI Translated
|
||||
#, boost-format
|
||||
msgid "Load %1% to %2%"
|
||||
@@ -31480,10 +31447,6 @@ msgstr ""
|
||||
"Unikaj odkształceń\n"
|
||||
"Czy wiesz, że podczas drukowania filamentami podatnymi na odkształcenia, takimi jak ABS, odpowiednie zwiększenie temperatury podgrzewanej płyty może zmniejszyć prawdopodobieństwo odkształceń?"
|
||||
|
||||
# AI Translated
|
||||
#~ msgid "(Experimental) Use printer agents instead of print hosts"
|
||||
#~ msgstr "(Eksperymentalne) Używaj agentów drukarki zamiast serwerów druku"
|
||||
|
||||
#~ msgid "X"
|
||||
#~ msgstr "X"
|
||||
|
||||
@@ -32482,6 +32445,9 @@ msgstr ""
|
||||
#~ msgid "An error occurred loading "
|
||||
#~ msgstr "Wystąpił błąd podczas ładowania"
|
||||
|
||||
#~ msgid "/"
|
||||
#~ msgstr "/"
|
||||
|
||||
# AI Translated
|
||||
#, c-format, boost-format
|
||||
#~ msgid "Load %s to "
|
||||
|
||||
@@ -3,7 +3,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Orca Slicer\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-10-06 13:42+0800\n"
|
||||
"POT-Creation-Date: 2026-10-05 10:49-0300\n"
|
||||
"PO-Revision-Date: 2026-07-26 11:14-0300\n"
|
||||
"Last-Translator: Alexandre Folle de Menezes\n"
|
||||
"Language-Team: Portuguese, Brazilian\n"
|
||||
@@ -4184,9 +4184,6 @@ msgstr "Tem certeza de que deseja limpar as informações do filamento?"
|
||||
msgid "You need to select the material type and color first."
|
||||
msgstr "Você precisa selecionar o tipo e a cor do material primeiro."
|
||||
|
||||
msgid "The minimum temperature cannot be greater than the maximum temperature."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Please input a valid value (K in %.1f~%.1f)"
|
||||
msgstr "Por favor insira um valor válido (K entre %.1f~%.1f)"
|
||||
@@ -6018,7 +6015,7 @@ msgstr "Volume:"
|
||||
msgid "Size:"
|
||||
msgstr "Tamanho:"
|
||||
|
||||
#, boost-format
|
||||
#, c-format, boost-format
|
||||
msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)."
|
||||
msgstr "Foram encontrados conflitos de caminhos de G-code na camada %d, Z = %.2lfmm. Por favor, separe mais os objetos em conflito (%s <-> %s)."
|
||||
|
||||
@@ -6881,22 +6878,6 @@ msgstr "O arquivo .gcode.3mf não contém dados de G-code. Por favor, fatie com
|
||||
msgid "File '%s' was lost! Please download it again."
|
||||
msgstr "O arquivo '%s' foi perdido! Por favor, baixe-o novamente."
|
||||
|
||||
msgid "gcodes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to delete the file from printer."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Do you want to print the file '%s' from printer?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Print file"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to start the print job."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"File: %s\n"
|
||||
@@ -9959,6 +9940,16 @@ msgstr "Mostrar predefinições não suportadas"
|
||||
msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected."
|
||||
msgstr "Exibir predefinições incompatíveis e não suportadas nas listas de impressora e filamento. Essas predefinições não podem ser selecionadas."
|
||||
|
||||
msgid "(Experimental) Use printer agents instead of print hosts"
|
||||
msgstr "(Experimental) Usar agentes de impressora em vez de hosts de impressão"
|
||||
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
"Encaminha os trabalhos de impressão de impressoras que não são Bambu pelos agentes de plugin de impressora em vez do fluxo clássico de envio ao host de impressão.\n"
|
||||
"Quando desativado, o OrcaSlicer usa o comportamento antigo do host de impressão."
|
||||
|
||||
msgid "Experimental Features"
|
||||
msgstr "Recursos Experimentais"
|
||||
|
||||
@@ -9972,16 +9963,6 @@ msgstr ""
|
||||
"Tenta manter recursos pintados (cor/costura/suporte/textura difusa etc.) após alterar a malha do objeto (como cortar/recarregar do disco/simplificar/corrigir etc.)\n"
|
||||
"Altamente experimental! Lento e pode criar artefatos."
|
||||
|
||||
msgid "Use printer agents instead of print hosts"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
"Encaminha os trabalhos de impressão de impressoras que não são Bambu pelos agentes de plugin de impressora em vez do fluxo clássico de envio ao host de impressão.\n"
|
||||
"Quando desativado, o OrcaSlicer usa o comportamento antigo do host de impressão."
|
||||
|
||||
msgid "Allow Abnormal Storage"
|
||||
msgstr "Permitir Armazenamento Anormal"
|
||||
|
||||
@@ -10738,12 +10719,6 @@ msgstr "Cancelar Timelapse e Imprimir"
|
||||
msgid "Clean Up"
|
||||
msgstr "Limpar"
|
||||
|
||||
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "Preparing print job"
|
||||
msgstr "Preparando trabalho de impressão"
|
||||
|
||||
@@ -15819,12 +15794,6 @@ msgstr "Preenchimento simétrico no eixo Y"
|
||||
msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts."
|
||||
msgstr "Se o modelo tiver duas partes simétricas em relação ao eixo Y e você quiser que essas partes tenham texturas simétricas, clique nesta opção em uma das partes."
|
||||
|
||||
msgid "Fill pattern tops"
|
||||
msgstr ""
|
||||
|
||||
msgid "Choose this option if you want to completely fill in the tops of the infill pattern"
|
||||
msgstr ""
|
||||
|
||||
msgid "Infill combination - Max layer height"
|
||||
msgstr "Combinação de preenchimento - Altura máx da camada"
|
||||
|
||||
@@ -29370,10 +29339,6 @@ msgstr "Ativar Ferramentas de Desenvolvedor"
|
||||
msgid "An error occurred loading %s"
|
||||
msgstr "Ocorreu um erro ao carregar %s"
|
||||
|
||||
# AI Translated
|
||||
msgid "/"
|
||||
msgstr "/"
|
||||
|
||||
# AI Translated
|
||||
#, boost-format
|
||||
msgid "Load %1% to %2%"
|
||||
@@ -30053,9 +30018,6 @@ msgstr ""
|
||||
"Evitar empenamento\n"
|
||||
"Você sabia que ao imprimir materiais propensos ao empenamento como ABS, aumentar adequadamente a temperatura da mesa aquecida pode reduzir a probabilidade de empenamento?"
|
||||
|
||||
#~ msgid "(Experimental) Use printer agents instead of print hosts"
|
||||
#~ msgstr "(Experimental) Usar agentes de impressora em vez de hosts de impressão"
|
||||
|
||||
#~ msgid "X"
|
||||
#~ msgstr "X"
|
||||
|
||||
@@ -31077,6 +31039,10 @@ msgstr ""
|
||||
#~ msgid "An error occurred loading "
|
||||
#~ msgstr "Ocorreu um erro ao carregar "
|
||||
|
||||
# AI Translated
|
||||
#~ msgid "/"
|
||||
#~ msgstr "/"
|
||||
|
||||
# AI Translated
|
||||
#, c-format, boost-format
|
||||
#~ msgid "Load %s to "
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OrcaSlicer V2.5.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-10-06 13:42+0800\n"
|
||||
"POT-Creation-Date: 2026-10-05 10:49-0300\n"
|
||||
"PO-Revision-Date: 2026-02-25 13:38+0300\n"
|
||||
"Last-Translator: Felix14_v2\n"
|
||||
"Language-Team: Felix14_v2 (ДС/ТГ: @felix14_v2, почта: aleks111001@list.ru), Andylg <andylg@yandex.ru>\n"
|
||||
@@ -4319,9 +4319,6 @@ msgstr "Вы действительно хотите удалить информ
|
||||
msgid "You need to select the material type and color first."
|
||||
msgstr "Сначала нужно выбрать тип материала и цвет."
|
||||
|
||||
msgid "The minimum temperature cannot be greater than the maximum temperature."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Please input a valid value (K in %.1f~%.1f)"
|
||||
msgstr "Пожалуйста, введите допустимое значение (K в диапазоне %.1f~%.1f)"
|
||||
@@ -6236,7 +6233,7 @@ msgstr "Объём:"
|
||||
msgid "Size:"
|
||||
msgstr "Размер:"
|
||||
|
||||
#, boost-format
|
||||
#, c-format, boost-format
|
||||
msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)."
|
||||
msgstr "В G-code на %d слое (z = %.2lf мм) обнаружен конфликт путей. Пожалуйста, разместите конфликтующие модели дальше друг от друга (%s <-> %s)."
|
||||
|
||||
@@ -7147,22 +7144,6 @@ msgstr "Файл .gcode.3mf не содержит данных G-code. Испо
|
||||
msgid "File '%s' was lost! Please download it again."
|
||||
msgstr "Файл '%s' потерян! Пожалуйста, загрузите его снова."
|
||||
|
||||
msgid "gcodes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to delete the file from printer."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Do you want to print the file '%s' from printer?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Print file"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to start the print job."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"File: %s\n"
|
||||
@@ -10340,6 +10321,18 @@ msgstr ""
|
||||
"\n"
|
||||
"Примечание: профили остаются недоступными для выбора."
|
||||
|
||||
# AI Translated
|
||||
msgid "(Experimental) Use printer agents instead of print hosts"
|
||||
msgstr "(Экспериментально) Использовать агентов принтера вместо хостов печати"
|
||||
|
||||
# AI Translated
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
"Отправлять задания печати для принтеров, отличных от Bambu, через агентов плагинов принтера вместо классической загрузки на хост печати.\n"
|
||||
"Если отключено, OrcaSlicer использует прежнее поведение хоста печати."
|
||||
|
||||
msgid "Experimental Features"
|
||||
msgstr "Экспериментальные настройки"
|
||||
|
||||
@@ -10354,17 +10347,6 @@ msgstr ""
|
||||
"\n"
|
||||
"Внимание: функция экспериментальна! Возможны падение производительности и артефакты работы."
|
||||
|
||||
msgid "Use printer agents instead of print hosts"
|
||||
msgstr ""
|
||||
|
||||
# AI Translated
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
"Отправлять задания печати для принтеров, отличных от Bambu, через агентов плагинов принтера вместо классической загрузки на хост печати.\n"
|
||||
"Если отключено, OrcaSlicer использует прежнее поведение хоста печати."
|
||||
|
||||
msgid "Allow Abnormal Storage"
|
||||
msgstr "Игнорировать неисправность хранилища"
|
||||
|
||||
@@ -11163,12 +11145,6 @@ msgstr "Отключить таймлапс и продолжить"
|
||||
msgid "Clean Up"
|
||||
msgstr "Очистить"
|
||||
|
||||
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "Preparing print job"
|
||||
msgstr "Подготовка задания на печать"
|
||||
|
||||
@@ -16593,12 +16569,6 @@ msgstr "Отразить шаблон"
|
||||
msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts."
|
||||
msgstr "Если модель состоит из двух симметричных частей, у одной из них можно отразить шаблон заполнения, чтобы модель имела симметричную текстуру поверхности."
|
||||
|
||||
msgid "Fill pattern tops"
|
||||
msgstr ""
|
||||
|
||||
msgid "Choose this option if you want to completely fill in the tops of the infill pattern"
|
||||
msgstr ""
|
||||
|
||||
msgid "Infill combination - Max layer height"
|
||||
msgstr "Предел высоты объединённого слоя"
|
||||
|
||||
@@ -30637,9 +30607,6 @@ msgstr "Включить инструменты разработчика"
|
||||
msgid "An error occurred loading %s"
|
||||
msgstr "Ошибка при загрузке %s"
|
||||
|
||||
msgid "/"
|
||||
msgstr "/"
|
||||
|
||||
# AI Translated
|
||||
#, boost-format
|
||||
msgid "Load %1% to %2%"
|
||||
@@ -31317,10 +31284,6 @@ msgstr ""
|
||||
"Предотвращение коробления материала\n"
|
||||
"Знаете ли вы, что при печати материалами, склонными к короблению, таких как ABS, повышение температуры подогреваемого стола может снизить эту вероятность?"
|
||||
|
||||
# AI Translated
|
||||
#~ msgid "(Experimental) Use printer agents instead of print hosts"
|
||||
#~ msgstr "(Экспериментально) Использовать агентов принтера вместо хостов печати"
|
||||
|
||||
#~ msgid "X"
|
||||
#~ msgstr "X"
|
||||
|
||||
@@ -32355,6 +32318,9 @@ msgstr ""
|
||||
#~ msgid "An error occurred loading "
|
||||
#~ msgstr "Ошибка при загрузке "
|
||||
|
||||
#~ msgid "/"
|
||||
#~ msgstr "/"
|
||||
|
||||
# AI Translated
|
||||
#, c-format, boost-format
|
||||
#~ msgid "Load %s to "
|
||||
|
||||
@@ -3,7 +3,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Orca Slicer\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-10-06 13:42+0800\n"
|
||||
"POT-Creation-Date: 2026-10-05 10:49-0300\n"
|
||||
"Language: sv\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -4784,9 +4784,6 @@ msgstr "Är du säker på att du vill rensa filament informationen?"
|
||||
msgid "You need to select the material type and color first."
|
||||
msgstr "Du måste först välja materialtyp och färg."
|
||||
|
||||
msgid "The minimum temperature cannot be greater than the maximum temperature."
|
||||
msgstr ""
|
||||
|
||||
# AI Translated
|
||||
#, c-format, boost-format
|
||||
msgid "Please input a valid value (K in %.1f~%.1f)"
|
||||
@@ -6843,7 +6840,7 @@ msgid "Size:"
|
||||
msgstr "Storlek:"
|
||||
|
||||
# AI Translated
|
||||
#, boost-format
|
||||
#, c-format, boost-format
|
||||
msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)."
|
||||
msgstr "Konflikter mellan G-code-banor hittades på lager %d, Z = %.2lfmm. Placera de objekt som krockar längre ifrån varandra (%s <-> %s)."
|
||||
|
||||
@@ -7784,22 +7781,6 @@ msgstr "Filen .gcode.3mf innehåller inga G-code-data. Bered den med Orca Slicer
|
||||
msgid "File '%s' was lost! Please download it again."
|
||||
msgstr "Filen '%s' förlorades! Ladda ner den igen."
|
||||
|
||||
msgid "gcodes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to delete the file from printer."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Do you want to print the file '%s' from printer?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Print file"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to start the print job."
|
||||
msgstr ""
|
||||
|
||||
# AI Translated
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
@@ -11316,6 +11297,18 @@ msgstr "Visa förinställningar som inte stöds"
|
||||
msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected."
|
||||
msgstr "Visa inkompatibla förinställningar och förinställningar som inte stöds i rullgardinslistorna för skrivare och filament. Dessa förinställningar kan inte väljas."
|
||||
|
||||
# AI Translated
|
||||
msgid "(Experimental) Use printer agents instead of print hosts"
|
||||
msgstr "(Experimentellt) Använd skrivaragenter i stället för utskriftsvärdar"
|
||||
|
||||
# AI Translated
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
"Skickar utskriftsjobb för icke-Bambu-skrivare via skrivarens insticksmodulagenter i stället för det klassiska uppladdningsflödet till utskriftsvärden.\n"
|
||||
"När detta är avaktiverat använder OrcaSlicer det äldre beteendet för utskriftsvärdar."
|
||||
|
||||
# AI Translated
|
||||
msgid "Experimental Features"
|
||||
msgstr "Experimentella funktioner"
|
||||
@@ -11332,17 +11325,6 @@ msgstr ""
|
||||
"Försök att behålla målade egenskaper (färg/söm/support/ojämn yta osv.) efter att objektets mesh ändrats (t.ex. snitt, läs in från disk igen, förenkla, reparera osv.)\n"
|
||||
"Mycket experimentellt! Långsamt och kan skapa artefakter."
|
||||
|
||||
msgid "Use printer agents instead of print hosts"
|
||||
msgstr ""
|
||||
|
||||
# AI Translated
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
"Skickar utskriftsjobb för icke-Bambu-skrivare via skrivarens insticksmodulagenter i stället för det klassiska uppladdningsflödet till utskriftsvärden.\n"
|
||||
"När detta är avaktiverat använder OrcaSlicer det äldre beteendet för utskriftsvärdar."
|
||||
|
||||
# AI Translated
|
||||
msgid "Allow Abnormal Storage"
|
||||
msgstr "Tillåt onormalt lagringsmedium"
|
||||
@@ -12193,12 +12175,6 @@ msgstr "Avbryt timelapse och skriv ut"
|
||||
msgid "Clean Up"
|
||||
msgstr "Rensa"
|
||||
|
||||
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "Preparing print job"
|
||||
msgstr "Förbereder utskriftsjobb"
|
||||
|
||||
@@ -18058,12 +18034,6 @@ msgstr "Symmetrisk ifyllnad kring Y-axeln"
|
||||
msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts."
|
||||
msgstr "Om modellen har två delar som är symmetriska kring Y-axeln och du vill att dessa delar ska ha symmetriska texturer, klickar du i det här alternativet på en av delarna."
|
||||
|
||||
msgid "Fill pattern tops"
|
||||
msgstr ""
|
||||
|
||||
msgid "Choose this option if you want to completely fill in the tops of the infill pattern"
|
||||
msgstr ""
|
||||
|
||||
# AI Translated
|
||||
msgid "Infill combination - Max layer height"
|
||||
msgstr "Ifyllnadskombination – max lagerhöjd"
|
||||
@@ -32678,9 +32648,6 @@ msgstr "Aktivera utvecklarverktyg"
|
||||
msgid "An error occurred loading %s"
|
||||
msgstr "Ett fel uppstod vid inläsning av %s"
|
||||
|
||||
msgid "/"
|
||||
msgstr "/"
|
||||
|
||||
# AI Translated
|
||||
#, boost-format
|
||||
msgid "Load %1% to %2%"
|
||||
@@ -34467,6 +34434,9 @@ msgstr ""
|
||||
#~ msgid "An error occurred loading "
|
||||
#~ msgstr "Ett fel uppstod vid inläsning av "
|
||||
|
||||
#~ msgid "/"
|
||||
#~ msgstr "/"
|
||||
|
||||
# AI Translated
|
||||
#, c-format, boost-format
|
||||
#~ msgid "Load %s to "
|
||||
@@ -34676,10 +34646,6 @@ msgstr ""
|
||||
#~ msgid "Support/Color Painting: adjust section position"
|
||||
#~ msgstr "Support/Färgläggning:justera sektions positionen"
|
||||
|
||||
# AI Translated
|
||||
#~ msgid "(Experimental) Use printer agents instead of print hosts"
|
||||
#~ msgstr "(Experimentellt) Använd skrivaragenter i stället för utskriftsvärdar"
|
||||
|
||||
# AI Translated
|
||||
#~ msgid "Tab"
|
||||
#~ msgstr "Tabb"
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Orca Slicer\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-10-06 13:42+0800\n"
|
||||
"POT-Creation-Date: 2026-10-05 10:49-0300\n"
|
||||
"PO-Revision-Date: 2026-06-19 13:40+0700\n"
|
||||
"Last-Translator: Icezaza\n"
|
||||
"Language-Team: Thai\n"
|
||||
@@ -4332,9 +4332,6 @@ msgstr "คุณแน่ใจหรือไม่ว่าต้องกา
|
||||
msgid "You need to select the material type and color first."
|
||||
msgstr "คุณต้องเลือกประเภทวัสดุและสีก่อน"
|
||||
|
||||
msgid "The minimum temperature cannot be greater than the maximum temperature."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Please input a valid value (K in %.1f~%.1f)"
|
||||
msgstr "โปรดป้อนค่าที่ถูกต้อง (K อยู่ในช่วง %.1f~%.1f)"
|
||||
@@ -6195,7 +6192,7 @@ msgid "Size:"
|
||||
msgstr "ขนาด:"
|
||||
|
||||
# AI Translated
|
||||
#, boost-format
|
||||
#, c-format, boost-format
|
||||
msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)."
|
||||
msgstr "พบความขัดแย้งของเส้นทาง G-code ที่เลเยอร์ %d, Z = %.2lfmm โปรดแยกวัตถุที่ขัดแย้งกันให้ไกลออกไป (%s <-> %s)"
|
||||
|
||||
@@ -7064,22 +7061,6 @@ msgstr "ไฟล์ .gcode.3mf ไม่มีข้อมูล G-code โป
|
||||
msgid "File '%s' was lost! Please download it again."
|
||||
msgstr "ไฟล์ '%s' สูญหาย! กรุณาดาวน์โหลดอีกครั้ง."
|
||||
|
||||
msgid "gcodes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to delete the file from printer."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Do you want to print the file '%s' from printer?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Print file"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to start the print job."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"File: %s\n"
|
||||
@@ -10245,6 +10226,18 @@ msgstr "แสดงค่าที่ตั้งไว้ล่วงหน้
|
||||
msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected."
|
||||
msgstr "แสดงค่าที่ตั้งไว้ล่วงหน้าที่ไม่เข้ากันหรือไม่รองรับในรายการเลือกเครื่องพิมพ์และเส้นพลาสติก ไม่สามารถเลือกค่าที่ตั้งไว้ล่วงหน้าเหล่านี้ได้"
|
||||
|
||||
# AI Translated
|
||||
msgid "(Experimental) Use printer agents instead of print hosts"
|
||||
msgstr "(ทดลอง) ใช้เอเจนต์เครื่องพิมพ์แทนโฮสต์การพิมพ์"
|
||||
|
||||
# AI Translated
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
"ส่งงานพิมพ์ของเครื่องพิมพ์ที่ไม่ใช่ Bambu ผ่านเอเจนต์ปลั๊กอินของเครื่องพิมพ์ แทนการอัพโหลดไปยังโฮสต์การพิมพ์แบบเดิม\n"
|
||||
"เมื่อปิดใช้ OrcaSlicer จะใช้พฤติกรรมโฮสต์การพิมพ์แบบเดิม"
|
||||
|
||||
# AI Translated
|
||||
msgid "Experimental Features"
|
||||
msgstr "ฟีเจอร์ทดลอง"
|
||||
@@ -10260,17 +10253,6 @@ msgstr ""
|
||||
"พยายามคงคุณสมบัติการทาสีไว้ (สี/รอยตะเข็บ/ส่วนรองรับ/ผิวฟัซซี ฯลฯ) หลังจากเปลี่ยนตาข่ายวัตถุ (เช่น ตัด/โหลดซ้ำจากดิสก์/ลดความซับซ้อน/แก้ไข ฯลฯ)\n"
|
||||
"น่าทดลองมาก! ช้าและอาจสร้างสิ่งประดิษฐ์"
|
||||
|
||||
msgid "Use printer agents instead of print hosts"
|
||||
msgstr ""
|
||||
|
||||
# AI Translated
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
"ส่งงานพิมพ์ของเครื่องพิมพ์ที่ไม่ใช่ Bambu ผ่านเอเจนต์ปลั๊กอินของเครื่องพิมพ์ แทนการอัพโหลดไปยังโฮสต์การพิมพ์แบบเดิม\n"
|
||||
"เมื่อปิดใช้ OrcaSlicer จะใช้พฤติกรรมโฮสต์การพิมพ์แบบเดิม"
|
||||
|
||||
msgid "Allow Abnormal Storage"
|
||||
msgstr "อนุญาตให้จัดเก็บผิดปกติ"
|
||||
|
||||
@@ -11081,12 +11063,6 @@ msgstr "ยกเลิกไทม์แลปส์และพิมพ์"
|
||||
msgid "Clean Up"
|
||||
msgstr "ล้าง"
|
||||
|
||||
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "Preparing print job"
|
||||
msgstr "กำลังเตรียมงานพิมพ์"
|
||||
|
||||
@@ -16271,12 +16247,6 @@ msgstr "แกน Y ไส้ในแบบสมมาตร"
|
||||
msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts."
|
||||
msgstr "หากแบบจำลองมีสองส่วนที่สมมาตรเกี่ยวกับแกน Y และคุณต้องการให้ส่วนเหล่านี้มีพื้นผิวที่สมมาตร โปรดคลิกตัวเลือกนี้บนส่วนใดส่วนหนึ่ง"
|
||||
|
||||
msgid "Fill pattern tops"
|
||||
msgstr ""
|
||||
|
||||
msgid "Choose this option if you want to completely fill in the tops of the infill pattern"
|
||||
msgstr ""
|
||||
|
||||
msgid "Infill combination - Max layer height"
|
||||
msgstr "ชุดค่าผสม ไส้ใน - ความสูงของชั้นสูงสุด"
|
||||
|
||||
@@ -30026,10 +29996,6 @@ msgstr "เปิดใช้งานเครื่องมือนักพ
|
||||
msgid "An error occurred loading %s"
|
||||
msgstr "เกิดข้อผิดพลาดในการโหลด %s"
|
||||
|
||||
# AI Translated
|
||||
msgid "/"
|
||||
msgstr "/"
|
||||
|
||||
# AI Translated
|
||||
#, boost-format
|
||||
msgid "Load %1% to %2%"
|
||||
@@ -30709,10 +30675,6 @@ msgstr ""
|
||||
"หลีกเลี่ยงการบิดเบี้ยว\n"
|
||||
"คุณรู้หรือไม่ว่าเมื่อพิมพ์วัสดุที่มีแนวโน้มที่จะเกิดการบิดเบี้ยว เช่น ABS การเพิ่มอุณหภูมิฐานพิมพ์อย่างเหมาะสมสามารถลดความน่าจะเป็นของการบิดเบี้ยวได้"
|
||||
|
||||
# AI Translated
|
||||
#~ msgid "(Experimental) Use printer agents instead of print hosts"
|
||||
#~ msgstr "(ทดลอง) ใช้เอเจนต์เครื่องพิมพ์แทนโฮสต์การพิมพ์"
|
||||
|
||||
#~ msgid "X"
|
||||
#~ msgstr "X"
|
||||
|
||||
@@ -31737,6 +31699,10 @@ msgstr ""
|
||||
#~ msgid "An error occurred loading "
|
||||
#~ msgstr "เกิดข้อผิดพลาดในการโหลด "
|
||||
|
||||
# AI Translated
|
||||
#~ msgid "/"
|
||||
#~ msgstr "/"
|
||||
|
||||
# AI Translated
|
||||
#, c-format, boost-format
|
||||
#~ msgid "Load %s to "
|
||||
|
||||
@@ -3,7 +3,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Orca Slicer\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-10-06 13:42+0800\n"
|
||||
"POT-Creation-Date: 2026-10-05 10:49-0300\n"
|
||||
"PO-Revision-Date: 2026-08-21 23:18+0300\n"
|
||||
"Last-Translator: GlauTech\n"
|
||||
"Language-Team: \n"
|
||||
@@ -4384,9 +4384,6 @@ msgstr "Filament bilgisini temizlemek istediğinizden emin misiniz?"
|
||||
msgid "You need to select the material type and color first."
|
||||
msgstr "Önce malzeme türünü ve rengini seçmeniz gerekir."
|
||||
|
||||
msgid "The minimum temperature cannot be greater than the maximum temperature."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Please input a valid value (K in %.1f~%.1f)"
|
||||
msgstr "Lütfen geçerli bir değer girin (K %.1f~%.1f içinde)"
|
||||
@@ -6261,7 +6258,7 @@ msgstr "Hacim:"
|
||||
msgid "Size:"
|
||||
msgstr "Boyut:"
|
||||
|
||||
#, boost-format
|
||||
#, c-format, boost-format
|
||||
msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)."
|
||||
msgstr "%d katmanında G-code yollarında çakışmalar bulundu, Z = %.2lfmm. Lütfen çakışan nesneleri daha uzağa ayırın (%s <-> %s)."
|
||||
|
||||
@@ -7137,22 +7134,6 @@ msgstr ".gcode.3mf dosyası hiçbir G-code verisi içermiyor. Lütfen dosyayı B
|
||||
msgid "File '%s' was lost! Please download it again."
|
||||
msgstr "'%s' dosyası kayboldu! Lütfen tekrar indirin."
|
||||
|
||||
msgid "gcodes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to delete the file from printer."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Do you want to print the file '%s' from printer?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Print file"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to start the print job."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"File: %s\n"
|
||||
@@ -10377,6 +10358,18 @@ msgstr "Desteklenmeyen ön ayarları göster"
|
||||
msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected."
|
||||
msgstr "Yazıcı ve filament açılır listelerinde uyumsuz/desteklenmeyen ön ayarları gösterir. Bu ön ayarlar seçilemez."
|
||||
|
||||
# AI Translated
|
||||
msgid "(Experimental) Use printer agents instead of print hosts"
|
||||
msgstr "(Deneysel) Baskı sunucuları yerine yazıcı aracılarını kullan"
|
||||
|
||||
# AI Translated
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
"Bambu olmayan yazıcıların baskı işlerini, klasik baskı sunucusuna yükleme akışı yerine yazıcı eklenti aracıları üzerinden yönlendirir.\n"
|
||||
"Devre dışı bırakıldığında OrcaSlicer eski baskı sunucusu davranışını kullanır."
|
||||
|
||||
# AI Translated
|
||||
msgid "Experimental Features"
|
||||
msgstr "Deneysel Özellikler"
|
||||
@@ -10393,17 +10386,6 @@ msgstr ""
|
||||
"Nesne mesh'i değiştikten sonra (kesme/diskten yeniden yükleme/basitleştirme/onarma vb.) boyanmış özellikleri (renk/dikiş/destek/pütür vb.) korumaya çalışır.\n"
|
||||
"Oldukça deneyseldir! Yavaştır ve bozulmalara yol açabilir."
|
||||
|
||||
msgid "Use printer agents instead of print hosts"
|
||||
msgstr ""
|
||||
|
||||
# AI Translated
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
"Bambu olmayan yazıcıların baskı işlerini, klasik baskı sunucusuna yükleme akışı yerine yazıcı eklenti aracıları üzerinden yönlendirir.\n"
|
||||
"Devre dışı bırakıldığında OrcaSlicer eski baskı sunucusu davranışını kullanır."
|
||||
|
||||
msgid "Allow Abnormal Storage"
|
||||
msgstr "Anormal Depolamaya İzin Ver"
|
||||
|
||||
@@ -11217,12 +11199,6 @@ msgstr "Timelapse'i İptal Et ve Yazdır"
|
||||
msgid "Clean Up"
|
||||
msgstr "Temizle"
|
||||
|
||||
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "Preparing print job"
|
||||
msgstr "Yazdırma için hazırlanıyor"
|
||||
|
||||
@@ -16527,12 +16503,6 @@ msgstr "Simetrik dolgu Y ekseni"
|
||||
msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts."
|
||||
msgstr "Modelin Y ekseni etrafında simetrik iki parçası varsa ve bu parçaların simetrik dokulara sahip olmasını istiyorsanız, lütfen parçalardan birinde bu seçeneğe tıklayın."
|
||||
|
||||
msgid "Fill pattern tops"
|
||||
msgstr ""
|
||||
|
||||
msgid "Choose this option if you want to completely fill in the tops of the infill pattern"
|
||||
msgstr ""
|
||||
|
||||
msgid "Infill combination - Max layer height"
|
||||
msgstr "Dolgu kombinasyonu - Maksimum katman yüksekliği"
|
||||
|
||||
@@ -30475,10 +30445,6 @@ msgstr "Geliştirici Araçlarını Etkinleştir"
|
||||
msgid "An error occurred loading %s"
|
||||
msgstr "%s yüklenirken bir hata oluştu"
|
||||
|
||||
# AI Translated
|
||||
msgid "/"
|
||||
msgstr "/"
|
||||
|
||||
# AI Translated
|
||||
#, boost-format
|
||||
msgid "Load %1% to %2%"
|
||||
@@ -32182,6 +32148,10 @@ msgstr ""
|
||||
#~ msgid "An error occurred loading "
|
||||
#~ msgstr "Yüklenirken bir hata oluştu: "
|
||||
|
||||
# AI Translated
|
||||
#~ msgid "/"
|
||||
#~ msgstr "/"
|
||||
|
||||
# AI Translated
|
||||
#, c-format, boost-format
|
||||
#~ msgid "Load %s to "
|
||||
@@ -32387,10 +32357,6 @@ msgstr ""
|
||||
#~ msgid "Support/Color Painting: adjust section position"
|
||||
#~ msgstr "Destek/Renkli Boyama: bölüm konumunu ayarlayın"
|
||||
|
||||
# AI Translated
|
||||
#~ msgid "(Experimental) Use printer agents instead of print hosts"
|
||||
#~ msgstr "(Deneysel) Baskı sunucuları yerine yazıcı aracılarını kullan"
|
||||
|
||||
# AI Translated
|
||||
#~ msgid "Tab"
|
||||
#~ msgstr "Sekme"
|
||||
|
||||
@@ -3,7 +3,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: orcaslicerua\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-10-06 13:42+0800\n"
|
||||
"POT-Creation-Date: 2026-10-05 10:49-0300\n"
|
||||
"PO-Revision-Date: 2026-07-17 16:25+0300\n"
|
||||
"Last-Translator: Andrij Mizyk <andm1zyk@proton.me>\n"
|
||||
"Language-Team: Ukrainian\n"
|
||||
@@ -4298,9 +4298,6 @@ msgstr "Ви впевнені, що хочете видалити інформа
|
||||
msgid "You need to select the material type and color first."
|
||||
msgstr "Спочатку потрібно вибрати тип матеріалу та колір."
|
||||
|
||||
msgid "The minimum temperature cannot be greater than the maximum temperature."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Please input a valid value (K in %.1f~%.1f)"
|
||||
msgstr "Будь ласка введіть коректне значення (K в %.1f~%.1f)"
|
||||
@@ -6215,7 +6212,7 @@ msgid "Size:"
|
||||
msgstr "Розмір:"
|
||||
|
||||
# AI Translated
|
||||
#, boost-format
|
||||
#, c-format, boost-format
|
||||
msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)."
|
||||
msgstr "Виявлено конфлікти шляхів G-code на шарі %d, Z = %.2lf мм. Будь ласка, рознесіть конфліктуючі обʼєкти далі один від одного (%s <-> %s)."
|
||||
|
||||
@@ -7106,22 +7103,6 @@ msgstr "Файл .gcode.3mf не містить даних G-code. Будь ла
|
||||
msgid "File '%s' was lost! Please download it again."
|
||||
msgstr "Файл '%s' втрачений! Завантажте його знову."
|
||||
|
||||
msgid "gcodes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to delete the file from printer."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Do you want to print the file '%s' from printer?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Print file"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to start the print job."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"File: %s\n"
|
||||
@@ -10384,6 +10365,18 @@ msgstr "Показати непідтримувані пресети"
|
||||
msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected."
|
||||
msgstr "Показати несумісні/непідтримувані пресети у випадаючому списку принтера і філаменту. Ці пресети не можна вибрати."
|
||||
|
||||
# AI Translated
|
||||
msgid "(Experimental) Use printer agents instead of print hosts"
|
||||
msgstr "(Експериментально) Використовувати агентів принтера замість хостів друку"
|
||||
|
||||
# AI Translated
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
"Спрямовує завдання друку для принтерів, відмінних від Bambu, через агентів плагінів принтера замість класичного завантаження на хост друку.\n"
|
||||
"Коли вимкнено, OrcaSlicer використовує попередню поведінку хоста друку."
|
||||
|
||||
msgid "Experimental Features"
|
||||
msgstr "Експериментальні функції"
|
||||
|
||||
@@ -10398,17 +10391,6 @@ msgstr ""
|
||||
"Намагатися зберегти намальовані елементи (колір/шов/підтримки/шорсткість тощо) після зміни сітки обʼєкта (наприклад, розрізання/перезавантаження з диска/спрощення/виправлення тощо)\n"
|
||||
"Дуже експериментально! Повільно і може створювати артефакти."
|
||||
|
||||
msgid "Use printer agents instead of print hosts"
|
||||
msgstr ""
|
||||
|
||||
# AI Translated
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
"Спрямовує завдання друку для принтерів, відмінних від Bambu, через агентів плагінів принтера замість класичного завантаження на хост друку.\n"
|
||||
"Коли вимкнено, OrcaSlicer використовує попередню поведінку хоста друку."
|
||||
|
||||
msgid "Allow Abnormal Storage"
|
||||
msgstr "Дозволити незвичне сховище"
|
||||
|
||||
@@ -11234,12 +11216,6 @@ msgstr "Скасувати таймлапс і друкувати"
|
||||
msgid "Clean Up"
|
||||
msgstr "Очистити"
|
||||
|
||||
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "Preparing print job"
|
||||
msgstr "Підготовка завдання для друку"
|
||||
|
||||
@@ -16680,12 +16656,6 @@ msgstr "Симетричне заповнення по осі Y"
|
||||
msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts."
|
||||
msgstr "Якщо модель має дві частини, симетричні відносно осі Y, і ви хочете, щоб ці частини мали симетричні текстури, увімкніть цю опцію на одній із частин."
|
||||
|
||||
msgid "Fill pattern tops"
|
||||
msgstr ""
|
||||
|
||||
msgid "Choose this option if you want to completely fill in the tops of the infill pattern"
|
||||
msgstr ""
|
||||
|
||||
msgid "Infill combination - Max layer height"
|
||||
msgstr "Комбінація заповнення - Максимальна висота шару"
|
||||
|
||||
@@ -30642,9 +30612,6 @@ msgstr "Увімкнути інструменти розробника"
|
||||
msgid "An error occurred loading %s"
|
||||
msgstr "Помилка під час завантаження %s"
|
||||
|
||||
msgid "/"
|
||||
msgstr "/"
|
||||
|
||||
# AI Translated
|
||||
#, boost-format
|
||||
msgid "Load %1% to %2%"
|
||||
@@ -31329,10 +31296,6 @@ msgstr ""
|
||||
"Уникнення деформації\n"
|
||||
"Чи знаєте ви, що при друку матеріалами, схильними до деформації, такими як ABS, відповідне підвищення температури столу може зменшити ймовірність деформації?"
|
||||
|
||||
# AI Translated
|
||||
#~ msgid "(Experimental) Use printer agents instead of print hosts"
|
||||
#~ msgstr "(Експериментально) Використовувати агентів принтера замість хостів друку"
|
||||
|
||||
#~ msgid "X"
|
||||
#~ msgstr "X"
|
||||
|
||||
@@ -32379,6 +32342,9 @@ msgstr ""
|
||||
#~ msgid "An error occurred loading "
|
||||
#~ msgstr "Помилка під час завантаження "
|
||||
|
||||
#~ msgid "/"
|
||||
#~ msgstr "/"
|
||||
|
||||
# AI Translated
|
||||
#, c-format, boost-format
|
||||
#~ msgid "Load %s to "
|
||||
|
||||
@@ -3,7 +3,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Orca Slicer\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-10-06 13:42+0800\n"
|
||||
"POT-Creation-Date: 2026-10-05 10:49-0300\n"
|
||||
"PO-Revision-Date: 2025-10-02 17:43+0700\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: hainguyen.ts13@gmail.com\n"
|
||||
@@ -4558,9 +4558,6 @@ msgstr "Bạn có chắc muốn xóa thông tin filament?"
|
||||
msgid "You need to select the material type and color first."
|
||||
msgstr "Bạn cần chọn loại vật liệu và màu trước."
|
||||
|
||||
msgid "The minimum temperature cannot be greater than the maximum temperature."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Please input a valid value (K in %.1f~%.1f)"
|
||||
msgstr "Vui lòng nhập giá trị hợp lệ (K trong %.1f~%.1f)"
|
||||
@@ -6568,7 +6565,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)."
|
||||
|
||||
@@ -7472,22 +7469,6 @@ msgstr "File .gcode.3mf không chứa dữ liệu G-code. Vui lòng slice với
|
||||
msgid "File '%s' was lost! Please download it again."
|
||||
msgstr "File '%s' đã bị mất! Vui lòng tải lại."
|
||||
|
||||
msgid "gcodes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to delete the file from printer."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Do you want to print the file '%s' from printer?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Print file"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to start the print job."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"File: %s\n"
|
||||
@@ -10895,6 +10876,18 @@ msgstr "Hiện cài đặt sẵn không được hỗ trợ"
|
||||
msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected."
|
||||
msgstr "Hiện các cài đặt sẵn không tương thích/không được hỗ trợ trong danh sách thả xuống máy in và filament. Không thể chọn các cài đặt sẵn này."
|
||||
|
||||
# AI Translated
|
||||
msgid "(Experimental) Use printer agents instead of print hosts"
|
||||
msgstr "(Thử nghiệm) Dùng tác nhân máy in thay cho máy chủ in"
|
||||
|
||||
# AI Translated
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
"Định tuyến các tác vụ in của máy in không phải Bambu qua các tác nhân plugin máy in thay vì luồng tải lên máy chủ in cổ điển.\n"
|
||||
"Khi tắt, OrcaSlicer sẽ dùng hành vi máy chủ in cũ."
|
||||
|
||||
# AI Translated
|
||||
msgid "Experimental Features"
|
||||
msgstr "Tính năng thử nghiệm"
|
||||
@@ -10911,17 +10904,6 @@ msgstr ""
|
||||
"Cố gắng giữ lại các phần đã tô (màu/đường nối/support/fuzzy v.v.) sau khi thay đổi lưới của vật thể (như cắt/tải lại từ đĩa/đơn giản hóa/sửa v.v.)\n"
|
||||
"Rất thử nghiệm! Chậm và có thể tạo ra khuyết điểm."
|
||||
|
||||
msgid "Use printer agents instead of print hosts"
|
||||
msgstr ""
|
||||
|
||||
# AI Translated
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
"Định tuyến các tác vụ in của máy in không phải Bambu qua các tác nhân plugin máy in thay vì luồng tải lên máy chủ in cổ điển.\n"
|
||||
"Khi tắt, OrcaSlicer sẽ dùng hành vi máy chủ in cũ."
|
||||
|
||||
# AI Translated
|
||||
msgid "Allow Abnormal Storage"
|
||||
msgstr "Cho phép Bộ nhớ bất thường"
|
||||
@@ -11760,12 +11742,6 @@ msgstr "Hủy timelapse & In"
|
||||
msgid "Clean Up"
|
||||
msgstr "Dọn dẹp"
|
||||
|
||||
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "Preparing print job"
|
||||
msgstr "Đang chuẩn bị công việc in"
|
||||
|
||||
@@ -17226,12 +17202,6 @@ msgstr "Infill đối xứng trục Y"
|
||||
msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts."
|
||||
msgstr "Nếu model có hai phần đối xứng về trục Y, và bạn muốn các phần này có kết cấu đối xứng, vui lòng nhấp tùy chọn này trên một trong các phần."
|
||||
|
||||
msgid "Fill pattern tops"
|
||||
msgstr ""
|
||||
|
||||
msgid "Choose this option if you want to completely fill in the tops of the infill pattern"
|
||||
msgstr ""
|
||||
|
||||
msgid "Infill combination - Max layer height"
|
||||
msgstr "Kết hợp infill - Chiều cao lớp tối đa"
|
||||
|
||||
@@ -31315,10 +31285,6 @@ msgstr "Bật công cụ nhà phát triển"
|
||||
msgid "An error occurred loading %s"
|
||||
msgstr "Đã xảy ra lỗi khi tải %s"
|
||||
|
||||
# AI Translated
|
||||
msgid "/"
|
||||
msgstr "/"
|
||||
|
||||
# AI Translated
|
||||
#, boost-format
|
||||
msgid "Load %1% to %2%"
|
||||
@@ -33056,6 +33022,10 @@ msgstr ""
|
||||
#~ msgid "An error occurred loading "
|
||||
#~ msgstr "Đã xảy ra lỗi khi tải "
|
||||
|
||||
# AI Translated
|
||||
#~ msgid "/"
|
||||
#~ msgstr "/"
|
||||
|
||||
# AI Translated
|
||||
#, c-format, boost-format
|
||||
#~ msgid "Load %s to "
|
||||
@@ -33262,10 +33232,6 @@ msgstr ""
|
||||
#~ msgid "Support/Color Painting: adjust section position"
|
||||
#~ msgstr "Tô support/màu: điều chỉnh vị trí phần"
|
||||
|
||||
# AI Translated
|
||||
#~ msgid "(Experimental) Use printer agents instead of print hosts"
|
||||
#~ msgstr "(Thử nghiệm) Dùng tác nhân máy in thay cho máy chủ in"
|
||||
|
||||
# AI Translated
|
||||
#~ msgid "Tab"
|
||||
#~ msgstr "Tab"
|
||||
|
||||
@@ -6,7 +6,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Slic3rPE\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-10-06 13:42+0800\n"
|
||||
"POT-Creation-Date: 2026-10-05 10:49-0300\n"
|
||||
"PO-Revision-Date: 2026-06-11 12:37-0300\n"
|
||||
"Last-Translator: Handle <mail@bysb.net>\n"
|
||||
"Language-Team: \n"
|
||||
@@ -4185,9 +4185,6 @@ msgstr "您确定要清除耗材丝信息吗?"
|
||||
msgid "You need to select the material type and color first."
|
||||
msgstr "您需要先选择材料类型和颜色。"
|
||||
|
||||
msgid "The minimum temperature cannot be greater than the maximum temperature."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Please input a valid value (K in %.1f~%.1f)"
|
||||
msgstr "请输入有效的数值(K的范围为%.1f~%.1f)"
|
||||
@@ -6045,7 +6042,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)。"
|
||||
|
||||
@@ -6909,22 +6906,6 @@ msgstr ".gcode.3mf文件中不包含G-code数据。请使用Orca Slicer进行切
|
||||
msgid "File '%s' was lost! Please download it again."
|
||||
msgstr "文件%s丢失,请重新下载。"
|
||||
|
||||
msgid "gcodes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to delete the file from printer."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Do you want to print the file '%s' from printer?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Print file"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to start the print job."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"File: %s\n"
|
||||
@@ -10056,6 +10037,18 @@ msgstr "显示不受支持的预设"
|
||||
msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected."
|
||||
msgstr "在打印机和耗材下拉列表中显示不兼容/不受支持的预设。这些预设无法被选择。"
|
||||
|
||||
# AI Translated
|
||||
msgid "(Experimental) Use printer agents instead of print hosts"
|
||||
msgstr "(实验性)使用打印机代理替代打印主机"
|
||||
|
||||
# AI Translated
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
"非 Bambu 打印机的打印任务将通过打印机插件代理发送,而不是经典的打印主机上传流程。\n"
|
||||
"禁用时,OrcaSlicer 使用旧的打印主机行为。"
|
||||
|
||||
# AI Translated
|
||||
msgid "Experimental Features"
|
||||
msgstr "实验性功能"
|
||||
@@ -10071,17 +10064,6 @@ msgstr ""
|
||||
"在更改对象网格(如切割/从磁盘重新加载/简化/修复等)后,尝试保留绘制的特征(颜色/接缝/支撑/绒毛等)。\n"
|
||||
"高度实验性!速度较慢且可能产生瑕疵。"
|
||||
|
||||
msgid "Use printer agents instead of print hosts"
|
||||
msgstr ""
|
||||
|
||||
# AI Translated
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
"非 Bambu 打印机的打印任务将通过打印机插件代理发送,而不是经典的打印主机上传流程。\n"
|
||||
"禁用时,OrcaSlicer 使用旧的打印主机行为。"
|
||||
|
||||
msgid "Allow Abnormal Storage"
|
||||
msgstr "允许异常存储"
|
||||
|
||||
@@ -10869,12 +10851,6 @@ msgstr "取消延时摄影,继续打印"
|
||||
msgid "Clean Up"
|
||||
msgstr "清理"
|
||||
|
||||
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "Preparing print job"
|
||||
msgstr "正在准备打印任务"
|
||||
|
||||
@@ -16009,12 +15985,6 @@ msgstr "对称填充Y轴"
|
||||
msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts."
|
||||
msgstr "若模型有两个在Y轴上对称的部分,并且您想对其使用对称的纹理,就请在对应的模型部分上应用此设置。"
|
||||
|
||||
msgid "Fill pattern tops"
|
||||
msgstr ""
|
||||
|
||||
msgid "Choose this option if you want to completely fill in the tops of the infill pattern"
|
||||
msgstr ""
|
||||
|
||||
msgid "Infill combination - Max layer height"
|
||||
msgstr "填充组合 - 最大层高"
|
||||
|
||||
@@ -29754,10 +29724,6 @@ msgstr "启用开发者工具"
|
||||
msgid "An error occurred loading %s"
|
||||
msgstr "加载 %s 时出错"
|
||||
|
||||
# AI Translated
|
||||
msgid "/"
|
||||
msgstr "/"
|
||||
|
||||
# AI Translated
|
||||
#, boost-format
|
||||
msgid "Load %1% to %2%"
|
||||
@@ -30437,10 +30403,6 @@ msgstr ""
|
||||
"避免翘曲\n"
|
||||
"您知道吗?打印ABS这类易翘曲材料时,适当提高热床温度可以降低翘曲的概率。"
|
||||
|
||||
# AI Translated
|
||||
#~ msgid "(Experimental) Use printer agents instead of print hosts"
|
||||
#~ msgstr "(实验性)使用打印机代理替代打印主机"
|
||||
|
||||
#~ msgid "X"
|
||||
#~ msgstr "X"
|
||||
|
||||
@@ -31460,6 +31422,10 @@ msgstr ""
|
||||
#~ msgid "An error occurred loading "
|
||||
#~ msgstr "加载时出错: "
|
||||
|
||||
# AI Translated
|
||||
#~ msgid "/"
|
||||
#~ msgstr "/"
|
||||
|
||||
# AI Translated
|
||||
#, c-format, boost-format
|
||||
#~ msgid "Load %s to "
|
||||
|
||||
@@ -9,7 +9,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Orca Slicer\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-10-06 13:42+0800\n"
|
||||
"POT-Creation-Date: 2026-10-05 10:49-0300\n"
|
||||
"PO-Revision-Date: 2025-11-28 13:48-0600\n"
|
||||
"Last-Translator: tntchn <15895303+tntchn@users.noreply.github.com>\n"
|
||||
"Language-Team: \n"
|
||||
@@ -4290,9 +4290,6 @@ msgstr "您確認要清除線材資訊嗎?"
|
||||
msgid "You need to select the material type and color first."
|
||||
msgstr "您需要先選擇線材類型和顏色。"
|
||||
|
||||
msgid "The minimum temperature cannot be greater than the maximum temperature."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Please input a valid value (K in %.1f~%.1f)"
|
||||
msgstr "請輸入有效的數值 (K於 %.1f~%.1f 之間)"
|
||||
@@ -6175,7 +6172,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)。"
|
||||
|
||||
@@ -7044,22 +7041,6 @@ msgstr ".gcode.3mf 檔案不包含 G-code 資料。請使用 OrcaSlicer 切片
|
||||
msgid "File '%s' was lost! Please download it again."
|
||||
msgstr "檔案 %s 遺失,請重新下載。"
|
||||
|
||||
msgid "gcodes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to delete the file from printer."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Do you want to print the file '%s' from printer?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Print file"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to start the print job."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"File: %s\n"
|
||||
@@ -10231,6 +10212,18 @@ msgstr "顯示不支援的預設"
|
||||
msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected."
|
||||
msgstr "在列印裝置和線材下拉選單中顯示不相容/不支援的預設。這些預設無法選取。"
|
||||
|
||||
# AI Translated
|
||||
msgid "(Experimental) Use printer agents instead of print hosts"
|
||||
msgstr "(實驗性)使用列印裝置代理程式取代列印主機"
|
||||
|
||||
# AI Translated
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
"將非 Bambu 列印裝置的列印工作透過列印裝置外掛代理程式傳送,而非傳統的列印主機上傳流程。\n"
|
||||
"停用時,OrcaSlicer 會使用舊有的列印主機行為。"
|
||||
|
||||
# AI Translated
|
||||
msgid "Experimental Features"
|
||||
msgstr "實驗性功能"
|
||||
@@ -10246,17 +10239,6 @@ msgstr ""
|
||||
"嘗試在變更物件網格(例如切割/從磁碟重新載入/簡化/修復等)後,保留已繪製的特徵(顏色/Z 縫/支撐/絨毛等)。\n"
|
||||
"高度實驗性!速度緩慢且可能產生瑕疵。"
|
||||
|
||||
msgid "Use printer agents instead of print hosts"
|
||||
msgstr ""
|
||||
|
||||
# AI Translated
|
||||
msgid ""
|
||||
"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n"
|
||||
"When disabled, OrcaSlicer uses the legacy print-host behavior."
|
||||
msgstr ""
|
||||
"將非 Bambu 列印裝置的列印工作透過列印裝置外掛代理程式傳送,而非傳統的列印主機上傳流程。\n"
|
||||
"停用時,OrcaSlicer 會使用舊有的列印主機行為。"
|
||||
|
||||
msgid "Allow Abnormal Storage"
|
||||
msgstr "允許異常儲存空間"
|
||||
|
||||
@@ -11067,12 +11049,6 @@ msgstr "取消縮時攝影並列印"
|
||||
msgid "Clean Up"
|
||||
msgstr "清理"
|
||||
|
||||
msgid "AMS filament mapping is not available for this printer. Clear the AMS mapping before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "A filament used by this print has no AMS mapping. Assign it before printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "Preparing print job"
|
||||
msgstr "正在準備列印作業"
|
||||
|
||||
@@ -16215,12 +16191,6 @@ msgstr "對稱填充Y軸"
|
||||
msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts."
|
||||
msgstr "若模型有兩個在Y軸上對稱的部分,並且您想對其使用對稱的紋理,就請在對應的模型部分上應用此設定。"
|
||||
|
||||
msgid "Fill pattern tops"
|
||||
msgstr ""
|
||||
|
||||
msgid "Choose this option if you want to completely fill in the tops of the infill pattern"
|
||||
msgstr ""
|
||||
|
||||
msgid "Infill combination - Max layer height"
|
||||
msgstr "合併填充 - 最大層高"
|
||||
|
||||
@@ -29947,10 +29917,6 @@ msgstr "啟用開發者工具"
|
||||
msgid "An error occurred loading %s"
|
||||
msgstr "載入 %s 時發生錯誤"
|
||||
|
||||
# AI Translated
|
||||
msgid "/"
|
||||
msgstr "/"
|
||||
|
||||
# AI Translated
|
||||
#, boost-format
|
||||
msgid "Load %1% to %2%"
|
||||
@@ -30651,10 +30617,6 @@ msgstr ""
|
||||
"避免翹曲\n"
|
||||
"您知道嗎?當列印容易翹曲的材料(如 ABS)時,適當提高熱床溫度可以降低翹曲的機率。"
|
||||
|
||||
# AI Translated
|
||||
#~ msgid "(Experimental) Use printer agents instead of print hosts"
|
||||
#~ msgstr "(實驗性)使用列印裝置代理程式取代列印主機"
|
||||
|
||||
#~ msgid "X"
|
||||
#~ msgstr "X"
|
||||
|
||||
@@ -31675,6 +31637,10 @@ msgstr ""
|
||||
#~ msgid "An error occurred loading "
|
||||
#~ msgstr "載入時發生錯誤: "
|
||||
|
||||
# AI Translated
|
||||
#~ msgid "/"
|
||||
#~ msgstr "/"
|
||||
|
||||
# AI Translated
|
||||
#, c-format, boost-format
|
||||
#~ msgid "Load %s to "
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,79 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Belt temperature-tower asset generator (discrete-provini design).
|
||||
|
||||
A vertical temperature tower cannot be sliced on a belt printer, so lay a row of
|
||||
DISCRETE provini (one per temperature) along the belt (designed Y) with a fixed
|
||||
surface gap. Each provino is the chevron+arc unit (belt_temp_provino_unit.stl,
|
||||
keel-first); its temperature is ENGRAVED upright into the 50 mm face — a raised
|
||||
number would be an unsupported overhang on the belt. The C++ calib_temp belt branch
|
||||
(Plater.cpp) injects one M104 per zone 70 layers INTO provino i:
|
||||
print_z[i] = i * PITCH * cos(theta) + 70 * layer_height (theta = 45)
|
||||
inside the body, not in the empty inter-provino gap (which has no sliced layers for
|
||||
the event to attach to). PITCH below is the shared geometry contract with that code —
|
||||
keep them in sync.
|
||||
|
||||
Generates one STL per filament temp range used by Temp_Calibration_Dlg.
|
||||
"""
|
||||
import numpy as np, trimesh, os
|
||||
from matplotlib.textpath import TextPath
|
||||
from matplotlib.font_manager import FontProperties
|
||||
from shapely.geometry import Polygon as ShPoly
|
||||
from shapely.ops import unary_union
|
||||
|
||||
HERE = os.path.dirname(os.path.abspath(__file__))
|
||||
UNIT = os.path.join(HERE, 'belt_temp_provino_unit.stl') # single provino, keel-first
|
||||
SURF_GAP = 25.0 # surface-to-surface gap between provini (mm) — user spec
|
||||
TEXT_H = 9.0
|
||||
TEXT_DEPTH = 0.8 # engraving depth (numbers are CUT into the face, not raised:
|
||||
# a raised number is an unsupported Y-overhang on the belt)
|
||||
TEXT_OVERSHOOT = 0.6 # extra height poking out of the face for a clean boolean cut
|
||||
|
||||
# Temperature ranges (start, end) per filament family, 5 C step. File name encodes them.
|
||||
RANGES = [(230,190),(270,230),(250,230),(280,240),(240,210),(320,280)]
|
||||
|
||||
unit = trimesh.load(UNIT)
|
||||
dY = unit.bounds[1,1] - unit.bounds[0,1]
|
||||
PITCH = dY + SURF_GAP # designed-Y pitch == C++ contract constant
|
||||
print(f"unit dY={dY:.2f} PITCH={PITCH:.3f} (C++ contract: print_z[i]=i*{PITCH:.3f}*cos45)")
|
||||
|
||||
# 50 mm face normal (0,-1,1)/sqrt2 ; UPRIGHT basis u=+X det(+1) (verified non-mirrored)
|
||||
n = np.array([0,-1,1.])/np.sqrt(2)
|
||||
u = np.array([1,0,0.]); v = np.array([0,1,1.])/np.sqrt(2)
|
||||
R = np.column_stack([u,v,n])
|
||||
fn = unit.face_normals; fc = unit.triangles_center; fa = unit.area_faces
|
||||
sel = (fn@n) > 0.9
|
||||
face_c = (fc[sel]*fa[sel,None]).sum(0)/fa[sel].sum()
|
||||
|
||||
def text_mesh(s):
|
||||
tp = TextPath((0,0), s, size=TEXT_H, prop=FontProperties(family='DejaVu Sans'))
|
||||
rings = [ShPoly(p) for p in tp.to_polygons() if len(p)>=3]
|
||||
rings.sort(key=lambda r:r.area, reverse=True)
|
||||
used=[False]*len(rings); parts=[]
|
||||
for i,o in enumerate(rings):
|
||||
if used[i]: continue
|
||||
holes=[]
|
||||
for j in range(i+1,len(rings)):
|
||||
if not used[j] and o.contains(rings[j]): holes.append(rings[j].exterior.coords); used[j]=True
|
||||
parts.append(ShPoly(o.exterior.coords,holes)); used[i]=True
|
||||
poly = unary_union(parts)
|
||||
geoms = list(poly.geoms) if poly.geom_type=='MultiPolygon' else [poly]
|
||||
m = trimesh.util.concatenate([trimesh.creation.extrude_polygon(g,height=TEXT_DEPTH+TEXT_OVERSHOOT) for g in geoms])
|
||||
c = m.bounds.mean(axis=0); m.apply_translation([-c[0],-c[1],0]); return m
|
||||
|
||||
for t_start, t_end in RANGES:
|
||||
temps = list(range(t_start, t_end-1, -5))
|
||||
parts=[]
|
||||
for i,T in enumerate(temps):
|
||||
c = unit.copy(); c.apply_translation([0, i*PITCH, 0])
|
||||
t = text_mesh(str(T)); M=np.eye(4); M[:3,:3]=R; t.apply_transform(M)
|
||||
# place the text spanning from TEXT_DEPTH inside the face to TEXT_OVERSHOOT outside,
|
||||
# then CUT it out of the provino (engrave) — no raised material, no Y-overhang.
|
||||
t.apply_translation(face_c - n*TEXT_DEPTH + np.array([0,i*PITCH,0]))
|
||||
c = trimesh.boolean.difference([c, t], engine='manifold')
|
||||
parts.append(c)
|
||||
asset = trimesh.util.concatenate(parts)
|
||||
out = os.path.join(HERE, f"belt_temp_tower_{t_start}_{t_end}.stl")
|
||||
asset.export(out)
|
||||
dims = np.round(asset.bounds[1]-asset.bounds[0],1)
|
||||
wt = all(p.is_watertight for p in parts)
|
||||
print(f" {t_start}->{t_end}: {len(temps)} zones bbox={dims} watertight={wt} -> {os.path.basename(out)}")
|
||||
@@ -1,9 +1,13 @@
|
||||
{
|
||||
"name": "Custom Printer",
|
||||
"version": "02.04.00.07",
|
||||
"version": "02.04.00.08",
|
||||
"force_update": "0",
|
||||
"description": "My configurations",
|
||||
"machine_model_list": [
|
||||
{
|
||||
"name": "Generic Belt Printer",
|
||||
"sub_path": "machine/MyBeltPrinter.json"
|
||||
},
|
||||
{
|
||||
"name": "Generic Klipper Printer",
|
||||
"sub_path": "machine/MyKlipper.json"
|
||||
@@ -50,6 +54,10 @@
|
||||
"name": "0.08mm Extra Fine @MyKlipper",
|
||||
"sub_path": "process/0.08mm Extra Fine @MyKlipper.json"
|
||||
},
|
||||
{
|
||||
"name": "0.12mm Fine @MyBeltPrinter",
|
||||
"sub_path": "process/0.12mm Fine @MyBeltPrinter.json"
|
||||
},
|
||||
{
|
||||
"name": "0.12mm Fine @MyKlipper",
|
||||
"sub_path": "process/0.12mm Fine @MyKlipper.json"
|
||||
@@ -62,6 +70,10 @@
|
||||
"name": "0.16mm Optimal @MyKlipper",
|
||||
"sub_path": "process/0.16mm Optimal @MyKlipper.json"
|
||||
},
|
||||
{
|
||||
"name": "0.20mm Standard @MyBeltPrinter",
|
||||
"sub_path": "process/0.20mm Standard @MyBeltPrinter.json"
|
||||
},
|
||||
{
|
||||
"name": "0.20mm Standard @MyKlipper",
|
||||
"sub_path": "process/0.20mm Standard @MyKlipper.json"
|
||||
@@ -262,6 +274,10 @@
|
||||
"name": "MyKlipper 0.8 nozzle",
|
||||
"sub_path": "machine/MyKlipper 0.8 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "fdm_belt_common",
|
||||
"sub_path": "machine/fdm_belt_common.json"
|
||||
},
|
||||
{
|
||||
"name": "fdm_toolchanger_common",
|
||||
"sub_path": "machine/fdm_toolchanger_common.json"
|
||||
@@ -274,6 +290,22 @@
|
||||
"name": "MyRRF 0.4 nozzle",
|
||||
"sub_path": "machine/MyRRF 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "MyBeltPrinter 0.2 nozzle",
|
||||
"sub_path": "machine/MyBeltPrinter 0.2 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "MyBeltPrinter 0.4 nozzle",
|
||||
"sub_path": "machine/MyBeltPrinter 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "MyBeltPrinter 0.6 nozzle",
|
||||
"sub_path": "machine/MyBeltPrinter 0.6 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "MyBeltPrinter 0.8 nozzle",
|
||||
"sub_path": "machine/MyBeltPrinter 0.8 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "MyToolChanger 0.2 nozzle",
|
||||
"sub_path": "machine/MyToolChanger 0.2 nozzle.json"
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 30 KiB |
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "MyBeltPrinter 0.2 nozzle",
|
||||
"inherits": "fdm_belt_common",
|
||||
"from": "system",
|
||||
"setting_id": "3w1uyJdmm14QhDnH",
|
||||
"instantiation": "true",
|
||||
"printer_model": "Generic Belt Printer",
|
||||
"default_print_profile": "0.12mm Fine @MyBeltPrinter",
|
||||
"nozzle_diameter": [
|
||||
"0.2"
|
||||
],
|
||||
"max_layer_height": [
|
||||
"0.16"
|
||||
],
|
||||
"min_layer_height": [
|
||||
"0.04"
|
||||
],
|
||||
"printer_variant": "0.2",
|
||||
"printable_area": [
|
||||
"0x0",
|
||||
"350x0",
|
||||
"350x350",
|
||||
"0x350"
|
||||
],
|
||||
"printable_height": "300"
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "MyBeltPrinter 0.4 nozzle",
|
||||
"inherits": "fdm_belt_common",
|
||||
"from": "system",
|
||||
"setting_id": "6nRHUtvJOUffocbu",
|
||||
"instantiation": "true",
|
||||
"printer_model": "Generic Belt Printer",
|
||||
"nozzle_diameter": [
|
||||
"0.4"
|
||||
],
|
||||
"printer_variant": "0.4",
|
||||
"printable_area": [
|
||||
"0x0",
|
||||
"350x0",
|
||||
"350x350",
|
||||
"0x350"
|
||||
],
|
||||
"printable_height": "300"
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "MyBeltPrinter 0.6 nozzle",
|
||||
"inherits": "fdm_belt_common",
|
||||
"from": "system",
|
||||
"setting_id": "K0m9HbUNwKT4UCJV",
|
||||
"instantiation": "true",
|
||||
"printer_model": "Generic Belt Printer",
|
||||
"nozzle_diameter": [
|
||||
"0.6"
|
||||
],
|
||||
"max_layer_height": [
|
||||
"0.4"
|
||||
],
|
||||
"min_layer_height": [
|
||||
"0.12"
|
||||
],
|
||||
"printer_variant": "0.6",
|
||||
"printable_area": [
|
||||
"0x0",
|
||||
"350x0",
|
||||
"350x350",
|
||||
"0x350"
|
||||
],
|
||||
"printable_height": "300"
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "MyBeltPrinter 0.8 nozzle",
|
||||
"inherits": "fdm_belt_common",
|
||||
"from": "system",
|
||||
"setting_id": "rHAweDz4eNwttPNA",
|
||||
"instantiation": "true",
|
||||
"printer_model": "Generic Belt Printer",
|
||||
"nozzle_diameter": [
|
||||
"0.8"
|
||||
],
|
||||
"max_layer_height": [
|
||||
"0.6"
|
||||
],
|
||||
"min_layer_height": [
|
||||
"0.2"
|
||||
],
|
||||
"printer_variant": "0.8",
|
||||
"printable_area": [
|
||||
"0x0",
|
||||
"350x0",
|
||||
"350x350",
|
||||
"0x350"
|
||||
],
|
||||
"printable_height": "300"
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"type": "machine_model",
|
||||
"name": "Generic Belt Printer",
|
||||
"model_id": "my_belt_01",
|
||||
"nozzle_diameter": "0.4;0.2;0.6;0.8",
|
||||
"machine_tech": "FFF",
|
||||
"family": "MyPrinter",
|
||||
"bed_model": "Custom_350_bed.stl",
|
||||
"bed_texture": "orcaslicer_bed_texture.svg",
|
||||
"hotend_model": "",
|
||||
"default_materials": "Generic PLA @System;Generic PLA-CF @System;Generic PETG @System;Generic TPU @System;Generic PC @System;Generic PVA @System;Generic PA @System;Generic PA-CF @System"
|
||||
}
|
||||
@@ -0,0 +1,96 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "fdm_belt_common",
|
||||
"inherits": "fdm_klipper_common",
|
||||
"from": "system",
|
||||
"instantiation": "false",
|
||||
"gcode_flavor": "klipper",
|
||||
"single_extruder_multi_material": "0",
|
||||
"default_filament_profile": [
|
||||
"Generic PLA @System"
|
||||
],
|
||||
"default_print_profile": "0.20mm Standard @MyBeltPrinter",
|
||||
"max_layer_height": [
|
||||
"0.32"
|
||||
],
|
||||
"min_layer_height": [
|
||||
"0.08"
|
||||
],
|
||||
"deretraction_speed": [
|
||||
"30"
|
||||
],
|
||||
"extruder_colour": [
|
||||
"#FCE94F"
|
||||
],
|
||||
"extruder_offset": [
|
||||
"0x0"
|
||||
],
|
||||
"long_retractions_when_cut": [
|
||||
"0"
|
||||
],
|
||||
"nozzle_diameter": [
|
||||
"0.4"
|
||||
],
|
||||
"retract_before_wipe": [
|
||||
"70%"
|
||||
],
|
||||
"retract_length_toolchange": [
|
||||
"2"
|
||||
],
|
||||
"retract_lift_above": [
|
||||
"0"
|
||||
],
|
||||
"retract_lift_below": [
|
||||
"0"
|
||||
],
|
||||
"retract_lift_enforce": [
|
||||
"All Surfaces"
|
||||
],
|
||||
"retract_restart_extra": [
|
||||
"0"
|
||||
],
|
||||
"retract_restart_extra_toolchange": [
|
||||
"0"
|
||||
],
|
||||
"retract_when_changing_layer": [
|
||||
"1"
|
||||
],
|
||||
"retraction_distances_when_cut": [
|
||||
"18"
|
||||
],
|
||||
"retraction_length": [
|
||||
"0.8"
|
||||
],
|
||||
"retraction_minimum_travel": [
|
||||
"1"
|
||||
],
|
||||
"retraction_speed": [
|
||||
"30"
|
||||
],
|
||||
"travel_slope": [
|
||||
"3"
|
||||
],
|
||||
"wipe": [
|
||||
"1"
|
||||
],
|
||||
"wipe_distance": [
|
||||
"1"
|
||||
],
|
||||
"z_hop": [
|
||||
"0"
|
||||
],
|
||||
"z_hop_types": [
|
||||
"Normal Lift"
|
||||
],
|
||||
"gcode_remap_x": "rev_x",
|
||||
"gcode_remap_y": "pos_z",
|
||||
"gcode_remap_z": "pos_y",
|
||||
"belt_printer": "1",
|
||||
"belt_slice_rotation": "x",
|
||||
"belt_slice_rotation_angle": "45",
|
||||
"belt_slice_rotation_global": "1",
|
||||
"build_plate_tilt_x": "45",
|
||||
"purge_in_prime_tower": "0",
|
||||
"scan_first_layer": "0",
|
||||
"auxiliary_fan": "0"
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.12mm Fine @MyBeltPrinter",
|
||||
"inherits": "fdm_process_klipper_common",
|
||||
"from": "system",
|
||||
"setting_id": "EugqqdLJ423bgEwN",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.12",
|
||||
"initial_layer_print_height": "0.12",
|
||||
"bottom_shell_layers": "5",
|
||||
"top_shell_layers": "6",
|
||||
"support_top_z_distance": "0.08",
|
||||
"support_bottom_z_distance": "0.08",
|
||||
"skirt_loops": "0",
|
||||
"skirt_distance": "0",
|
||||
"compatible_printers": [
|
||||
"MyBeltPrinter 0.2 nozzle",
|
||||
"MyBeltPrinter 0.4 nozzle"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.20mm Standard @MyBeltPrinter",
|
||||
"inherits": "fdm_process_klipper_common",
|
||||
"from": "system",
|
||||
"setting_id": "YzCDAgH3uLOM53pF",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.2",
|
||||
"initial_layer_print_height": "0.2",
|
||||
"skirt_loops": "0",
|
||||
"skirt_distance": "0",
|
||||
"compatible_printers": [
|
||||
"MyBeltPrinter 0.4 nozzle",
|
||||
"MyBeltPrinter 0.6 nozzle",
|
||||
"MyBeltPrinter 0.8 nozzle"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"name": "IdeaFormer",
|
||||
"version": "02.00.00.06",
|
||||
"force_update": "0",
|
||||
"description": "IdeaFormer belt printer configurations",
|
||||
"machine_model_list": [
|
||||
{
|
||||
"name": "IdeaFormer IR3 V2",
|
||||
"sub_path": "machine/IdeaFormer IR3 V2.json"
|
||||
}
|
||||
],
|
||||
"process_list": [
|
||||
{
|
||||
"name": "fdm_process_common",
|
||||
"sub_path": "process/fdm_process_common.json"
|
||||
},
|
||||
{
|
||||
"name": "0.20mm Standard @IdeaFormer IR3 V2",
|
||||
"sub_path": "process/0.20mm Standard @IdeaFormer IR3 V2.json"
|
||||
}
|
||||
],
|
||||
"filament_list": [
|
||||
{
|
||||
"name": "Generic PLA @IdeaFormer IR3 V2",
|
||||
"sub_path": "filament/Generic PLA @IdeaFormer IR3 V2.json"
|
||||
},
|
||||
{
|
||||
"name": "eSUN PLA @IdeaFormer IR3 V2",
|
||||
"sub_path": "filament/eSUN PLA @IdeaFormer IR3 V2.json"
|
||||
},
|
||||
{
|
||||
"name": "Generic PETG @IdeaFormer IR3 V2",
|
||||
"sub_path": "filament/Generic PETG @IdeaFormer IR3 V2.json"
|
||||
}
|
||||
],
|
||||
"machine_list": [
|
||||
{
|
||||
"name": "fdm_machine_common",
|
||||
"sub_path": "machine/fdm_machine_common.json"
|
||||
},
|
||||
{
|
||||
"name": "fdm_klipper_common",
|
||||
"sub_path": "machine/fdm_klipper_common.json"
|
||||
},
|
||||
{
|
||||
"name": "fdm_belt_common",
|
||||
"sub_path": "machine/fdm_belt_common.json"
|
||||
},
|
||||
{
|
||||
"name": "IdeaFormer IR3 V2 0.4 nozzle",
|
||||
"sub_path": "machine/IdeaFormer IR3 V2 0.4 nozzle.json"
|
||||
}
|
||||
]
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 183 KiB |
@@ -0,0 +1,77 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Generic PETG @IdeaFormer IR3 V2",
|
||||
"inherits": "Generic PETG @System",
|
||||
"from": "system",
|
||||
"setting_id": "n4zaXcUUzTqAxq5f",
|
||||
"instantiation": "true",
|
||||
"filament_extruder_variant": [
|
||||
"Direct Drive Standard"
|
||||
],
|
||||
"compatible_printers": [
|
||||
"IdeaFormer IR3 V2 0.4 nozzle"
|
||||
],
|
||||
"filament_type": [
|
||||
"PETG"
|
||||
],
|
||||
"filament_vendor": [
|
||||
"Generic"
|
||||
],
|
||||
"filament_settings_id": [
|
||||
"Generic PETG @IdeaFormer IR3 V2"
|
||||
],
|
||||
"filament_flow_ratio": [
|
||||
"0.95"
|
||||
],
|
||||
"filament_cost": [
|
||||
"25"
|
||||
],
|
||||
"nozzle_temperature": [
|
||||
"240"
|
||||
],
|
||||
"nozzle_temperature_initial_layer": [
|
||||
"245"
|
||||
],
|
||||
"cool_plate_temp": [
|
||||
"80"
|
||||
],
|
||||
"cool_plate_temp_initial_layer": [
|
||||
"80"
|
||||
],
|
||||
"fan_min_speed": [
|
||||
"40"
|
||||
],
|
||||
"fan_max_speed": [
|
||||
"60"
|
||||
],
|
||||
"overhang_fan_threshold": [
|
||||
"25%"
|
||||
],
|
||||
"overhang_fan_speed": [
|
||||
"80"
|
||||
],
|
||||
"full_fan_speed_layer": [
|
||||
"8"
|
||||
],
|
||||
"slow_down_min_speed": [
|
||||
"20"
|
||||
],
|
||||
"slow_down_layer_time": [
|
||||
"4"
|
||||
],
|
||||
"fan_cooling_layer_time": [
|
||||
"100"
|
||||
],
|
||||
"filament_retraction_length": [
|
||||
"2"
|
||||
],
|
||||
"filament_retraction_speed": [
|
||||
"40"
|
||||
],
|
||||
"filament_deretraction_speed": [
|
||||
"40"
|
||||
],
|
||||
"filament_start_gcode": [
|
||||
"; Generic PETG @IdeaFormer IR3 V2 — belt PETG, bed 80C"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Generic PLA @IdeaFormer IR3 V2",
|
||||
"inherits": "Generic PLA @System",
|
||||
"from": "system",
|
||||
"setting_id": "1xjycsEAFh6KQIhp",
|
||||
"instantiation": "true",
|
||||
"filament_extruder_variant": [
|
||||
"Direct Drive Standard"
|
||||
],
|
||||
"compatible_printers": [
|
||||
"IdeaFormer IR3 V2 0.4 nozzle"
|
||||
],
|
||||
"filament_type": [
|
||||
"PLA"
|
||||
],
|
||||
"filament_vendor": [
|
||||
"Generic"
|
||||
],
|
||||
"filament_settings_id": [
|
||||
"Generic PLA @IdeaFormer IR3 V2"
|
||||
],
|
||||
"nozzle_temperature": [
|
||||
"215"
|
||||
],
|
||||
"hot_plate_temp": [
|
||||
"75"
|
||||
],
|
||||
"hot_plate_temp_initial_layer": [
|
||||
"75"
|
||||
],
|
||||
"cool_plate_temp": [
|
||||
"75"
|
||||
],
|
||||
"cool_plate_temp_initial_layer": [
|
||||
"75"
|
||||
],
|
||||
"textured_plate_temp": [
|
||||
"75"
|
||||
],
|
||||
"textured_plate_temp_initial_layer": [
|
||||
"75"
|
||||
],
|
||||
"close_fan_the_first_x_layers": [
|
||||
"3"
|
||||
],
|
||||
"full_fan_speed_layer": [
|
||||
"8"
|
||||
],
|
||||
"slow_down_min_speed": [
|
||||
"20"
|
||||
],
|
||||
"filament_retraction_length": [
|
||||
"1.5"
|
||||
],
|
||||
"filament_retraction_speed": [
|
||||
"35"
|
||||
],
|
||||
"filament_deretraction_speed": [
|
||||
"30"
|
||||
],
|
||||
"filament_start_gcode": [
|
||||
"; Generic PLA @IdeaFormer IR3 V2 — belt PLA, bed 75C"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "eSUN PLA @IdeaFormer IR3 V2",
|
||||
"inherits": "Generic PLA @IdeaFormer IR3 V2",
|
||||
"from": "system",
|
||||
"setting_id": "XqkviBmFHEglXueX",
|
||||
"filament_id": "OFkrxQC4",
|
||||
"instantiation": "true",
|
||||
"compatible_printers": [
|
||||
"IdeaFormer IR3 V2 0.4 nozzle"
|
||||
],
|
||||
"filament_type": [
|
||||
"PLA"
|
||||
],
|
||||
"filament_vendor": [
|
||||
"eSUN"
|
||||
],
|
||||
"filament_settings_id": [
|
||||
"eSUN PLA @IdeaFormer IR3 V2"
|
||||
],
|
||||
"nozzle_temperature_initial_layer": [
|
||||
"200"
|
||||
],
|
||||
"nozzle_temperature": [
|
||||
"200"
|
||||
],
|
||||
"enable_pressure_advance": [
|
||||
"1"
|
||||
],
|
||||
"pressure_advance": [
|
||||
"0.12"
|
||||
],
|
||||
"filament_max_volumetric_speed": [
|
||||
"20"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,98 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "IdeaFormer IR3 V2 0.4 nozzle",
|
||||
"inherits": "fdm_belt_common",
|
||||
"from": "system",
|
||||
"setting_id": "MDQZgwRgg72lmjtu",
|
||||
"instantiation": "true",
|
||||
"printer_model": "IdeaFormer IR3 V2",
|
||||
"printer_variant": "0.4",
|
||||
"nozzle_diameter": [
|
||||
"0.4"
|
||||
],
|
||||
"printable_area": [
|
||||
"0x0",
|
||||
"250x0",
|
||||
"250x2000",
|
||||
"0x2000"
|
||||
],
|
||||
"printable_height": "250",
|
||||
"belt_printer_infinite_y": "1",
|
||||
"thumbnails": [
|
||||
"48x48/PNG",
|
||||
"300x300/PNG"
|
||||
],
|
||||
"default_filament_profile": [
|
||||
"Generic PLA @IdeaFormer IR3 V2"
|
||||
],
|
||||
"default_print_profile": "0.20mm Standard @IdeaFormer IR3 V2",
|
||||
"use_relative_e_distances": "1",
|
||||
"machine_max_acceleration_extruding": [
|
||||
"5000",
|
||||
"5000"
|
||||
],
|
||||
"machine_max_acceleration_retracting": [
|
||||
"1000",
|
||||
"1000"
|
||||
],
|
||||
"machine_max_acceleration_travel": [
|
||||
"9000",
|
||||
"9000"
|
||||
],
|
||||
"machine_max_acceleration_x": [
|
||||
"5000",
|
||||
"5000"
|
||||
],
|
||||
"machine_max_acceleration_y": [
|
||||
"5000",
|
||||
"5000"
|
||||
],
|
||||
"machine_max_acceleration_z": [
|
||||
"100",
|
||||
"100"
|
||||
],
|
||||
"machine_max_jerk_x": [
|
||||
"10",
|
||||
"10"
|
||||
],
|
||||
"machine_max_jerk_y": [
|
||||
"10",
|
||||
"10"
|
||||
],
|
||||
"machine_max_jerk_z": [
|
||||
"0.4",
|
||||
"0.4"
|
||||
],
|
||||
"machine_max_speed_e": [
|
||||
"60",
|
||||
"60"
|
||||
],
|
||||
"machine_max_speed_x": [
|
||||
"500",
|
||||
"500"
|
||||
],
|
||||
"machine_max_speed_y": [
|
||||
"500",
|
||||
"500"
|
||||
],
|
||||
"machine_max_speed_z": [
|
||||
"20",
|
||||
"20"
|
||||
],
|
||||
"retraction_length": [
|
||||
"2"
|
||||
],
|
||||
"retraction_speed": [
|
||||
"40"
|
||||
],
|
||||
"deretraction_speed": [
|
||||
"40"
|
||||
],
|
||||
"retract_lift_below": [
|
||||
"300"
|
||||
],
|
||||
"machine_start_gcode": "; === IdeaFormer IR3 V2 Belt Printer Start ===\n; Axes: X=lateral, Y=gantry height (probe), Z=belt\nG90 ; absolute positioning\nM82 ; absolute extruder\nG21 ; millimeters\nG28 ; home all axes\nG1 Y20 F500 ; lift nozzle 20mm from belt\n; Bed + hotend temps come from the active filament profile. Belt PLA requires 75 C bed — use Generic/eSun PLA @IdeaFormer IR3 V2 filament presets to get it automatically.\nM140 S[hot_plate_temp_initial_layer] ; set bed temp\nM104 S[nozzle_temperature_initial_layer] ; hotend temp\nM109 S[nozzle_temperature_initial_layer] ; wait hotend\nM190 S[hot_plate_temp_initial_layer] ; wait bed\n; --- Purge blob ---\nG92 E0 ; zero extruder\nG1 Y.1 ; nozzle 0.1mm above belt\nG1 E15 F1000 ; purge 15mm blob\nG1 Z20 E25 F800 ; belt advance 20mm + extrude\nG1 E23 ; retract 2mm\nG28 Y ; re-probe belt surface\nG1 E25 ; de-retract\n; --- Prime lines (full 250mm bed width) ---\nFMS_on ; filament motion sensor\nG1 X250 E50 F2000 ; prime line 1\nG92 Z0 ; reset belt origin\nG1 Z.4 ; belt advance 0.4mm\nG1 X0 E75 ; prime line 2\nG1 F1000 ; default feedrate\nG92 E0 Z0 ; zero extruder + belt = print origin\n",
|
||||
"machine_end_gcode": "; === IdeaFormer IR3 V2 Belt Printer End ===\nM400 ; wait for moves to finish\nM104 S0 ; heater off\nM140 S0 ; bed off\nG92 E0 ; zero extruder\nG1 E-5 F300 ; retract 5mm\nG4 P5000 ; wait for ooze\nG91 ; relative mode - keep every end move relative on a belt\nG1 Y20 F1000 ; raise gantry 20mm for clearance over the part\nG1 Z676 F3000 ; advance belt one full machine-depth to eject the part and clean the belt\nG90 ; back to absolute\nG28 X ; home X only - NEVER 'G28' all: that homes Z/belt and reverses the whole print back into the gantry\nFMS_off ; filament motion sensor off\nBED_MESH_CLEAR\nM84 ; disable motors\n",
|
||||
"machine_pause_gcode": "PAUSE",
|
||||
"layer_change_gcode": "G92 E0 ; belt: reset extruder at layer change (relative E)"
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"type": "machine_model",
|
||||
"name": "IdeaFormer IR3 V2",
|
||||
"model_id": "IdeaFormer_IR3_V2",
|
||||
"nozzle_diameter": "0.4",
|
||||
"machine_tech": "FFF",
|
||||
"family": "IdeaFormer",
|
||||
"bed_model": "",
|
||||
"bed_texture": "",
|
||||
"hotend_model": "",
|
||||
"default_materials": "Generic PLA @IdeaFormer IR3 V2;Generic PETG @IdeaFormer IR3 V2"
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "fdm_belt_common",
|
||||
"inherits": "fdm_klipper_common",
|
||||
"from": "system",
|
||||
"instantiation": "false",
|
||||
"gcode_flavor": "klipper",
|
||||
"single_extruder_multi_material": "0",
|
||||
"default_filament_profile": [
|
||||
"Generic PLA @System"
|
||||
],
|
||||
"default_print_profile": "0.20mm Standard @IdeaFormer IR3 V2",
|
||||
"max_layer_height": [
|
||||
"0.32"
|
||||
],
|
||||
"min_layer_height": [
|
||||
"0.08"
|
||||
],
|
||||
"deretraction_speed": [
|
||||
"30"
|
||||
],
|
||||
"extruder_colour": [
|
||||
"#FCE94F"
|
||||
],
|
||||
"extruder_offset": [
|
||||
"0x0"
|
||||
],
|
||||
"long_retractions_when_cut": [
|
||||
"0"
|
||||
],
|
||||
"nozzle_diameter": [
|
||||
"0.4"
|
||||
],
|
||||
"retract_before_wipe": [
|
||||
"70%"
|
||||
],
|
||||
"retract_length_toolchange": [
|
||||
"2"
|
||||
],
|
||||
"retract_lift_above": [
|
||||
"0"
|
||||
],
|
||||
"retract_lift_below": [
|
||||
"0"
|
||||
],
|
||||
"retract_lift_enforce": [
|
||||
"All Surfaces"
|
||||
],
|
||||
"retract_restart_extra": [
|
||||
"0"
|
||||
],
|
||||
"retract_restart_extra_toolchange": [
|
||||
"0"
|
||||
],
|
||||
"retract_when_changing_layer": [
|
||||
"1"
|
||||
],
|
||||
"retraction_distances_when_cut": [
|
||||
"18"
|
||||
],
|
||||
"retraction_length": [
|
||||
"0.8"
|
||||
],
|
||||
"retraction_minimum_travel": [
|
||||
"1"
|
||||
],
|
||||
"retraction_speed": [
|
||||
"30"
|
||||
],
|
||||
"travel_slope": [
|
||||
"3"
|
||||
],
|
||||
"wipe": [
|
||||
"1"
|
||||
],
|
||||
"wipe_distance": [
|
||||
"1"
|
||||
],
|
||||
"z_hop": [
|
||||
"0"
|
||||
],
|
||||
"z_hop_types": [
|
||||
"Normal Lift"
|
||||
],
|
||||
"gcode_remap_x": "rev_x",
|
||||
"gcode_remap_y": "pos_z",
|
||||
"gcode_remap_z": "pos_y",
|
||||
"printer_extruder_id": [
|
||||
"1"
|
||||
],
|
||||
"belt_printer": "1",
|
||||
"belt_slice_rotation": "x",
|
||||
"belt_slice_rotation_angle": "45",
|
||||
"belt_slice_rotation_global": "1",
|
||||
"build_plate_tilt_x": "45",
|
||||
"purge_in_prime_tower": "0",
|
||||
"scan_first_layer": "0",
|
||||
"auxiliary_fan": "0"
|
||||
}
|
||||
@@ -0,0 +1,140 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "fdm_klipper_common",
|
||||
"inherits": "fdm_machine_common",
|
||||
"from": "system",
|
||||
"instantiation": "false",
|
||||
"gcode_flavor": "klipper",
|
||||
"machine_max_acceleration_e": [
|
||||
"5000",
|
||||
"5000"
|
||||
],
|
||||
"machine_max_acceleration_extruding": [
|
||||
"20000",
|
||||
"20000"
|
||||
],
|
||||
"machine_max_acceleration_retracting": [
|
||||
"5000",
|
||||
"5000"
|
||||
],
|
||||
"machine_max_acceleration_travel": [
|
||||
"20000",
|
||||
"20000"
|
||||
],
|
||||
"machine_max_acceleration_x": [
|
||||
"20000",
|
||||
"20000"
|
||||
],
|
||||
"machine_max_acceleration_y": [
|
||||
"20000",
|
||||
"20000"
|
||||
],
|
||||
"machine_max_acceleration_z": [
|
||||
"500",
|
||||
"200"
|
||||
],
|
||||
"machine_max_speed_e": [
|
||||
"25",
|
||||
"25"
|
||||
],
|
||||
"machine_max_speed_x": [
|
||||
"500",
|
||||
"200"
|
||||
],
|
||||
"machine_max_speed_y": [
|
||||
"500",
|
||||
"200"
|
||||
],
|
||||
"machine_max_speed_z": [
|
||||
"12",
|
||||
"12"
|
||||
],
|
||||
"machine_max_jerk_e": [
|
||||
"2.5",
|
||||
"2.5"
|
||||
],
|
||||
"machine_max_jerk_x": [
|
||||
"9",
|
||||
"9"
|
||||
],
|
||||
"machine_max_jerk_y": [
|
||||
"9",
|
||||
"9"
|
||||
],
|
||||
"machine_max_jerk_z": [
|
||||
"0.2",
|
||||
"0.4"
|
||||
],
|
||||
"machine_min_extruding_rate": [
|
||||
"0",
|
||||
"0"
|
||||
],
|
||||
"machine_min_travel_rate": [
|
||||
"0",
|
||||
"0"
|
||||
],
|
||||
"max_layer_height": [
|
||||
"0.32"
|
||||
],
|
||||
"min_layer_height": [
|
||||
"0.08"
|
||||
],
|
||||
"printable_height": "250",
|
||||
"extruder_clearance_radius": "65",
|
||||
"extruder_clearance_height_to_rod": "36",
|
||||
"extruder_clearance_height_to_lid": "140",
|
||||
"printer_settings_id": "",
|
||||
"printer_technology": "FFF",
|
||||
"printer_variant": "0.4",
|
||||
"retraction_minimum_travel": [
|
||||
"1"
|
||||
],
|
||||
"retract_before_wipe": [
|
||||
"70%"
|
||||
],
|
||||
"retract_when_changing_layer": [
|
||||
"1"
|
||||
],
|
||||
"retraction_length": [
|
||||
"0.8"
|
||||
],
|
||||
"retract_length_toolchange": [
|
||||
"2"
|
||||
],
|
||||
"z_hop": [
|
||||
"0.4"
|
||||
],
|
||||
"retract_restart_extra": [
|
||||
"0"
|
||||
],
|
||||
"retract_restart_extra_toolchange": [
|
||||
"0"
|
||||
],
|
||||
"retraction_speed": [
|
||||
"30"
|
||||
],
|
||||
"deretraction_speed": [
|
||||
"30"
|
||||
],
|
||||
"z_hop_types": "Normal Lift",
|
||||
"single_extruder_multi_material": "1",
|
||||
"change_filament_gcode": "",
|
||||
"wipe": [
|
||||
"1"
|
||||
],
|
||||
"default_filament_profile": [
|
||||
"Generic PLA @System"
|
||||
],
|
||||
"default_print_profile": "0.20mm Standard @MyKlipper",
|
||||
"bed_exclude_area": [
|
||||
"0x0"
|
||||
],
|
||||
"machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM109 S[nozzle_temperature_initial_layer]\nPRINT_START EXTRUDER=[nozzle_temperature_initial_layer] BED=[bed_temperature_initial_layer_single]\n",
|
||||
"machine_end_gcode": "PRINT_END",
|
||||
"layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]",
|
||||
"before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n",
|
||||
"machine_pause_gcode": "PAUSE",
|
||||
"scan_first_layer": "0",
|
||||
"nozzle_type": "undefine",
|
||||
"auxiliary_fan": "0"
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "fdm_machine_common",
|
||||
"from": "system",
|
||||
"instantiation": "false",
|
||||
"printer_technology": "FFF",
|
||||
"deretraction_speed": [
|
||||
"40"
|
||||
],
|
||||
"extruder_colour": [
|
||||
"#FCE94F"
|
||||
],
|
||||
"extruder_offset": [
|
||||
"0x0"
|
||||
],
|
||||
"gcode_flavor": "marlin",
|
||||
"machine_max_acceleration_e": [
|
||||
"5000"
|
||||
],
|
||||
"machine_max_acceleration_extruding": [
|
||||
"10000"
|
||||
],
|
||||
"machine_max_acceleration_retracting": [
|
||||
"1000"
|
||||
],
|
||||
"machine_max_acceleration_x": [
|
||||
"10000"
|
||||
],
|
||||
"machine_max_acceleration_y": [
|
||||
"10000"
|
||||
],
|
||||
"machine_max_acceleration_z": [
|
||||
"500"
|
||||
],
|
||||
"machine_max_speed_e": [
|
||||
"60"
|
||||
],
|
||||
"machine_max_speed_x": [
|
||||
"500"
|
||||
],
|
||||
"machine_max_speed_y": [
|
||||
"500"
|
||||
],
|
||||
"machine_max_speed_z": [
|
||||
"10"
|
||||
],
|
||||
"machine_max_jerk_e": [
|
||||
"5"
|
||||
],
|
||||
"machine_max_jerk_x": [
|
||||
"8"
|
||||
],
|
||||
"machine_max_jerk_y": [
|
||||
"8"
|
||||
],
|
||||
"machine_max_jerk_z": [
|
||||
"0.4"
|
||||
],
|
||||
"machine_min_extruding_rate": [
|
||||
"0"
|
||||
],
|
||||
"machine_min_travel_rate": [
|
||||
"0"
|
||||
],
|
||||
"max_layer_height": [
|
||||
"0.32"
|
||||
],
|
||||
"min_layer_height": [
|
||||
"0.08"
|
||||
],
|
||||
"printable_height": "250",
|
||||
"extruder_clearance_radius": "65",
|
||||
"extruder_clearance_height_to_rod": "36",
|
||||
"extruder_clearance_height_to_lid": "140",
|
||||
"nozzle_diameter": [
|
||||
"0.4"
|
||||
],
|
||||
"printer_settings_id": "",
|
||||
"printer_variant": "0.4",
|
||||
"retraction_minimum_travel": [
|
||||
"2"
|
||||
],
|
||||
"retract_before_wipe": [
|
||||
"70%"
|
||||
],
|
||||
"retract_when_changing_layer": [
|
||||
"1"
|
||||
],
|
||||
"retraction_length": [
|
||||
"1"
|
||||
],
|
||||
"retract_length_toolchange": [
|
||||
"1"
|
||||
],
|
||||
"z_hop": [
|
||||
"0"
|
||||
],
|
||||
"retract_restart_extra": [
|
||||
"0"
|
||||
],
|
||||
"retract_restart_extra_toolchange": [
|
||||
"0"
|
||||
],
|
||||
"retraction_speed": [
|
||||
"60"
|
||||
],
|
||||
"single_extruder_multi_material": "1",
|
||||
"change_filament_gcode": "",
|
||||
"wipe": [
|
||||
"1"
|
||||
],
|
||||
"default_print_profile": "",
|
||||
"machine_start_gcode": "G0 Z20 F9000\nG92 E0; G1 E-10 F1200\nG28\nM970 Q1 A10 B10 C130 K0\nM970 Q1 A10 B131 C250 K1\nM974 Q1 S1 P0\nM970 Q0 A10 B10 C130 H20 K0\nM970 Q0 A10 B131 C250 K1\nM974 Q0 S1 P0\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nG29 ;Home\nG90;\nG92 E0 ;Reset Extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 X10.1 Y20 Z0.28 F5000.0 ;Move to start position\nM109 S205;\nG1 X10.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X10.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X10.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder \nG1 X110 Y110 Z2.0 F3000 ;Move Z Axis up",
|
||||
"machine_end_gcode": "M400 ; wait for buffer to clear\nG92 E0 ; zero the extruder\nG1 E-4.0 F3600; retract \nG91\nG1 Z3;\nM104 S0 ; turn off hotend\nM140 S0 ; turn off bed\nM106 S0 ; turn off fan\nG90 \nG0 X110 Y200 F3600 \nprint_end",
|
||||
"layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]",
|
||||
"before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n",
|
||||
"machine_pause_gcode": "M601"
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.20mm Standard @IdeaFormer IR3 V2",
|
||||
"inherits": "fdm_process_common",
|
||||
"from": "system",
|
||||
"setting_id": "91atcIwv5728phqX",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.2",
|
||||
"initial_layer_print_height": "0.2",
|
||||
"initial_layer_line_width": "0.42",
|
||||
"wall_loops": "2",
|
||||
"reduce_infill_retraction": "1",
|
||||
"detect_overhang_wall": "1",
|
||||
"skirt_loops": "0",
|
||||
"skirt_distance": "0",
|
||||
"sparse_infill_pattern": "grid",
|
||||
"sparse_infill_speed": "200",
|
||||
"support_base_pattern": "rectilinear",
|
||||
"support_interface_pattern": "rectilinear",
|
||||
"compatible_printers": [
|
||||
"IdeaFormer IR3 V2 0.4 nozzle"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,106 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "fdm_process_common",
|
||||
"from": "system",
|
||||
"instantiation": "false",
|
||||
"reduce_crossing_wall": "0",
|
||||
"max_travel_detour_distance": "0",
|
||||
"bottom_surface_pattern": "monotonic",
|
||||
"bottom_shell_thickness": "0",
|
||||
"bridge_speed": "50",
|
||||
"brim_width": "5",
|
||||
"brim_object_gap": "0.1",
|
||||
"compatible_printers": [],
|
||||
"compatible_printers_condition": "",
|
||||
"print_sequence": "by layer",
|
||||
"default_acceleration": "1000",
|
||||
"initial_layer_acceleration": "500",
|
||||
"top_surface_acceleration": "1000",
|
||||
"travel_acceleration": "1000",
|
||||
"inner_wall_acceleration": "1000",
|
||||
"outer_wall_acceleration": "700",
|
||||
"bridge_no_support": "0",
|
||||
"draft_shield": "disabled",
|
||||
"elefant_foot_compensation": "0",
|
||||
"enable_arc_fitting": "0",
|
||||
"wall_infill_order": "inner wall/outer wall/infill",
|
||||
"infill_direction": "45",
|
||||
"sparse_infill_density": "15%",
|
||||
"sparse_infill_pattern": "crosshatch",
|
||||
"initial_layer_print_height": "0.2",
|
||||
"infill_combination": "0",
|
||||
"infill_wall_overlap": "25%",
|
||||
"interface_shells": "0",
|
||||
"ironing_flow": "10%",
|
||||
"ironing_spacing": "0.15",
|
||||
"ironing_speed": "30",
|
||||
"ironing_type": "no ironing",
|
||||
"reduce_infill_retraction": "1",
|
||||
"filename_format": "{input_filename_base}_{layer_height}mm_{filament_type[initial_tool]}_{printer_model}_{print_time}.gcode",
|
||||
"detect_overhang_wall": "1",
|
||||
"slowdown_for_curled_perimeters": "1",
|
||||
"overhang_1_4_speed": "0",
|
||||
"overhang_2_4_speed": "50",
|
||||
"overhang_3_4_speed": "30",
|
||||
"overhang_4_4_speed": "10",
|
||||
"line_width": "110%",
|
||||
"inner_wall_line_width": "110%",
|
||||
"outer_wall_line_width": "100%",
|
||||
"top_surface_line_width": "93.75%",
|
||||
"sparse_infill_line_width": "110%",
|
||||
"initial_layer_line_width": "120%",
|
||||
"internal_solid_infill_line_width": "120%",
|
||||
"support_line_width": "96%",
|
||||
"wall_loops": "3",
|
||||
"print_settings_id": "",
|
||||
"raft_layers": "0",
|
||||
"seam_position": "aligned",
|
||||
"skirt_distance": "2",
|
||||
"skirt_height": "3",
|
||||
"min_skirt_length": "4",
|
||||
"skirt_loops": "0",
|
||||
"minimum_sparse_infill_area": "15",
|
||||
"spiral_mode": "0",
|
||||
"standby_temperature_delta": "-5",
|
||||
"enable_support": "0",
|
||||
"resolution": "0.012",
|
||||
"support_type": "normal(auto)",
|
||||
"support_on_build_plate_only": "0",
|
||||
"support_top_z_distance": "0.2",
|
||||
"support_bottom_z_distance": "0.2",
|
||||
"support_filament": "0",
|
||||
"support_interface_loop_pattern": "0",
|
||||
"support_interface_filament": "0",
|
||||
"support_interface_top_layers": "2",
|
||||
"support_interface_bottom_layers": "2",
|
||||
"support_interface_spacing": "0.5",
|
||||
"support_interface_speed": "80",
|
||||
"support_base_pattern": "default",
|
||||
"support_base_pattern_spacing": "2.5",
|
||||
"support_speed": "150",
|
||||
"support_threshold_angle": "30",
|
||||
"support_object_xy_distance": "0.35",
|
||||
"tree_support_branch_angle": "30",
|
||||
"tree_support_wall_count": "0",
|
||||
"detect_thin_wall": "0",
|
||||
"top_surface_pattern": "monotonicline",
|
||||
"top_shell_thickness": "0.8",
|
||||
"enable_prime_tower": "1",
|
||||
"wipe_tower_no_sparse_layers": "0",
|
||||
"prime_tower_width": "60",
|
||||
"xy_hole_compensation": "0",
|
||||
"xy_contour_compensation": "0",
|
||||
"layer_height": "0.2",
|
||||
"bottom_shell_layers": "3",
|
||||
"top_shell_layers": "4",
|
||||
"bridge_flow": "1",
|
||||
"initial_layer_speed": "45",
|
||||
"initial_layer_infill_speed": "45",
|
||||
"outer_wall_speed": "45",
|
||||
"inner_wall_speed": "80",
|
||||
"sparse_infill_speed": "150",
|
||||
"internal_solid_infill_speed": "150",
|
||||
"top_surface_speed": "50",
|
||||
"gap_infill_speed": "30",
|
||||
"travel_speed": "200"
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"name": "Printcepts",
|
||||
"version": "01.00.00.04",
|
||||
"force_update": "0",
|
||||
"description": "Printcepts belt printer configurations",
|
||||
"machine_model_list": [
|
||||
{
|
||||
"name": "BabyBelt Pro",
|
||||
"sub_path": "machine/BabyBelt Pro.json"
|
||||
}
|
||||
],
|
||||
"process_list": [
|
||||
{
|
||||
"name": "fdm_process_common",
|
||||
"sub_path": "process/fdm_process_common.json"
|
||||
},
|
||||
{
|
||||
"name": "0.20mm Standard @BabyBelt Pro",
|
||||
"sub_path": "process/0.20mm Standard @BabyBelt Pro.json"
|
||||
}
|
||||
],
|
||||
"filament_list": [
|
||||
{
|
||||
"name": "Generic PLA @BabyBelt Pro",
|
||||
"sub_path": "filament/Generic PLA @BabyBelt Pro.json"
|
||||
},
|
||||
{
|
||||
"name": "eSUN PLA @BabyBelt Pro",
|
||||
"sub_path": "filament/eSUN PLA @BabyBelt Pro.json"
|
||||
},
|
||||
{
|
||||
"name": "Generic PETG @BabyBelt Pro",
|
||||
"sub_path": "filament/Generic PETG @BabyBelt Pro.json"
|
||||
}
|
||||
],
|
||||
"machine_list": [
|
||||
{
|
||||
"name": "fdm_machine_common",
|
||||
"sub_path": "machine/fdm_machine_common.json"
|
||||
},
|
||||
{
|
||||
"name": "fdm_klipper_common",
|
||||
"sub_path": "machine/fdm_klipper_common.json"
|
||||
},
|
||||
{
|
||||
"name": "fdm_belt_common",
|
||||
"sub_path": "machine/fdm_belt_common.json"
|
||||
},
|
||||
{
|
||||
"name": "BabyBelt Pro 0.4 nozzle",
|
||||
"sub_path": "machine/BabyBelt Pro 0.4 nozzle.json"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="95.0mm" height="500.0mm" viewBox="0 0 95.0 500.0" preserveAspectRatio="xMidYMid meet">
|
||||
<!-- Printcepts BabyBelt Pro bed texture: 95 x 500 mm belt plate. -->
|
||||
<!-- Transparent plate; green (#195F30) BabyBelt Pro logo centered along X, near the bottom edge. -->
|
||||
<rect x="0" y="0" width="95.0" height="500.0" fill="none"/>
|
||||
<g transform="translate(14.2500,436.3488) scale(0.067538)">
|
||||
<g transform="translate(-11.000000,692.938562) scale(0.100000,-0.100000)"
|
||||
fill="#195F30" stroke="none">
|
||||
<path d="M1963 5604 l-1423 -1324 0 -2050 0 -2050 443 0 c244 0 741 3 1105 7
|
||||
l662 6 0 746 c-1 575 -4 768 -14 841 -47 324 -179 486 -473 581 -40 12 -73 26
|
||||
-73 30 0 4 32 17 72 29 212 64 333 166 378 320 35 121 38 191 32 868 l-5 662
|
||||
-629 0 c-395 0 -628 4 -628 10 0 5 635 601 1410 1325 776 724 1410 1318 1410
|
||||
1321 0 2 -190 4 -422 3 l-423 0 -1422 -1325z m-334 -2029 c143 -16 174 -96
|
||||
173 -446 -2 -411 -24 -458 -224 -462 l-93 -2 -3 450 c-1 248 0 456 3 463 3 9
|
||||
18 12 47 8 24 -3 67 -8 97 -11z m-4 -1556 c160 -29 173 -62 182 -469 9 -455
|
||||
-14 -593 -108 -641 -39 -19 -193 -44 -210 -33 -10 6 -13 1147 -3 1157 6 6 45
|
||||
2 139 -14z"/>
|
||||
<path d="M3464 5979 c-142 -132 -263 -245 -268 -250 -6 -5 69 -9 190 -9 l199
|
||||
1 268 249 267 250 -198 0 -198 0 -260 -241z"/>
|
||||
<path d="M3650 5649 c-135 -126 -254 -238 -265 -249 -19 -20 -18 -20 177 -20
|
||||
l197 0 228 211 c125 116 246 229 268 250 l40 39 -200 -1 -200 0 -245 -230z"/>
|
||||
<path d="M2537 5089 c-101 -24 -204 -105 -251 -197 -96 -190 -19 -420 172
|
||||
-514 l67 -33 2670 0 2670 0 57 27 c74 34 146 107 184 183 43 88 43 230 0 322
|
||||
-35 76 -113 153 -193 191 l-58 27 -2640 2 c-1513 0 -2656 -3 -2678 -8z m5063
|
||||
-77 c-57 -37 -118 -111 -140 -168 -31 -82 -25 -206 12 -279 26 -49 93 -121
|
||||
133 -143 15 -8 -640 -11 -2410 -11 l-2430 0 30 21 c200 146 201 425 1 569
|
||||
l-39 29 2434 -1 c2263 0 2432 -1 2409 -17z m-4890 -43 c270 -122 185 -526
|
||||
-109 -522 -257 2 -370 324 -170 485 74 60 194 76 279 37z m5201 -12 c94 -55
|
||||
140 -135 140 -242 0 -285 -393 -374 -517 -117 -26 54 -30 162 -9 219 28 74 97
|
||||
139 173 164 53 17 166 4 213 -24z"/>
|
||||
<path d="M2917 3973 c-4 -174 -7 -550 -7 -835 l0 -518 326 0 326 0 -7 150 -7
|
||||
150 110 0 110 0 11 -32 c5 -18 26 -86 46 -150 l36 -118 325 0 c179 0 323 4
|
||||
320 9 -3 4 -155 374 -337 822 -182 448 -333 820 -336 827 -4 9 -105 12 -457
|
||||
12 l-453 0 -6 -317z m773 -745 c0 -5 -47 -8 -104 -8 l-103 0 -7 92 c-3 50 -6
|
||||
202 -5 337 l1 246 109 -330 c60 -181 109 -333 109 -337z"/>
|
||||
<path d="M4680 3455 l0 -835 448 0 c693 1 885 16 985 80 99 63 126 132 134
|
||||
340 12 327 -44 405 -342 476 -28 7 -27 8 25 19 199 42 255 95 267 248 11 146
|
||||
-32 285 -110 353 -145 126 -329 153 -1049 154 l-358 0 0 -835z m846 520 c36
|
||||
-23 44 -54 44 -162 0 -152 -29 -183 -170 -183 l-40 0 0 186 0 187 71 -6 c39
|
||||
-3 82 -13 95 -22z m4 -625 c33 -18 40 -52 40 -208 0 -200 -9 -214 -143 -228
|
||||
l-67 -7 0 233 0 233 74 -6 c41 -3 84 -10 96 -17z"/>
|
||||
<path d="M6150 4286 c0 -3 131 -242 290 -531 l290 -526 0 -304 0 -305 385 0
|
||||
385 0 0 299 0 299 305 533 305 534 -377 3 c-207 1 -381 -2 -385 -6 -16 -16
|
||||
-110 -258 -172 -444 l-62 -187 -18 77 c-18 75 -139 450 -171 525 l-15 37 -380
|
||||
0 c-209 0 -380 -2 -380 -4z"/>
|
||||
<path d="M2910 1355 l0 -1185 830 0 830 0 0 240 0 240 -350 0 -350 0 0 255 0
|
||||
255 300 0 300 0 0 230 0 230 -300 0 -300 0 0 220 0 220 320 0 320 0 0 240 0
|
||||
240 -800 0 -800 0 0 -1185z"/>
|
||||
<path d="M4680 1355 l0 -1185 775 0 775 0 0 240 0 240 -295 0 -295 0 0 945 0
|
||||
945 -480 0 -480 0 0 -1185z"/>
|
||||
<path d="M5800 2300 l0 -240 280 0 280 0 0 -945 0 -945 480 0 480 0 0 945 0
|
||||
945 285 0 285 0 0 240 0 240 -1045 0 -1045 0 0 -240z"/>
|
||||
<path d="M8032 1358 l-2 -1188 1008 1 c621 1 971 5 912 10 -309 27 -631 139
|
||||
-885 306 -593 391 -984 1122 -1025 1918 -4 77 -8 -394 -8 -1047z"/>
|
||||
<path d="M7441 1934 c-43 -36 -59 -70 -70 -148 -18 -124 16 -252 76 -291 32
|
||||
-21 226 -33 328 -20 114 14 161 97 153 269 -5 96 -24 151 -68 191 -20 18 -39
|
||||
20 -205 23 l-182 3 -32 -27z m389 -199 c7 -8 10 -22 6 -30 -4 -13 -34 -15
|
||||
-186 -15 -189 0 -202 3 -186 45 8 22 348 22 366 0z"/>
|
||||
<path d="M7450 1267 c-14 -6 -35 -32 -47 -57 -21 -41 -23 -58 -23 -222 l0
|
||||
-178 270 0 270 0 0 105 0 105 -121 0 -120 0 3 28 3 27 118 3 117 3 0 99 0 100
|
||||
-113 0 c-121 0 -138 -7 -162 -65 -8 -19 -9 -19 -12 2 -10 55 -116 84 -183 50z
|
||||
m134 -203 c15 -38 8 -44 -54 -44 -62 0 -69 6 -54 44 9 23 99 23 108 0z"/>
|
||||
<path d="M466 1193 l-29 -43 -163 0 -164 0 0 -235 0 -235 165 0 165 0 27 -42
|
||||
28 -42 3 163 c1 89 1 233 0 319 l-3 157 -29 -42z"/>
|
||||
<path d="M7443 620 c-48 -20 -58 -60 -61 -262 l-4 -188 271 0 271 0 0 110 0
|
||||
110 -110 0 -110 0 0 70 c0 76 -21 145 -51 160 -22 12 -176 12 -206 0z m161
|
||||
-186 c15 -39 8 -44 -64 -44 -72 0 -79 5 -64 44 9 23 119 23 128 0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.5 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 55 KiB |
@@ -0,0 +1,77 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Generic PETG @BabyBelt Pro",
|
||||
"inherits": "Generic PETG @System",
|
||||
"from": "system",
|
||||
"setting_id": "gCzHpDNgVwQR6tgk",
|
||||
"instantiation": "true",
|
||||
"filament_extruder_variant": [
|
||||
"Direct Drive Standard"
|
||||
],
|
||||
"compatible_printers": [
|
||||
"BabyBelt Pro 0.4 nozzle"
|
||||
],
|
||||
"filament_type": [
|
||||
"PETG"
|
||||
],
|
||||
"filament_vendor": [
|
||||
"Generic"
|
||||
],
|
||||
"filament_settings_id": [
|
||||
"Generic PETG @BabyBelt Pro"
|
||||
],
|
||||
"filament_flow_ratio": [
|
||||
"0.95"
|
||||
],
|
||||
"filament_cost": [
|
||||
"25"
|
||||
],
|
||||
"nozzle_temperature": [
|
||||
"240"
|
||||
],
|
||||
"nozzle_temperature_initial_layer": [
|
||||
"245"
|
||||
],
|
||||
"cool_plate_temp": [
|
||||
"80"
|
||||
],
|
||||
"cool_plate_temp_initial_layer": [
|
||||
"80"
|
||||
],
|
||||
"fan_min_speed": [
|
||||
"40"
|
||||
],
|
||||
"fan_max_speed": [
|
||||
"60"
|
||||
],
|
||||
"overhang_fan_threshold": [
|
||||
"25%"
|
||||
],
|
||||
"overhang_fan_speed": [
|
||||
"80"
|
||||
],
|
||||
"full_fan_speed_layer": [
|
||||
"8"
|
||||
],
|
||||
"slow_down_min_speed": [
|
||||
"20"
|
||||
],
|
||||
"slow_down_layer_time": [
|
||||
"4"
|
||||
],
|
||||
"fan_cooling_layer_time": [
|
||||
"100"
|
||||
],
|
||||
"filament_retraction_length": [
|
||||
"2"
|
||||
],
|
||||
"filament_retraction_speed": [
|
||||
"40"
|
||||
],
|
||||
"filament_deretraction_speed": [
|
||||
"40"
|
||||
],
|
||||
"filament_start_gcode": [
|
||||
"; Generic PETG @BabyBelt Pro — belt PETG, bed 80C"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Generic PLA @BabyBelt Pro",
|
||||
"inherits": "Generic PLA @System",
|
||||
"from": "system",
|
||||
"setting_id": "24PpcnhVx9v5f4fD",
|
||||
"instantiation": "true",
|
||||
"filament_extruder_variant": [
|
||||
"Direct Drive Standard"
|
||||
],
|
||||
"compatible_printers": [
|
||||
"BabyBelt Pro 0.4 nozzle"
|
||||
],
|
||||
"filament_type": [
|
||||
"PLA"
|
||||
],
|
||||
"filament_vendor": [
|
||||
"Generic"
|
||||
],
|
||||
"filament_settings_id": [
|
||||
"Generic PLA @BabyBelt Pro"
|
||||
],
|
||||
"nozzle_temperature": [
|
||||
"215"
|
||||
],
|
||||
"hot_plate_temp": [
|
||||
"75"
|
||||
],
|
||||
"hot_plate_temp_initial_layer": [
|
||||
"75"
|
||||
],
|
||||
"cool_plate_temp": [
|
||||
"75"
|
||||
],
|
||||
"cool_plate_temp_initial_layer": [
|
||||
"75"
|
||||
],
|
||||
"textured_plate_temp": [
|
||||
"75"
|
||||
],
|
||||
"textured_plate_temp_initial_layer": [
|
||||
"75"
|
||||
],
|
||||
"close_fan_the_first_x_layers": [
|
||||
"3"
|
||||
],
|
||||
"full_fan_speed_layer": [
|
||||
"8"
|
||||
],
|
||||
"slow_down_min_speed": [
|
||||
"20"
|
||||
],
|
||||
"filament_retraction_length": [
|
||||
"1.5"
|
||||
],
|
||||
"filament_retraction_speed": [
|
||||
"35"
|
||||
],
|
||||
"filament_deretraction_speed": [
|
||||
"30"
|
||||
],
|
||||
"filament_start_gcode": [
|
||||
"; Generic PLA @BabyBelt Pro — belt PLA, bed 75C"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "eSUN PLA @BabyBelt Pro",
|
||||
"inherits": "Generic PLA @BabyBelt Pro",
|
||||
"from": "system",
|
||||
"setting_id": "EH3X7oE0DU5tSpjW",
|
||||
"filament_id": "OFkrxQC4",
|
||||
"instantiation": "true",
|
||||
"compatible_printers": [
|
||||
"BabyBelt Pro 0.4 nozzle"
|
||||
],
|
||||
"filament_type": [
|
||||
"PLA"
|
||||
],
|
||||
"filament_vendor": [
|
||||
"eSUN"
|
||||
],
|
||||
"filament_settings_id": [
|
||||
"eSUN PLA @BabyBelt Pro"
|
||||
],
|
||||
"nozzle_temperature_initial_layer": [
|
||||
"200"
|
||||
],
|
||||
"nozzle_temperature": [
|
||||
"200"
|
||||
],
|
||||
"enable_pressure_advance": [
|
||||
"1"
|
||||
],
|
||||
"pressure_advance": [
|
||||
"0.12"
|
||||
],
|
||||
"filament_max_volumetric_speed": [
|
||||
"20"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,88 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "BabyBelt Pro 0.4 nozzle",
|
||||
"inherits": "fdm_belt_common",
|
||||
"from": "system",
|
||||
"setting_id": "34OWINlJpJgA9DwQ",
|
||||
"instantiation": "true",
|
||||
"printer_model": "BabyBelt Pro",
|
||||
"printer_variant": "0.4",
|
||||
"nozzle_diameter": [
|
||||
"0.4"
|
||||
],
|
||||
"default_filament_profile": [
|
||||
"Generic PLA @BabyBelt Pro"
|
||||
],
|
||||
"default_print_profile": "0.20mm Standard @BabyBelt Pro",
|
||||
"printable_area": [
|
||||
"0x0",
|
||||
"95x0",
|
||||
"95x500",
|
||||
"0x500"
|
||||
],
|
||||
"printable_height": "100",
|
||||
"best_object_pos": "0.5,0.05",
|
||||
"nozzle_type": [
|
||||
"hardened_steel"
|
||||
],
|
||||
"printer_extruder_id": [
|
||||
"1"
|
||||
],
|
||||
"printer_extruder_variant": [
|
||||
"Direct Drive Standard"
|
||||
],
|
||||
"thumbnails": [
|
||||
"48x48/PNG",
|
||||
"300x300/PNG"
|
||||
],
|
||||
"machine_max_acceleration_e": [
|
||||
"500",
|
||||
"5000"
|
||||
],
|
||||
"machine_max_acceleration_extruding": [
|
||||
"500",
|
||||
"20000"
|
||||
],
|
||||
"machine_max_acceleration_retracting": [
|
||||
"500",
|
||||
"5000"
|
||||
],
|
||||
"machine_max_acceleration_x": [
|
||||
"500",
|
||||
"20000"
|
||||
],
|
||||
"machine_max_acceleration_y": [
|
||||
"500",
|
||||
"20000"
|
||||
],
|
||||
"machine_max_junction_deviation": [
|
||||
"0.01",
|
||||
"0.01"
|
||||
],
|
||||
"machine_max_speed_x": [
|
||||
"50",
|
||||
"200"
|
||||
],
|
||||
"machine_max_speed_y": [
|
||||
"50",
|
||||
"200"
|
||||
],
|
||||
"machine_max_speed_z": [
|
||||
"5",
|
||||
"12"
|
||||
],
|
||||
"retraction_length": [
|
||||
"1.5"
|
||||
],
|
||||
"retraction_speed": [
|
||||
"20"
|
||||
],
|
||||
"deretraction_speed": [
|
||||
"25"
|
||||
],
|
||||
"retract_lift_enforce": [
|
||||
"Top and Bottom"
|
||||
],
|
||||
"support_chamber_temp_control": "0",
|
||||
"machine_start_gcode": ";Start GCode\nPRINT_START ANGLE=[belt_slice_rotation_angle] EXTRUDER=[nozzle_temperature_initial_layer] BED=[hot_plate_temp_initial_layer] MATERIAL=[filament_type]\n"
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"type": "machine_model",
|
||||
"name": "BabyBelt Pro",
|
||||
"model_id": "Printcepts_BabyBelt_Pro",
|
||||
"nozzle_diameter": "0.4",
|
||||
"machine_tech": "FFF",
|
||||
"family": "Printcepts",
|
||||
"bed_model": "",
|
||||
"bed_texture": "BabyBelt Pro_bed_texture.svg",
|
||||
"hotend_model": "",
|
||||
"default_materials": "Generic PLA @BabyBelt Pro;Generic PETG @BabyBelt Pro"
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "fdm_belt_common",
|
||||
"inherits": "fdm_klipper_common",
|
||||
"from": "system",
|
||||
"instantiation": "false",
|
||||
"gcode_flavor": "klipper",
|
||||
"single_extruder_multi_material": "0",
|
||||
"default_filament_profile": [
|
||||
"Generic PLA @System"
|
||||
],
|
||||
"default_print_profile": "0.20mm Standard @BabyBelt Pro",
|
||||
"max_layer_height": [
|
||||
"0.32"
|
||||
],
|
||||
"min_layer_height": [
|
||||
"0.08"
|
||||
],
|
||||
"deretraction_speed": [
|
||||
"30"
|
||||
],
|
||||
"extruder_colour": [
|
||||
"#FCE94F"
|
||||
],
|
||||
"extruder_offset": [
|
||||
"0x0"
|
||||
],
|
||||
"long_retractions_when_cut": [
|
||||
"0"
|
||||
],
|
||||
"nozzle_diameter": [
|
||||
"0.4"
|
||||
],
|
||||
"retract_before_wipe": [
|
||||
"70%"
|
||||
],
|
||||
"retract_length_toolchange": [
|
||||
"2"
|
||||
],
|
||||
"retract_lift_above": [
|
||||
"0"
|
||||
],
|
||||
"retract_lift_below": [
|
||||
"0"
|
||||
],
|
||||
"retract_lift_enforce": [
|
||||
"All Surfaces"
|
||||
],
|
||||
"retract_restart_extra": [
|
||||
"0"
|
||||
],
|
||||
"retract_restart_extra_toolchange": [
|
||||
"0"
|
||||
],
|
||||
"retract_when_changing_layer": [
|
||||
"1"
|
||||
],
|
||||
"retraction_distances_when_cut": [
|
||||
"18"
|
||||
],
|
||||
"retraction_length": [
|
||||
"0.8"
|
||||
],
|
||||
"retraction_minimum_travel": [
|
||||
"1"
|
||||
],
|
||||
"retraction_speed": [
|
||||
"30"
|
||||
],
|
||||
"travel_slope": [
|
||||
"3"
|
||||
],
|
||||
"wipe": [
|
||||
"1"
|
||||
],
|
||||
"wipe_distance": [
|
||||
"1"
|
||||
],
|
||||
"z_hop": [
|
||||
"0"
|
||||
],
|
||||
"z_hop_types": [
|
||||
"Normal Lift"
|
||||
],
|
||||
"gcode_remap_x": "rev_x",
|
||||
"gcode_remap_y": "pos_z",
|
||||
"gcode_remap_z": "pos_y",
|
||||
"printer_extruder_id": [
|
||||
"1"
|
||||
],
|
||||
"belt_printer": "1",
|
||||
"belt_slice_rotation": "x",
|
||||
"belt_slice_rotation_angle": "45",
|
||||
"belt_slice_rotation_global": "1",
|
||||
"build_plate_tilt_x": "45",
|
||||
"purge_in_prime_tower": "0",
|
||||
"scan_first_layer": "0",
|
||||
"auxiliary_fan": "0"
|
||||
}
|
||||
@@ -0,0 +1,140 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "fdm_klipper_common",
|
||||
"inherits": "fdm_machine_common",
|
||||
"from": "system",
|
||||
"instantiation": "false",
|
||||
"gcode_flavor": "klipper",
|
||||
"machine_max_acceleration_e": [
|
||||
"5000",
|
||||
"5000"
|
||||
],
|
||||
"machine_max_acceleration_extruding": [
|
||||
"20000",
|
||||
"20000"
|
||||
],
|
||||
"machine_max_acceleration_retracting": [
|
||||
"5000",
|
||||
"5000"
|
||||
],
|
||||
"machine_max_acceleration_travel": [
|
||||
"20000",
|
||||
"20000"
|
||||
],
|
||||
"machine_max_acceleration_x": [
|
||||
"20000",
|
||||
"20000"
|
||||
],
|
||||
"machine_max_acceleration_y": [
|
||||
"20000",
|
||||
"20000"
|
||||
],
|
||||
"machine_max_acceleration_z": [
|
||||
"500",
|
||||
"200"
|
||||
],
|
||||
"machine_max_speed_e": [
|
||||
"25",
|
||||
"25"
|
||||
],
|
||||
"machine_max_speed_x": [
|
||||
"500",
|
||||
"200"
|
||||
],
|
||||
"machine_max_speed_y": [
|
||||
"500",
|
||||
"200"
|
||||
],
|
||||
"machine_max_speed_z": [
|
||||
"12",
|
||||
"12"
|
||||
],
|
||||
"machine_max_jerk_e": [
|
||||
"2.5",
|
||||
"2.5"
|
||||
],
|
||||
"machine_max_jerk_x": [
|
||||
"9",
|
||||
"9"
|
||||
],
|
||||
"machine_max_jerk_y": [
|
||||
"9",
|
||||
"9"
|
||||
],
|
||||
"machine_max_jerk_z": [
|
||||
"0.2",
|
||||
"0.4"
|
||||
],
|
||||
"machine_min_extruding_rate": [
|
||||
"0",
|
||||
"0"
|
||||
],
|
||||
"machine_min_travel_rate": [
|
||||
"0",
|
||||
"0"
|
||||
],
|
||||
"max_layer_height": [
|
||||
"0.32"
|
||||
],
|
||||
"min_layer_height": [
|
||||
"0.08"
|
||||
],
|
||||
"printable_height": "250",
|
||||
"extruder_clearance_radius": "65",
|
||||
"extruder_clearance_height_to_rod": "36",
|
||||
"extruder_clearance_height_to_lid": "140",
|
||||
"printer_settings_id": "",
|
||||
"printer_technology": "FFF",
|
||||
"printer_variant": "0.4",
|
||||
"retraction_minimum_travel": [
|
||||
"1"
|
||||
],
|
||||
"retract_before_wipe": [
|
||||
"70%"
|
||||
],
|
||||
"retract_when_changing_layer": [
|
||||
"1"
|
||||
],
|
||||
"retraction_length": [
|
||||
"0.8"
|
||||
],
|
||||
"retract_length_toolchange": [
|
||||
"2"
|
||||
],
|
||||
"z_hop": [
|
||||
"0.4"
|
||||
],
|
||||
"retract_restart_extra": [
|
||||
"0"
|
||||
],
|
||||
"retract_restart_extra_toolchange": [
|
||||
"0"
|
||||
],
|
||||
"retraction_speed": [
|
||||
"30"
|
||||
],
|
||||
"deretraction_speed": [
|
||||
"30"
|
||||
],
|
||||
"z_hop_types": "Normal Lift",
|
||||
"single_extruder_multi_material": "1",
|
||||
"change_filament_gcode": "",
|
||||
"wipe": [
|
||||
"1"
|
||||
],
|
||||
"default_filament_profile": [
|
||||
"Generic PLA @System"
|
||||
],
|
||||
"default_print_profile": "0.20mm Standard @MyKlipper",
|
||||
"bed_exclude_area": [
|
||||
"0x0"
|
||||
],
|
||||
"machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM109 S[nozzle_temperature_initial_layer]\nPRINT_START EXTRUDER=[nozzle_temperature_initial_layer] BED=[bed_temperature_initial_layer_single]\n",
|
||||
"machine_end_gcode": "PRINT_END",
|
||||
"layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]",
|
||||
"before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n",
|
||||
"machine_pause_gcode": "PAUSE",
|
||||
"scan_first_layer": "0",
|
||||
"nozzle_type": "undefine",
|
||||
"auxiliary_fan": "0"
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "fdm_machine_common",
|
||||
"from": "system",
|
||||
"instantiation": "false",
|
||||
"printer_technology": "FFF",
|
||||
"deretraction_speed": [
|
||||
"40"
|
||||
],
|
||||
"extruder_colour": [
|
||||
"#FCE94F"
|
||||
],
|
||||
"extruder_offset": [
|
||||
"0x0"
|
||||
],
|
||||
"gcode_flavor": "marlin",
|
||||
"machine_max_acceleration_e": [
|
||||
"5000"
|
||||
],
|
||||
"machine_max_acceleration_extruding": [
|
||||
"10000"
|
||||
],
|
||||
"machine_max_acceleration_retracting": [
|
||||
"1000"
|
||||
],
|
||||
"machine_max_acceleration_x": [
|
||||
"10000"
|
||||
],
|
||||
"machine_max_acceleration_y": [
|
||||
"10000"
|
||||
],
|
||||
"machine_max_acceleration_z": [
|
||||
"500"
|
||||
],
|
||||
"machine_max_speed_e": [
|
||||
"60"
|
||||
],
|
||||
"machine_max_speed_x": [
|
||||
"500"
|
||||
],
|
||||
"machine_max_speed_y": [
|
||||
"500"
|
||||
],
|
||||
"machine_max_speed_z": [
|
||||
"10"
|
||||
],
|
||||
"machine_max_jerk_e": [
|
||||
"5"
|
||||
],
|
||||
"machine_max_jerk_x": [
|
||||
"8"
|
||||
],
|
||||
"machine_max_jerk_y": [
|
||||
"8"
|
||||
],
|
||||
"machine_max_jerk_z": [
|
||||
"0.4"
|
||||
],
|
||||
"machine_min_extruding_rate": [
|
||||
"0"
|
||||
],
|
||||
"machine_min_travel_rate": [
|
||||
"0"
|
||||
],
|
||||
"max_layer_height": [
|
||||
"0.32"
|
||||
],
|
||||
"min_layer_height": [
|
||||
"0.08"
|
||||
],
|
||||
"printable_height": "250",
|
||||
"extruder_clearance_radius": "65",
|
||||
"extruder_clearance_height_to_rod": "36",
|
||||
"extruder_clearance_height_to_lid": "140",
|
||||
"nozzle_diameter": [
|
||||
"0.4"
|
||||
],
|
||||
"printer_settings_id": "",
|
||||
"printer_variant": "0.4",
|
||||
"retraction_minimum_travel": [
|
||||
"2"
|
||||
],
|
||||
"retract_before_wipe": [
|
||||
"70%"
|
||||
],
|
||||
"retract_when_changing_layer": [
|
||||
"1"
|
||||
],
|
||||
"retraction_length": [
|
||||
"1"
|
||||
],
|
||||
"retract_length_toolchange": [
|
||||
"1"
|
||||
],
|
||||
"z_hop": [
|
||||
"0"
|
||||
],
|
||||
"retract_restart_extra": [
|
||||
"0"
|
||||
],
|
||||
"retract_restart_extra_toolchange": [
|
||||
"0"
|
||||
],
|
||||
"retraction_speed": [
|
||||
"60"
|
||||
],
|
||||
"single_extruder_multi_material": "1",
|
||||
"change_filament_gcode": "",
|
||||
"wipe": [
|
||||
"1"
|
||||
],
|
||||
"default_print_profile": "",
|
||||
"machine_start_gcode": "G0 Z20 F9000\nG92 E0; G1 E-10 F1200\nG28\nM970 Q1 A10 B10 C130 K0\nM970 Q1 A10 B131 C250 K1\nM974 Q1 S1 P0\nM970 Q0 A10 B10 C130 H20 K0\nM970 Q0 A10 B131 C250 K1\nM974 Q0 S1 P0\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nG29 ;Home\nG90;\nG92 E0 ;Reset Extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 X10.1 Y20 Z0.28 F5000.0 ;Move to start position\nM109 S205;\nG1 X10.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X10.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X10.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder \nG1 X110 Y110 Z2.0 F3000 ;Move Z Axis up",
|
||||
"machine_end_gcode": "M400 ; wait for buffer to clear\nG92 E0 ; zero the extruder\nG1 E-4.0 F3600; retract \nG91\nG1 Z3;\nM104 S0 ; turn off hotend\nM140 S0 ; turn off bed\nM106 S0 ; turn off fan\nG90 \nG0 X110 Y200 F3600 \nprint_end",
|
||||
"layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]",
|
||||
"before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n",
|
||||
"machine_pause_gcode": "M601"
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.20mm Standard @BabyBelt Pro",
|
||||
"inherits": "fdm_process_common",
|
||||
"from": "system",
|
||||
"setting_id": "JGfGtqX6CWjCt437",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.2",
|
||||
"initial_layer_print_height": "0.2",
|
||||
"initial_layer_line_width": "0.42",
|
||||
"wall_loops": "2",
|
||||
"reduce_infill_retraction": "1",
|
||||
"detect_overhang_wall": "1",
|
||||
"skirt_loops": "0",
|
||||
"skirt_distance": "0",
|
||||
"sparse_infill_pattern": "grid",
|
||||
"sparse_infill_speed": "200",
|
||||
"support_base_pattern": "rectilinear",
|
||||
"support_interface_pattern": "rectilinear",
|
||||
"compatible_printers": [
|
||||
"BabyBelt Pro 0.4 nozzle"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,106 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "fdm_process_common",
|
||||
"from": "system",
|
||||
"instantiation": "false",
|
||||
"reduce_crossing_wall": "0",
|
||||
"max_travel_detour_distance": "0",
|
||||
"bottom_surface_pattern": "monotonic",
|
||||
"bottom_shell_thickness": "0",
|
||||
"bridge_speed": "50",
|
||||
"brim_width": "5",
|
||||
"brim_object_gap": "0.1",
|
||||
"compatible_printers": [],
|
||||
"compatible_printers_condition": "",
|
||||
"print_sequence": "by layer",
|
||||
"default_acceleration": "1000",
|
||||
"initial_layer_acceleration": "500",
|
||||
"top_surface_acceleration": "1000",
|
||||
"travel_acceleration": "1000",
|
||||
"inner_wall_acceleration": "1000",
|
||||
"outer_wall_acceleration": "700",
|
||||
"bridge_no_support": "0",
|
||||
"draft_shield": "disabled",
|
||||
"elefant_foot_compensation": "0",
|
||||
"enable_arc_fitting": "0",
|
||||
"wall_infill_order": "inner wall/outer wall/infill",
|
||||
"infill_direction": "45",
|
||||
"sparse_infill_density": "15%",
|
||||
"sparse_infill_pattern": "crosshatch",
|
||||
"initial_layer_print_height": "0.2",
|
||||
"infill_combination": "0",
|
||||
"infill_wall_overlap": "25%",
|
||||
"interface_shells": "0",
|
||||
"ironing_flow": "10%",
|
||||
"ironing_spacing": "0.15",
|
||||
"ironing_speed": "30",
|
||||
"ironing_type": "no ironing",
|
||||
"reduce_infill_retraction": "1",
|
||||
"filename_format": "{input_filename_base}_{layer_height}mm_{filament_type[initial_tool]}_{printer_model}_{print_time}.gcode",
|
||||
"detect_overhang_wall": "1",
|
||||
"slowdown_for_curled_perimeters": "1",
|
||||
"overhang_1_4_speed": "0",
|
||||
"overhang_2_4_speed": "50",
|
||||
"overhang_3_4_speed": "30",
|
||||
"overhang_4_4_speed": "10",
|
||||
"line_width": "110%",
|
||||
"inner_wall_line_width": "110%",
|
||||
"outer_wall_line_width": "100%",
|
||||
"top_surface_line_width": "93.75%",
|
||||
"sparse_infill_line_width": "110%",
|
||||
"initial_layer_line_width": "120%",
|
||||
"internal_solid_infill_line_width": "120%",
|
||||
"support_line_width": "96%",
|
||||
"wall_loops": "3",
|
||||
"print_settings_id": "",
|
||||
"raft_layers": "0",
|
||||
"seam_position": "aligned",
|
||||
"skirt_distance": "2",
|
||||
"skirt_height": "3",
|
||||
"min_skirt_length": "4",
|
||||
"skirt_loops": "0",
|
||||
"minimum_sparse_infill_area": "15",
|
||||
"spiral_mode": "0",
|
||||
"standby_temperature_delta": "-5",
|
||||
"enable_support": "0",
|
||||
"resolution": "0.012",
|
||||
"support_type": "normal(auto)",
|
||||
"support_on_build_plate_only": "0",
|
||||
"support_top_z_distance": "0.2",
|
||||
"support_bottom_z_distance": "0.2",
|
||||
"support_filament": "0",
|
||||
"support_interface_loop_pattern": "0",
|
||||
"support_interface_filament": "0",
|
||||
"support_interface_top_layers": "2",
|
||||
"support_interface_bottom_layers": "2",
|
||||
"support_interface_spacing": "0.5",
|
||||
"support_interface_speed": "80",
|
||||
"support_base_pattern": "default",
|
||||
"support_base_pattern_spacing": "2.5",
|
||||
"support_speed": "150",
|
||||
"support_threshold_angle": "30",
|
||||
"support_object_xy_distance": "0.35",
|
||||
"tree_support_branch_angle": "30",
|
||||
"tree_support_wall_count": "0",
|
||||
"detect_thin_wall": "0",
|
||||
"top_surface_pattern": "monotonicline",
|
||||
"top_shell_thickness": "0.8",
|
||||
"enable_prime_tower": "1",
|
||||
"wipe_tower_no_sparse_layers": "0",
|
||||
"prime_tower_width": "60",
|
||||
"xy_hole_compensation": "0",
|
||||
"xy_contour_compensation": "0",
|
||||
"layer_height": "0.2",
|
||||
"bottom_shell_layers": "3",
|
||||
"top_shell_layers": "4",
|
||||
"bridge_flow": "1",
|
||||
"initial_layer_speed": "45",
|
||||
"initial_layer_infill_speed": "45",
|
||||
"outer_wall_speed": "45",
|
||||
"inner_wall_speed": "80",
|
||||
"sparse_infill_speed": "150",
|
||||
"internal_solid_infill_speed": "150",
|
||||
"top_surface_speed": "50",
|
||||
"gap_infill_speed": "30",
|
||||
"travel_speed": "200"
|
||||
}
|
||||
@@ -26,6 +26,7 @@ struct SlopeDetection
|
||||
bool actived;
|
||||
float normal_z;
|
||||
mat3 volume_world_normal_matrix;
|
||||
vec3 up_direction;
|
||||
};
|
||||
|
||||
uniform vec4 uniform_color;
|
||||
|
||||
@@ -23,6 +23,7 @@ struct SlopeDetection
|
||||
bool actived;
|
||||
float normal_z;
|
||||
mat3 volume_world_normal_matrix;
|
||||
vec3 up_direction;
|
||||
};
|
||||
|
||||
uniform mat4 view_model_matrix;
|
||||
@@ -77,8 +78,8 @@ void main()
|
||||
// Point in homogenous coordinates.
|
||||
world_pos = volume_world_matrix * vec4(v_position, 1.0);
|
||||
|
||||
// z component of normal vector in world coordinate used for slope shading
|
||||
world_normal_z = slope.actived ? (normalize(slope.volume_world_normal_matrix * v_normal)).z : 0.0;
|
||||
// dot product of world normal with up direction, used for slope shading
|
||||
world_normal_z = slope.actived ? dot(normalize(slope.volume_world_normal_matrix * v_normal), slope.up_direction) : 0.0;
|
||||
|
||||
gl_Position = projection_matrix * position;
|
||||
if (is_outline) {
|
||||
|
||||
@@ -37,6 +37,7 @@ struct SlopeDetection
|
||||
bool actived;
|
||||
float normal_z;
|
||||
mat3 volume_world_normal_matrix;
|
||||
vec3 up_direction;
|
||||
};
|
||||
uniform SlopeDetection slope;
|
||||
|
||||
@@ -85,7 +86,7 @@ void main()
|
||||
color = LightBlue;
|
||||
alpha = 1.0;
|
||||
}
|
||||
else if( transformed_normal.z < slope.normal_z - EPSILON)
|
||||
else if( dot(transformed_normal, slope.up_direction) < slope.normal_z - EPSILON)
|
||||
{
|
||||
color = color * 0.5 + LightRed * 0.5;
|
||||
alpha = 1.0;
|
||||
|
||||
@@ -24,6 +24,7 @@ struct SlopeDetection
|
||||
bool actived;
|
||||
float normal_z;
|
||||
mat3 volume_world_normal_matrix;
|
||||
vec3 up_direction;
|
||||
};
|
||||
uniform SlopeDetection slope;
|
||||
void main()
|
||||
|
||||
@@ -7,6 +7,7 @@ struct SlopeDetection
|
||||
bool actived;
|
||||
float normal_z;
|
||||
mat3 volume_world_normal_matrix;
|
||||
vec3 up_direction;
|
||||
};
|
||||
|
||||
uniform mat4 view_model_matrix;
|
||||
@@ -46,8 +47,8 @@ void main()
|
||||
// Point in homogenous coordinates.
|
||||
world_pos = volume_world_matrix * vec4(v_position, 1.0);
|
||||
|
||||
// z component of normal vector in world coordinate used for slope shading
|
||||
world_normal_z = slope.actived ? (normalize(slope.volume_world_normal_matrix * v_normal)).z : 0.0;
|
||||
// dot product of world normal with up direction, used for slope shading
|
||||
world_normal_z = slope.actived ? dot(normalize(slope.volume_world_normal_matrix * v_normal), slope.up_direction) : 0.0;
|
||||
|
||||
gl_Position = projection_matrix * position;
|
||||
if (is_outline) {
|
||||
|
||||
@@ -29,6 +29,7 @@ struct SlopeDetection
|
||||
bool actived;
|
||||
float normal_z;
|
||||
mat3 volume_world_normal_matrix;
|
||||
vec3 up_direction;
|
||||
};
|
||||
|
||||
uniform vec4 uniform_color;
|
||||
|
||||
@@ -23,6 +23,7 @@ struct SlopeDetection
|
||||
bool actived;
|
||||
float normal_z;
|
||||
mat3 volume_world_normal_matrix;
|
||||
vec3 up_direction;
|
||||
};
|
||||
|
||||
uniform mat4 view_model_matrix;
|
||||
@@ -77,8 +78,8 @@ void main()
|
||||
// Point in homogenous coordinates.
|
||||
world_pos = volume_world_matrix * vec4(v_position, 1.0);
|
||||
|
||||
// z component of normal vector in world coordinate used for slope shading
|
||||
world_normal_z = slope.actived ? (normalize(slope.volume_world_normal_matrix * v_normal)).z : 0.0;
|
||||
// dot product of world normal with up direction, used for slope shading
|
||||
world_normal_z = slope.actived ? dot(normalize(slope.volume_world_normal_matrix * v_normal), slope.up_direction) : 0.0;
|
||||
|
||||
gl_Position = projection_matrix * position;
|
||||
if (is_outline) {
|
||||
|
||||
@@ -37,6 +37,7 @@ struct SlopeDetection
|
||||
bool actived;
|
||||
float normal_z;
|
||||
mat3 volume_world_normal_matrix;
|
||||
vec3 up_direction;
|
||||
};
|
||||
uniform SlopeDetection slope;
|
||||
|
||||
@@ -87,7 +88,7 @@ void main()
|
||||
color = LightBlue;
|
||||
alpha = 1.0;
|
||||
}
|
||||
else if( transformed_normal.z < slope.normal_z - EPSILON)
|
||||
else if( dot(transformed_normal, slope.up_direction) < slope.normal_z - EPSILON)
|
||||
{
|
||||
color = color * 0.5 + LightRed * 0.5;
|
||||
alpha = 1.0;
|
||||
|
||||
@@ -24,6 +24,7 @@ struct SlopeDetection
|
||||
bool actived;
|
||||
float normal_z;
|
||||
mat3 volume_world_normal_matrix;
|
||||
vec3 up_direction;
|
||||
};
|
||||
uniform SlopeDetection slope;
|
||||
void main()
|
||||
|
||||
@@ -7,6 +7,7 @@ struct SlopeDetection
|
||||
bool actived;
|
||||
float normal_z;
|
||||
mat3 volume_world_normal_matrix;
|
||||
vec3 up_direction;
|
||||
};
|
||||
|
||||
uniform mat4 view_model_matrix;
|
||||
@@ -46,8 +47,8 @@ void main()
|
||||
// Point in homogenous coordinates.
|
||||
world_pos = volume_world_matrix * vec4(v_position, 1.0);
|
||||
|
||||
// z component of normal vector in world coordinate used for slope shading
|
||||
world_normal_z = slope.actived ? (normalize(slope.volume_world_normal_matrix * v_normal)).z : 0.0;
|
||||
// dot product of world normal with up direction, used for slope shading
|
||||
world_normal_z = slope.actived ? dot(normalize(slope.volume_world_normal_matrix * v_normal), slope.up_direction) : 0.0;
|
||||
|
||||
gl_Position = projection_matrix * position;
|
||||
if (is_outline) {
|
||||
|
||||
+7
-1
@@ -91,6 +91,12 @@ if (SLIC3R_GUI)
|
||||
# list(REMOVE_ITEM wxWidgets_LIBRARIES oleacc)
|
||||
|
||||
find_package(wxInspector REQUIRED)
|
||||
# wxInspector 1.0.0 installs its headers but accidentally declares the
|
||||
# INSTALL_INTERFACE include directory PRIVATE, so its imported target does
|
||||
# not expose them to consumers. Restore the package prefix include path until
|
||||
# the upstream export is fixed.
|
||||
get_filename_component(WXINSPECTOR_PREFIX "${wxInspector_DIR}/../../.." ABSOLUTE)
|
||||
target_include_directories(wxInspector::wxInspector INTERFACE "${WXINSPECTOR_PREFIX}/include")
|
||||
|
||||
# wxInspector's exported interface names the release wxWidgets import
|
||||
# libraries, which a Debug build cannot link. wx is linked above instead.
|
||||
@@ -186,7 +192,7 @@ endif ()
|
||||
# Add the Slic3r GUI library, libcurl, OpenGL and GLU libraries.
|
||||
if (SLIC3R_GUI)
|
||||
# target_link_libraries(OrcaSlicer ws2_32 uxtheme setupapi libslic3r_gui ${wxWidgets_LIBRARIES})
|
||||
target_link_libraries(OrcaSlicer libslic3r_gui)
|
||||
target_link_libraries(OrcaSlicer libslic3r_gui wxInspector::wxInspector)
|
||||
if (MSVC)
|
||||
# Generate debug symbols even in release mode.
|
||||
target_link_options(OrcaSlicer PUBLIC "$<$<CONFIG:RELEASE>:/DEBUG>")
|
||||
|
||||
+46
-13
@@ -3434,9 +3434,14 @@ int CLI::run(int argc, char **argv)
|
||||
max_self_index = std::max(max_self_index, v);
|
||||
min_self_index = std::min(min_self_index, v);
|
||||
}
|
||||
if (max_self_index > filament_count || min_self_index < 1) {
|
||||
BOOST_LOG_TRIVIAL(warning) << boost::format("filament_self_index range [%1%, %2%] is invalid for filament_count %3%, regenerating")
|
||||
% min_self_index % max_self_index % filament_count;
|
||||
// And a project saved with FEWER filaments than are now loaded (a
|
||||
// one-filament project sliced with two --load-filaments) leaves the tables half filled:
|
||||
// the variant matching below then reads past filament_extruder_variant and
|
||||
// set_with_restore_2 throws an uncaught size error. Regenerate in that case too.
|
||||
if (max_self_index > filament_count || min_self_index < 1 || max_self_index < filament_count
|
||||
|| (int) filament_self_index_opt->values.size() < filament_count) {
|
||||
BOOST_LOG_TRIVIAL(warning) << boost::format("filament_self_index range [%1%, %2%] (size %4%) is invalid for filament_count %3%, regenerating")
|
||||
% min_self_index % max_self_index % filament_count % filament_self_index_opt->values.size();
|
||||
need_regenerate_self_index = true;
|
||||
}
|
||||
}
|
||||
@@ -3527,6 +3532,10 @@ int CLI::run(int argc, char **argv)
|
||||
std::vector<string>& filament_variants = curr_variant_opt->values;
|
||||
filament_variants.resize(filament_count, get_extruder_variant_string(etDirectDrive, nvtStandard));
|
||||
}
|
||||
// See the filament_self_index note above: one variant per filament for
|
||||
// the filaments the project did not know about.
|
||||
if ((int) curr_variant_opt->values.size() < filament_count)
|
||||
curr_variant_opt->values.resize(filament_count, get_extruder_variant_string(etDirectDrive, nvtStandard));
|
||||
const ConfigOptionStrings *new_variant_opt = dynamic_cast<const ConfigOptionStrings*>(config.option("filament_extruder_variant", true));
|
||||
|
||||
std::vector<int> new_variant_indice;
|
||||
@@ -3535,7 +3544,7 @@ int CLI::run(int argc, char **argv)
|
||||
|
||||
for (int i = 0; i < new_variant_count; i++)
|
||||
{
|
||||
for (int j = old_start_indice[filament_index - 1]; j < old_start_indice[filament_index - 1] + old_variant_count; j++)
|
||||
for (int j = old_start_indice[filament_index - 1]; j < old_start_indice[filament_index - 1] + old_variant_count && j < (int) curr_variant_opt->values.size(); j++)
|
||||
{
|
||||
if (curr_variant_opt->values[j] == new_variant_opt->values[i]) {
|
||||
new_variant_indice[i] = j;
|
||||
@@ -3587,7 +3596,18 @@ int CLI::run(int argc, char **argv)
|
||||
ConfigOptionVectorBase* opt_vec_dst = static_cast<ConfigOptionVectorBase*>(opt);
|
||||
const ConfigOptionVectorBase* opt_vec_src = static_cast<const ConfigOptionVectorBase*>(source_opt);
|
||||
//set with index
|
||||
opt_vec_dst->set_with_restore_2(opt_vec_src, new_variant_indice, old_start_indice[filament_index - 1], old_variant_count);
|
||||
try {
|
||||
// A project with fewer filaments than are loaded: grow the
|
||||
// destination to the filament's slot first (set_with_restore_2 only restores).
|
||||
if (opt_vec_src->size() > 0 && opt_vec_dst->size() < size_t(old_start_indice[filament_index - 1] + old_variant_count))
|
||||
opt_vec_dst->resize(size_t(old_start_indice[filament_index - 1] + old_variant_count), opt_vec_src);
|
||||
opt_vec_dst->set_with_restore_2(opt_vec_src, new_variant_indice, old_start_indice[filament_index - 1], old_variant_count);
|
||||
} catch (const std::exception &ex) { // Was an uncaught abort
|
||||
BOOST_LOG_TRIVIAL(error) << boost::format("filament %1%: option %2% could not be applied: %3%") % filament_index % opt_key % ex.what();
|
||||
boost::nowide::cerr << "filament " << filament_index << ": option " << opt_key << " could not be applied: " << ex.what() << std::endl;
|
||||
record_exit_reson(outfile_dir, CLI_CONFIG_FILE_ERROR, 0, cli_errors[CLI_CONFIG_FILE_ERROR], sliced_info);
|
||||
flush_and_exit(CLI_CONFIG_FILE_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
continue;
|
||||
@@ -3633,7 +3653,16 @@ int CLI::run(int argc, char **argv)
|
||||
if (filament_options_with_variant.find(opt_key) != filament_options_with_variant.end()) {
|
||||
std::vector<int> temp_variant_indice;
|
||||
temp_variant_indice.resize(new_variant_count, -1);
|
||||
opt_vec_dst->set_with_restore_2(opt_vec_src, temp_variant_indice, old_start_indice[filament_index - 1], old_variant_count, true);
|
||||
try {
|
||||
if (opt_vec_src->size() > 0 && opt_vec_dst->size() < size_t(old_start_indice[filament_index - 1] + old_variant_count)) // See above
|
||||
opt_vec_dst->resize(size_t(old_start_indice[filament_index - 1] + old_variant_count), opt_vec_src);
|
||||
opt_vec_dst->set_with_restore_2(opt_vec_src, temp_variant_indice, old_start_indice[filament_index - 1], old_variant_count, true);
|
||||
} catch (const std::exception &ex) { // Was an uncaught abort
|
||||
BOOST_LOG_TRIVIAL(error) << boost::format("filament %1%: option %2% could not be applied: %3%") % filament_index % opt_key % ex.what();
|
||||
boost::nowide::cerr << "filament " << filament_index << ": option " << opt_key << " could not be applied: " << ex.what() << std::endl;
|
||||
record_exit_reson(outfile_dir, CLI_CONFIG_FILE_ERROR, 0, cli_errors[CLI_CONFIG_FILE_ERROR], sliced_info);
|
||||
flush_and_exit(CLI_CONFIG_FILE_ERROR);
|
||||
}
|
||||
|
||||
if (opt_key == "filament_extruder_variant")
|
||||
new_variant_counts[filament_index - 1] = opt_vec_src->size();
|
||||
@@ -4139,6 +4168,10 @@ int CLI::run(int argc, char **argv)
|
||||
BOOST_LOG_TRIVIAL(info) << boost::format("%1%, set disable_wipe_tower_after_mapping back to false due to wrapping detect")%__LINE__;
|
||||
}
|
||||
|
||||
// Belt printers never get the classic wipe tower (see Print::has_wipe_tower()), so reserve no space for it.
|
||||
const ConfigOptionBool* belt_printer_opt = m_print_config.option<ConfigOptionBool>("belt_printer");
|
||||
const bool is_belt_printer = belt_printer_opt && belt_printer_opt->value;
|
||||
|
||||
auto timelapse_type_opt = m_print_config.option("timelapse_type");
|
||||
bool is_smooth_timelapse = false;
|
||||
if (enable_timelapse && timelapse_type_opt && (timelapse_type_opt->getInt() == TimelapseType::tlSmooth))
|
||||
@@ -4376,11 +4409,11 @@ int CLI::run(int argc, char **argv)
|
||||
}
|
||||
};
|
||||
|
||||
auto check_plate_wipe_tower = [get_print_sequence, is_smooth_timelapse](Slic3r::GUI::PartPlate* plate, int plate_index, DynamicPrintConfig& print_config, plate_obj_size_info_t &plate_obj_size_info) {
|
||||
auto check_plate_wipe_tower = [get_print_sequence, is_smooth_timelapse, is_belt_printer](Slic3r::GUI::PartPlate* plate, int plate_index, DynamicPrintConfig& print_config, plate_obj_size_info_t &plate_obj_size_info) {
|
||||
plate_obj_size_info.obj_bbox= plate->get_objects_bounding_box();
|
||||
BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%, object bbox: min {%2%, %3%, %4%} - max {%5%, %6%, %7%}")
|
||||
%(plate_index+1) %plate_obj_size_info.obj_bbox.min.x() % plate_obj_size_info.obj_bbox.min.y() % plate_obj_size_info.obj_bbox.min.z() %plate_obj_size_info.obj_bbox.max.x() % plate_obj_size_info.obj_bbox.max.y() % plate_obj_size_info.obj_bbox.max.z();
|
||||
if (!print_config.has("wipe_tower_x")) {
|
||||
if (is_belt_printer || !print_config.has("wipe_tower_x")) {
|
||||
plate_obj_size_info.has_wipe_tower = false;
|
||||
BOOST_LOG_TRIVIAL(info) << boost::format("can not found wipe_tower_x in config, set to no wipe tower");
|
||||
return;
|
||||
@@ -5250,7 +5283,7 @@ int CLI::run(int argc, char **argv)
|
||||
}
|
||||
}
|
||||
|
||||
if ((!arrange_cfg.is_seq_print && (assemble_plate.filaments_count > 1))||(enable_wrapping_detect && !current_wrapping_exclude_area.empty()))
|
||||
if (!is_belt_printer && ((!arrange_cfg.is_seq_print && (assemble_plate.filaments_count > 1)) || (enable_wrapping_detect && !current_wrapping_exclude_area.empty())))
|
||||
{
|
||||
//prepare the wipe tower
|
||||
int plate_count = partplate_list.get_plate_count();
|
||||
@@ -5402,7 +5435,7 @@ int CLI::run(int argc, char **argv)
|
||||
bool is_seq_print = false;
|
||||
get_print_sequence(cur_plate, m_print_config, is_seq_print);
|
||||
|
||||
if (!is_seq_print && (assemble_plate.filaments_count > 1) && !has_wipe_tower_position)
|
||||
if (!is_belt_printer && !is_seq_print && (assemble_plate.filaments_count > 1) && !has_wipe_tower_position)
|
||||
{
|
||||
//prepare the wipe tower
|
||||
auto printer_structure_opt = m_print_config.option<ConfigOptionEnum<PrinterStructure>>("printer_structure");
|
||||
@@ -5570,7 +5603,7 @@ int CLI::run(int argc, char **argv)
|
||||
};
|
||||
const int max_filament_count = plate_count > 0 ? *std::max_element(plate_filament_counts.begin(), plate_filament_counts.end()) : 0;
|
||||
|
||||
if (plate_needs_wipe_tower(max_filament_count))
|
||||
if (!is_belt_printer && plate_needs_wipe_tower(max_filament_count))
|
||||
{
|
||||
//prepare the wipe tower
|
||||
auto printer_structure_opt = m_print_config.option<ConfigOptionEnum<PrinterStructure>>("printer_structure");
|
||||
@@ -5677,7 +5710,7 @@ int CLI::run(int argc, char **argv)
|
||||
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": found single object mode");
|
||||
}
|
||||
|
||||
if (m_print_config.has("wipe_tower_x") && (is_smooth_timelapse || !arrange_cfg.is_seq_print || (selected.size() <= 1))) {
|
||||
if (!is_belt_printer && m_print_config.has("wipe_tower_x") && (is_smooth_timelapse || !arrange_cfg.is_seq_print || (selected.size() <= 1))) {
|
||||
float x;
|
||||
float y;
|
||||
if (duplicate_count > 0) {
|
||||
@@ -6302,7 +6335,7 @@ int CLI::run(int argc, char **argv)
|
||||
// The stored (or default) tower position may not fit the tower these plates
|
||||
// need, and no CLI placement site runs on a plain slice - mirror the GUI's
|
||||
// reload clamp and fit every plate's tower into the printable area first.
|
||||
if (m_print_config.option<ConfigOptionBool>("enable_prime_tower", true)->value) {
|
||||
if (!is_belt_printer && m_print_config.option<ConfigOptionBool>("enable_prime_tower", true)->value) {
|
||||
for (int index = 0; index < partplate_list.get_plate_count(); index++) {
|
||||
if ((plate_to_slice != 0) && (plate_to_slice != (index + 1)))
|
||||
continue;
|
||||
|
||||
@@ -521,11 +521,16 @@ int slice_all_printers(const std::string &vendor, const std::string &outdir)
|
||||
const std::string filament_name = bundle.filaments.get_selected_preset_name();
|
||||
const std::string what = "Printer \"" + printer + "\"";
|
||||
const std::string file_base = sanitize_filename(vendor_name) + "__" + sanitize_filename(printer);
|
||||
// A belt printer has no wipe tower (it purges into a prism object on the belt), so its
|
||||
// filament change is the plain tool change set_extruder() emits rather than the tower's block.
|
||||
const bool belt = bundle.printers.get_selected_preset().config.opt_bool("belt_printer");
|
||||
const std::string marker = belt ? "\nT1\n" : "CP TOOLCHANGE START";
|
||||
if (const std::string out = slice_selection(bundle, what, false, outdir, file_base); out.empty())
|
||||
++failures;
|
||||
else if (out.find("CP TOOLCHANGE START") == std::string::npos) {
|
||||
// The filament change never rode the tower, so change_filament_gcode was not exercised.
|
||||
BOOST_LOG_TRIVIAL(error) << what << " sliced but the filament change never fired (no CP TOOLCHANGE START)";
|
||||
else if (out.find(marker) == std::string::npos) {
|
||||
// The filament change never fired, so change_filament_gcode was not exercised.
|
||||
BOOST_LOG_TRIVIAL(error) << what << " sliced but the filament change never fired (no "
|
||||
<< (belt ? "T1" : "CP TOOLCHANGE START") << ")";
|
||||
++failures;
|
||||
}
|
||||
cover(bundle.prints.get_selected_preset());
|
||||
|
||||
@@ -126,13 +126,6 @@
|
||||
</array>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>10.10</string>
|
||||
<key>NSLocalNetworkUsageDescription</key>
|
||||
<string>OrcaSlicer uses your local network to discover and connect to printers.</string>
|
||||
<key>NSBonjourServices</key>
|
||||
<array>
|
||||
<string>_octoprint._tcp</string>
|
||||
<string>_http._tcp</string>
|
||||
</array>
|
||||
<key>NSPrincipalClass</key>
|
||||
<string>NSApplication</string>
|
||||
<key>NSHighResolutionCapable</key>
|
||||
|
||||
@@ -300,7 +300,15 @@ Points get_shrink_bedpts(const DynamicPrintConfig* print_cfg, const ArrangeParam
|
||||
template<class PConf>
|
||||
void fill_config(PConf& pcfg, const ArrangeParams ¶ms) {
|
||||
|
||||
if (params.is_seq_print) {
|
||||
if (params.is_belt) {
|
||||
// Pack from the end of the belt that prints first, and keep the pile on the
|
||||
// bed when it is larger than the room around that end.
|
||||
pcfg.starting_point = !params.belt_reversed ? PConf::Alignment::BOTTOM_LEFT :
|
||||
params.belt_axis == 1 ? PConf::Alignment::TOP_LEFT :
|
||||
PConf::Alignment::BOTTOM_RIGHT;
|
||||
pcfg.clamp_to_bin = true;
|
||||
}
|
||||
else if (params.is_seq_print) {
|
||||
// Start placing the items from the center of the print bed
|
||||
pcfg.starting_point = PConf::Alignment::BOTTOM_LEFT;
|
||||
}
|
||||
@@ -445,6 +453,50 @@ protected:
|
||||
return bindist;
|
||||
}
|
||||
|
||||
// Belt printers pack from the end of the belt that prints first, and a corner
|
||||
// packer's checks (pile inside the bin, pack origin) apply to them as well.
|
||||
bool corner_packing() const { return params.is_belt || m_pconf.starting_point == PConfig::Alignment::BOTTOM_LEFT; }
|
||||
|
||||
static double at(const Box::PointType &pt, int i) { return double(i == 0 ? getX(pt) : getY(pt)); }
|
||||
|
||||
// Position along the belt in print order: increasing from the end that prints first.
|
||||
double belt_pos(const Box::PointType &pt) const { return params.belt_reversed ? -at(pt, params.belt_axis) : at(pt, params.belt_axis); }
|
||||
double belt_start(const Box &bb) const { return belt_pos(params.belt_reversed ? bb.maxCorner() : bb.minCorner()); }
|
||||
double belt_end(const Box &bb) const { return belt_pos(params.belt_reversed ? bb.minCorner() : bb.maxCorner()); }
|
||||
|
||||
// The corner of the bin the belt pile grows from.
|
||||
Box::PointType belt_origin() const
|
||||
{
|
||||
const Box bb = sl::boundingBox(m_bin);
|
||||
auto o = bb.minCorner();
|
||||
if (params.belt_reversed) {
|
||||
if (params.belt_axis == 0) setX(o, getX(bb.maxCorner()));
|
||||
else setY(o, getY(bb.maxCorner()));
|
||||
}
|
||||
return o;
|
||||
}
|
||||
|
||||
// An item's far edge in print order is what it costs (so a row fills across the
|
||||
// belt before the pile advances), with a slight pull toward the near lateral
|
||||
// edge and the same penalty as the bottom-left heuristic for sitting outside
|
||||
// the corner.
|
||||
double dist_along_belt(const Box &ibb)
|
||||
{
|
||||
const Box bin = sl::boundingBox(m_bin);
|
||||
const int l = 1 - params.belt_axis;
|
||||
const double lat = at(ibb.minCorner(), l) - at(bin.minCorner(), l);
|
||||
double d = belt_end(ibb) - belt_start(bin);
|
||||
d += lat < 0 ? 10 * -lat : 0.1 * lat;
|
||||
if (double behind = belt_start(ibb) - belt_start(bin); behind < 0)
|
||||
d += 10 * -behind;
|
||||
return norm(d);
|
||||
}
|
||||
|
||||
double corner_bindist(const Box &ibb, const Slic3r::Point &origin_pack)
|
||||
{
|
||||
return params.is_belt ? dist_along_belt(ibb) : dist_for_BOTTOM_LEFT(ibb, origin_pack);
|
||||
}
|
||||
|
||||
double dist_to_bin(const Box& ibb, const Slic3r::Point& origin_pack, typename Packer::PlacementConfig::Alignment starting_point_alignment)
|
||||
{
|
||||
double bindist = 0;
|
||||
@@ -534,8 +586,8 @@ protected:
|
||||
|
||||
// The smalles distance from the arranged pile center:
|
||||
double dist = norm(*(std::min_element(dists.begin(), dists.end())));
|
||||
if (m_pconf.starting_point == PConfig::Alignment::BOTTOM_LEFT) {
|
||||
double bindist = dist_for_BOTTOM_LEFT(ibb, origin_pack);
|
||||
if (corner_packing()) {
|
||||
double bindist = corner_bindist(ibb, origin_pack);
|
||||
score = 0.2 * dist + 0.8 * bindist;
|
||||
}
|
||||
else {
|
||||
@@ -592,8 +644,8 @@ protected:
|
||||
break;
|
||||
}
|
||||
case LAST_BIG_ITEM: {
|
||||
if (m_pconf.starting_point == PConfig::Alignment::BOTTOM_LEFT) {
|
||||
score = dist_for_BOTTOM_LEFT(ibb, origin_pack);
|
||||
if (corner_packing()) {
|
||||
score = corner_bindist(ibb, origin_pack);
|
||||
}
|
||||
else {
|
||||
if (m_pilebb.defined)
|
||||
@@ -608,8 +660,8 @@ protected:
|
||||
// already processed bigger items.
|
||||
// No need to play around with the anchor points, the center will be
|
||||
// just fine for small items
|
||||
if (m_pconf.starting_point == PConfig::Alignment::BOTTOM_LEFT)
|
||||
score = dist_for_BOTTOM_LEFT(ibb, origin_pack);
|
||||
if (corner_packing())
|
||||
score = corner_bindist(ibb, origin_pack);
|
||||
else {
|
||||
// Align mainly around existing items
|
||||
score = 0.8 * norm(pl::distance(ibb.center(), bigbb.center()))+ 0.2*norm(pl::distance(ibb.center(), origin_pack));
|
||||
@@ -710,6 +762,28 @@ protected:
|
||||
score += 1 * (new_extruder_cnt-last_extruder_cnt);
|
||||
}
|
||||
|
||||
// On a belt the parts print in belt order, so every colour change between
|
||||
// parts is a filament change. Items arrive sorted by extruder and the pile
|
||||
// grows from the leading end; keep each colour's run contiguous by charging
|
||||
// an item for every packed item of another colour it does not fully follow,
|
||||
// counting the tilted layers that reach belt_tilt_slope * height past that
|
||||
// item's far edge.
|
||||
if (params.is_belt && !params.is_seq_print) {
|
||||
const std::set<int> item_colours(item.extrude_ids.begin(), item.extrude_ids.end());
|
||||
const double item_start = belt_start(ibb);
|
||||
for (Item &p : m_items) {
|
||||
if (p.is_virt_object)
|
||||
continue;
|
||||
const std::set<int> p_colours(p.extrude_ids.begin(), p.extrude_ids.end());
|
||||
const bool same_colour = std::includes(item_colours.begin(), item_colours.end(), p_colours.begin(), p_colours.end())
|
||||
|| std::includes(p_colours.begin(), p_colours.end(), item_colours.begin(), item_colours.end());
|
||||
if (same_colour)
|
||||
continue;
|
||||
if (item_start < belt_end(p.boundingBox()) + scaled(p.height * params.belt_tilt_slope))
|
||||
score += 10.;
|
||||
}
|
||||
}
|
||||
|
||||
return std::make_tuple(score, fullbb);
|
||||
}
|
||||
|
||||
@@ -786,7 +860,8 @@ public:
|
||||
|
||||
auto binbb = sl::boundingBox(m_bin);
|
||||
|
||||
auto starting_point = cfg.starting_point == PConfig::Alignment::BOTTOM_LEFT ? binbb.minCorner() : binbb.center();
|
||||
auto starting_point = this->params.is_belt ? belt_origin() :
|
||||
cfg.starting_point == PConfig::Alignment::BOTTOM_LEFT ? binbb.minCorner() : binbb.center();
|
||||
// if we have wipe tower, items should be arranged around wipe tower
|
||||
for (Item itm : items) {
|
||||
if (itm.is_wipe_tower) {
|
||||
@@ -937,7 +1012,7 @@ std::function<double(const Item &, const ItemGroup&)> AutoArranger<ExPolygon>::g
|
||||
auto mp = m_merged_pile;
|
||||
mp.emplace_back(itm.transformedShape());
|
||||
auto chull = sl::convexHull(mp);
|
||||
if (m_pconf.starting_point == PConfig::Alignment::BOTTOM_LEFT)
|
||||
if (corner_packing())
|
||||
{
|
||||
if (!sl::isInside(chull, m_bin))
|
||||
score += LARGE_COST_TO_REJECT;
|
||||
|
||||
@@ -146,6 +146,13 @@ struct ArrangeParams {
|
||||
float nozzle_height = 0;
|
||||
float printable_height = 256.0;
|
||||
Vec2d align_center{ 0.5,0.5 };
|
||||
// Belt printer: items print in the order they lie along the belt axis, from
|
||||
// its low end unless belt_reversed, and a part's top prints
|
||||
// belt_tilt_slope * height further along it than its base.
|
||||
bool is_belt = false;
|
||||
int belt_axis = 1; // 0 = X, 1 = Y
|
||||
bool belt_reversed = false;
|
||||
float belt_tilt_slope = 1.f; // cot(belt tilt angle), 0 when the belt is not tilted
|
||||
|
||||
ArrangePolygons excluded_regions; // regions cant't be used
|
||||
ArrangePolygons nonprefered_regions; // regions can be used but not prefered
|
||||
|
||||
@@ -0,0 +1,554 @@
|
||||
#include <limits>
|
||||
#include "BeltBrim.hpp"
|
||||
|
||||
#include "ClipperUtils.hpp"
|
||||
#include "Flow.hpp"
|
||||
#include "Layer.hpp"
|
||||
#include "Polygon.hpp"
|
||||
#include "Print.hpp"
|
||||
#include "ShortestPath.hpp"
|
||||
#include "Support/BeltFloorContext.hpp"
|
||||
#include "BoundingBox.hpp"
|
||||
#include "ExPolygon.hpp"
|
||||
#include "ExtrusionEntity.hpp"
|
||||
#include "ExtrusionEntityCollection.hpp"
|
||||
#include "Point.hpp"
|
||||
#include "Polyline.hpp"
|
||||
#include "PrintConfig.hpp"
|
||||
#include "libslic3r.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <cmath>
|
||||
#include <cstddef>
|
||||
#include <cstdint>
|
||||
#include <cstdlib>
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
namespace Slic3r {
|
||||
|
||||
// ---------------------------------------------------------------- scaling
|
||||
|
||||
static inline Point scale_u_point(const Point &p, int from_axis, double factor)
|
||||
{
|
||||
// llround, not a cast: casting truncates toward zero, so a round trip would
|
||||
// walk every vertex toward the origin by up to one unit per pass.
|
||||
return from_axis == 0 ?
|
||||
Point(coord_t(std::llround(double(p.x()) * factor)), p.y()) :
|
||||
Point(p.x(), coord_t(std::llround(double(p.y()) * factor)));
|
||||
}
|
||||
|
||||
static inline void scale_u_polygon(Polygon &poly, int from_axis, double factor)
|
||||
{
|
||||
for (Point &p : poly.points)
|
||||
p = scale_u_point(p, from_axis, factor);
|
||||
}
|
||||
|
||||
ExPolygons belt_scale_u(const ExPolygons &src, const BeltBrimFrame &frame, double factor)
|
||||
{
|
||||
ExPolygons out = src;
|
||||
for (ExPolygon &ex : out) {
|
||||
scale_u_polygon(ex.contour, frame.from_axis, factor);
|
||||
for (Polygon &hole : ex.holes)
|
||||
scale_u_polygon(hole, frame.from_axis, factor);
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
Polylines belt_scale_u(const Polylines &src, const BeltBrimFrame &frame, double factor)
|
||||
{
|
||||
Polylines out = src;
|
||||
for (Polyline &pl : out)
|
||||
for (Point &p : pl.points)
|
||||
p = scale_u_point(p, frame.from_axis, factor);
|
||||
return out;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------- sweep
|
||||
|
||||
ExPolygons sweep_ex(const ExPolygons &src, const Point &t)
|
||||
{
|
||||
if (src.empty())
|
||||
return {};
|
||||
if (t == Point(0, 0))
|
||||
return src;
|
||||
|
||||
// One parallelogram per boundary edge. Together with P and P + t these
|
||||
// cover the Minkowski sum exactly: for any q = p + s*t with p in P and
|
||||
// s in [0, 1], let s* be the smallest lambda >= 0 with q - lambda*t in P.
|
||||
// Either s* == 0 (so q is in P) or q - s* * t lies on some boundary edge e,
|
||||
// putting q in that edge's parallelogram. Hole edges must be included, or
|
||||
// holes narrower than t along t would wrongly survive the sweep.
|
||||
Polygons quads;
|
||||
for (const ExPolygon &ex : src)
|
||||
for (size_t c = 0; c < ex.num_contours(); ++ c)
|
||||
for (const Line &e : ex.contour_or_hole(c).lines()) {
|
||||
if (e.a == e.b)
|
||||
continue;
|
||||
Polygon q;
|
||||
q.points = { e.a, e.b, e.b + t, e.a + t };
|
||||
// The non-zero fill rule counts a clockwise ring as -1, which
|
||||
// would punch a hole instead of adding material. Edges parallel
|
||||
// to t give a zero-area quad; Clipper discards those harmlessly.
|
||||
if (q.is_clockwise())
|
||||
q.reverse();
|
||||
quads.emplace_back(std::move(q));
|
||||
}
|
||||
|
||||
ExPolygons shifted = src;
|
||||
for (ExPolygon &ex : shifted)
|
||||
ex.translate(t);
|
||||
|
||||
// union_ex(ExPolygons, Polygons) uses pftNonZero, which is the fill rule the
|
||||
// argument above relies on.
|
||||
return union_ex(union_ex(src, shifted), quads);
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------- brim region
|
||||
|
||||
ExPolygons belt_brim_region(const ExPolygons &footprint_flat,
|
||||
bool has_outer,
|
||||
bool has_inner,
|
||||
coord_t brim_width,
|
||||
coord_t object_gap,
|
||||
coord_t leading,
|
||||
coord_t lateral,
|
||||
const BeltBrimFrame &frame)
|
||||
{
|
||||
if (footprint_flat.empty() || (! has_outer && ! has_inner))
|
||||
return {};
|
||||
|
||||
ExPolygons out;
|
||||
|
||||
if (has_outer) {
|
||||
// Offset the outer ring from the contours only, so a hole cannot punch
|
||||
// through it. Same reasoning as the plate brim in Brim.cpp.
|
||||
Polygons contours;
|
||||
contours.reserve(footprint_flat.size());
|
||||
for (const ExPolygon &ex : footprint_flat)
|
||||
contours.emplace_back(ex.contour);
|
||||
|
||||
// Inner and outer boundary offset from the same polygon, to avoid
|
||||
// round-off mismatch between them.
|
||||
ExPolygons inner = offset_ex(contours, float(object_gap), jtRound, SCALED_RESOLUTION);
|
||||
|
||||
// Close the interior before offsetting outwards. A belt contact patch is often a
|
||||
// narrow, broken-up strip, and the offset rings of two islands less than
|
||||
// 2 x brim_width apart merge and fill the space between them - space that lies
|
||||
// UNDER the part, which is not what "outer brim" means. Closing also swallows
|
||||
// holes in the patch for the same reason. Concavity-filling only, so an apron or
|
||||
// any other outward protrusion is untouched.
|
||||
ExPolygons envelope = brim_width > 0 ? closing_ex(inner, float(brim_width)) : inner;
|
||||
|
||||
ExPolygons base = envelope;
|
||||
if (leading > 0) {
|
||||
// Sweep downhill from the gapped keep-out, so the apron is contiguous with
|
||||
// the ring instead of starting inside the gap.
|
||||
const Point t = frame.from_axis == 0 ?
|
||||
Point(frame.downhill_sign() * leading, 0) :
|
||||
Point(0, frame.downhill_sign() * leading);
|
||||
base = union_ex(base, sweep_ex(envelope, t));
|
||||
}
|
||||
if (lateral > 0) {
|
||||
// Across the belt, both ways. Swept from `base` so the apron is widened
|
||||
// too, and in the flattened frame the cross-belt axis is unscaled, so this
|
||||
// distance is already a true on-belt distance.
|
||||
const Point t = frame.from_axis == 0 ? Point(0, lateral) : Point(lateral, 0);
|
||||
ExPolygons widened = union_ex(sweep_ex(base, t), sweep_ex(base, Point(-t.x(), -t.y())));
|
||||
base = union_ex(base, to_polygons(widened));
|
||||
}
|
||||
ExPolygons outer = offset_ex(base, float(brim_width), jtRound, SCALED_RESOLUTION);
|
||||
expolygons_append(out, diff_ex(outer, envelope));
|
||||
}
|
||||
|
||||
if (has_inner) {
|
||||
// Holes reversed so a negative offset grows inward, mirroring Brim.cpp.
|
||||
// No apron here: an apron growing into a hole interior is never useful.
|
||||
Polygons holes;
|
||||
for (const ExPolygon &ex : footprint_flat)
|
||||
polygons_append(holes, ex.holes);
|
||||
polygons_reverse(holes);
|
||||
if (! holes.empty()) {
|
||||
ExPolygons hole_inner = offset_ex(holes, - float(brim_width + object_gap));
|
||||
ExPolygons hole_outer = offset_ex(holes, - float(object_gap));
|
||||
expolygons_append(out, intersection_ex(diff_ex(hole_outer, hole_inner), holes));
|
||||
}
|
||||
}
|
||||
|
||||
return union_ex(out);
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------- line lattice
|
||||
|
||||
std::vector<coord_t> belt_brim_line_positions(coord_t u_lo,
|
||||
coord_t u_hi,
|
||||
coord_t pitch_u,
|
||||
coord_t u_anchor)
|
||||
{
|
||||
std::vector<coord_t> out;
|
||||
if (pitch_u <= 0 || u_hi <= u_lo)
|
||||
return out;
|
||||
|
||||
// Walk the lattice from just below u_lo. Integer arithmetic throughout, so
|
||||
// the half-open interval needs no epsilon: a point landing exactly on u_hi
|
||||
// belongs to the next band.
|
||||
int64_t k = int64_t(std::floor(double(u_lo - u_anchor) / double(pitch_u))) - 1;
|
||||
while (u_anchor + coord_t(k) * pitch_u < u_lo)
|
||||
++ k;
|
||||
for (;; ++ k) {
|
||||
const coord_t u = u_anchor + coord_t(k) * pitch_u;
|
||||
if (u >= u_hi)
|
||||
break;
|
||||
out.emplace_back(u);
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------- pipeline
|
||||
|
||||
// A band of the belt surface as an explicit box, clamped to `bounds` along the
|
||||
// shear axis. Deliberately not BeltFloorContext::surface_polygon(): those
|
||||
// half-planes span +-1000 mm, which is wasteful to clip against and dangerous to
|
||||
// feed through the flattening scale.
|
||||
static Polygon band_box(const BoundingBox &bounds, int from_axis, coordf_t u_lo, coordf_t u_hi)
|
||||
{
|
||||
coord_t lo = scale_(u_lo);
|
||||
coord_t hi = scale_(u_hi);
|
||||
const coord_t bmin = from_axis == 0 ? bounds.min.x() : bounds.min.y();
|
||||
const coord_t bmax = from_axis == 0 ? bounds.max.x() : bounds.max.y();
|
||||
lo = std::max(lo, bmin);
|
||||
hi = std::min(hi, bmax);
|
||||
Polygon poly;
|
||||
if (hi <= lo)
|
||||
return poly;
|
||||
if (from_axis == 0)
|
||||
poly.points = { Point(lo, bounds.min.y()), Point(hi, bounds.min.y()),
|
||||
Point(hi, bounds.max.y()), Point(lo, bounds.max.y()) };
|
||||
else
|
||||
poly.points = { Point(bounds.min.x(), lo), Point(bounds.max.x(), lo),
|
||||
Point(bounds.max.x(), hi), Point(bounds.min.x(), hi) };
|
||||
return poly;
|
||||
}
|
||||
|
||||
ExPolygons belt_brim_clip_leading_edge(const ExPolygons ®ion, const BeltBrimFrame &frame, coordf_t u_cut)
|
||||
{
|
||||
if (region.empty())
|
||||
return region;
|
||||
BoundingBox keep_bb = get_extents(region);
|
||||
keep_bb.offset(scale_(1.));
|
||||
const bool low_side = frame.downhill_sign() < 0; // downhill is -u
|
||||
const Polygon keep = band_box(keep_bb, frame.from_axis,
|
||||
low_side ? unscale<double>(frame.from_axis == 0 ? keep_bb.min.x() : keep_bb.min.y()) : u_cut,
|
||||
low_side ? u_cut : unscale<double>(frame.from_axis == 0 ? keep_bb.max.x() : keep_bb.max.y()));
|
||||
return keep.empty() ? ExPolygons{} : intersection_ex(region, Polygons{ keep });
|
||||
}
|
||||
|
||||
// Everything the per-band line generator needs, gathered once per object.
|
||||
struct BeltBrimContext
|
||||
{
|
||||
BeltFloorContext ctx;
|
||||
BeltBrimFrame frame;
|
||||
ExPolygons region; // brim region, object-local slicing XY
|
||||
BoundingBox region_bbox;
|
||||
Flow brim_flow;
|
||||
coord_t pitch_u = 0;
|
||||
coord_t u_anchor = 0;
|
||||
double in_plane_pitch = 0.; // mm
|
||||
};
|
||||
|
||||
// Emit the cross-belt brim lines that belong to the band [print_z - height, print_z].
|
||||
static void belt_brim_band_paths(const BeltBrimContext &bc,
|
||||
coordf_t print_z,
|
||||
coordf_t height,
|
||||
const Polygons &obstacles,
|
||||
ExtrusionEntityCollection &out,
|
||||
ExPolygons &areas_out)
|
||||
{
|
||||
coordf_t u_lo = bc.ctx.cutoff_u(print_z - height);
|
||||
coordf_t u_hi = bc.ctx.cutoff_u(print_z);
|
||||
if (u_lo > u_hi)
|
||||
std::swap(u_lo, u_hi);
|
||||
|
||||
// How wide this band is measured ON the belt, versus one nominal bead.
|
||||
const double band_in_plane = (u_hi - u_lo) * bc.frame.u_stretch();
|
||||
|
||||
// Fraction of the layer height at which a line sits above the belt. Toward the
|
||||
// downhill edge, so the sheet is reasonably thick while the nozzle stays clear of
|
||||
// the belt itself.
|
||||
static constexpr double BAND_CLEARANCE_FRACTION = 0.75;
|
||||
|
||||
std::vector<coord_t> us;
|
||||
double uniform_clearance = 0.; // 0 => derive per line from its own position
|
||||
double line_pitch = bc.in_plane_pitch;
|
||||
// One line also serves a band up to half a bead wider than the nominal pitch (a 0.3 mm
|
||||
// first layer at 45 degrees): its flow is matched to the band, so the bead is that much
|
||||
// wider. Two lattice lines in such a band would land almost on top of each other.
|
||||
if (band_in_plane <= 1.5 * bc.in_plane_pitch + EPSILON) {
|
||||
// Steep belt, which is the normal case: the band is narrower than one bead, so
|
||||
// exactly one line fits. Place it at a FIXED fraction of the band rather than
|
||||
// on a nominal-spacing lattice. On a lattice each line lands at an arbitrary
|
||||
// point in its band, the clearance sweeps [0, height] from band to band, and the
|
||||
// bead width therefore varies by 2x - visible as ragged, uneven brim lines.
|
||||
// Anchoring to the band makes the clearance identical everywhere, so every bead
|
||||
// is the same width.
|
||||
//
|
||||
// The spacing is then whatever the bands give (height / sin(tilt) on the belt)
|
||||
// rather than the nominal bead spacing, so the flow below is matched to THAT
|
||||
// pitch. Matched flow at the real pitch is what keeps the sheet uniform and
|
||||
// gap-free; using nominal flow at band spacing would over-feed it.
|
||||
us.push_back(scale_(bc.ctx.cutoff_u(print_z - BAND_CLEARANCE_FRACTION * height)));
|
||||
uniform_clearance = BAND_CLEARANCE_FRACTION * height;
|
||||
line_pitch = band_in_plane;
|
||||
} else {
|
||||
// Shallow belt: the band is wider than a bead, so it takes several lines and they
|
||||
// have to sit on the nominal lattice. Their clearances then differ, and so do
|
||||
// their widths - unavoidable here, but shallow belts are the rare case.
|
||||
us = belt_brim_line_positions(scale_(u_lo), scale_(u_hi), bc.pitch_u, bc.u_anchor);
|
||||
}
|
||||
if (us.empty())
|
||||
return;
|
||||
|
||||
const Polygons region_polys = to_polygons(bc.region);
|
||||
|
||||
// One lattice line at a time: the clearance - and therefore the extrusion
|
||||
// volume - is a property of the line's u, so the pieces of different lines
|
||||
// must not be pooled before the flow is resolved.
|
||||
// Overshoot the region so the clip, not the line's ends, decides the extent.
|
||||
const coord_t margin = coord_t(SCALED_EPSILON) + 1;
|
||||
coord_t u_prev = std::numeric_limits<coord_t>::min();
|
||||
for (coord_t u : us) {
|
||||
// Nozzle-to-belt clearance for this line. Constant along the line, because the
|
||||
// belt height depends only on the shear-axis coordinate. Band-anchored lines
|
||||
// share one clearance by construction; lattice lines (shallow belts, or a first
|
||||
// layer thick enough that the band is wider than a bead) each get their own.
|
||||
//
|
||||
// A lattice line can fall where the belt is only a hair below the band's print_z.
|
||||
// The bead there would be laid scraping the belt while its flow is sized for a
|
||||
// taller cell, so it is moved uphill to the same fraction of the band the
|
||||
// single-line case uses. (The clearance is along slice Z; the real gap under the
|
||||
// nozzle is clearance x cos(tilt), 0.53 h at 45 degrees for the 0.75 fraction.)
|
||||
double clearance = uniform_clearance;
|
||||
if (clearance <= 0.) {
|
||||
const Point probe = bc.frame.from_axis == 0 ? Point(u, 0) : Point(0, u);
|
||||
clearance = print_z - bc.ctx.floor_print_z(probe);
|
||||
if (clearance < BAND_CLEARANCE_FRACTION * height) {
|
||||
clearance = BAND_CLEARANCE_FRACTION * height;
|
||||
u = scale_(bc.ctx.cutoff_u(print_z - clearance));
|
||||
}
|
||||
clearance = std::min(clearance, height);
|
||||
}
|
||||
// A line moved uphill can land on, or almost on, its neighbour; two beads closer
|
||||
// than half a pitch would be laid into the same cell.
|
||||
if (u_prev != std::numeric_limits<coord_t>::min() && std::abs(u - u_prev) < bc.pitch_u / 2)
|
||||
continue;
|
||||
u_prev = u;
|
||||
|
||||
Polyline line;
|
||||
if (bc.frame.from_axis == 0)
|
||||
line.points = { Point(u, coord_t(bc.region_bbox.min.y() - margin)),
|
||||
Point(u, coord_t(bc.region_bbox.max.y() + margin)) };
|
||||
else
|
||||
line.points = { Point(coord_t(bc.region_bbox.min.x() - margin), u),
|
||||
Point(coord_t(bc.region_bbox.max.x() + margin), u) };
|
||||
|
||||
Polylines pieces = intersection_pl(Polylines{ line }, region_polys);
|
||||
if (! obstacles.empty())
|
||||
pieces = diff_pl(pieces, obstacles);
|
||||
if (pieces.empty())
|
||||
continue;
|
||||
|
||||
// with_cross_section, not with_height: it reaches the prescribed volume while
|
||||
// KEEPING the extrusion spacing, so the bead is sized to fill exactly one
|
||||
// pitch x clearance cell of the sheet.
|
||||
const Flow f = bc.brim_flow.with_cross_section(float(line_pitch * clearance));
|
||||
|
||||
// Footprint of these beads, for the first-layer convex hull and bbox.
|
||||
for (const Polygon &p : offset(pieces, 0.5f * float(f.scaled_width())))
|
||||
areas_out.emplace_back(ExPolygon(p));
|
||||
|
||||
extrusion_entities_append_paths(out.entities, chain_polylines(std::move(pieces)),
|
||||
erBrim, f.mm3_per_mm(), f.width(), float(clearance));
|
||||
}
|
||||
}
|
||||
|
||||
// Union of everything extruded at `print_z` that the brim must keep clear of, expressed
|
||||
// in `self`'s local slicing frame. Includes `self` itself: its slice at this Z can
|
||||
// overhang outside the belt footprint and land in the brim ring, which the flattened
|
||||
// brim_object_gap - a belt-plane separation - does not cover.
|
||||
//
|
||||
// THREADING: this runs inside posSupportMaterial, which Print::process() executes for all
|
||||
// objects in a tbb::parallel_for (Print.cpp). Object slices are finished by then and safe
|
||||
// to read across objects, but SUPPORT layers are not: another object's thread may be
|
||||
// inside clear_support_layers() - which deletes the SupportLayer pointers - right now, so
|
||||
// touching a foreign object's support_layers() here is a use-after-free. Only this
|
||||
// object's own supports are consulted; they are complete, because make_belt_brim() runs at
|
||||
// the tail of this object's own generate_support_material(). The cost is that the brim
|
||||
// does not dodge a *different* object's support at the same Z, which needs the objects to
|
||||
// overlap in the belt direction in the first place.
|
||||
// `region_bbox` bounds the brim; anything outside it cannot clip a brim line, so whole
|
||||
// objects are skipped without materialising their polygons. On a typical plate the
|
||||
// objects do not overlap and every foreign object drops out here, which matters because
|
||||
// this runs once per band - hundreds of times per object.
|
||||
static Polygons belt_brim_obstacles(const Print &print, const PrintObject &self,
|
||||
const BoundingBox ®ion_bbox, coordf_t print_z, coordf_t tol)
|
||||
{
|
||||
const Point shift_self = self.instances().empty() ? Point(0, 0)
|
||||
: self.instances().front().shift_without_plate_offset();
|
||||
Polygons out;
|
||||
for (const PrintObject *o : print.objects()) {
|
||||
const bool is_self = (o == &self);
|
||||
for (const PrintInstance &inst : o->instances()) {
|
||||
const Point delta = inst.shift_without_plate_offset() - shift_self;
|
||||
if (const Layer *l = o->get_layer_at_printz(print_z, tol)) {
|
||||
BoundingBox lb = get_extents(l->lslices);
|
||||
lb.translate(delta.x(), delta.y());
|
||||
if (lb.overlap(region_bbox)) {
|
||||
Polygons ps = to_polygons(l->lslices);
|
||||
for (Polygon &p : ps)
|
||||
p.translate(delta);
|
||||
polygons_append(out, std::move(ps));
|
||||
}
|
||||
}
|
||||
if (! is_self)
|
||||
continue;
|
||||
if (const SupportLayer *sl = o->get_support_layer_at_printz(print_z, tol)) {
|
||||
Polygons ps = sl->support_fills.polygons_covered_by_spacing();
|
||||
for (Polygon &p : ps)
|
||||
p.translate(delta);
|
||||
polygons_append(out, std::move(ps));
|
||||
}
|
||||
}
|
||||
}
|
||||
if (out.size() < 2)
|
||||
return out; // union_() of 0 or 1 polygons is pure overhead
|
||||
return union_(out);
|
||||
}
|
||||
|
||||
void make_belt_brim(PrintObject &object)
|
||||
{
|
||||
object.clear_belt_brim();
|
||||
if (! object.has_belt_brim())
|
||||
return;
|
||||
|
||||
const Print &print = *object.print();
|
||||
BeltBrimContext bc;
|
||||
if (! bc.ctx.init(object.slicing_parameters(), print.config()))
|
||||
return;
|
||||
bc.frame = BeltBrimFrame{ bc.ctx.shear_factor(), bc.ctx.from_axis() };
|
||||
|
||||
const size_t nlayers = object.layers().size();
|
||||
if (nlayers == 0)
|
||||
return;
|
||||
|
||||
// 1. Belt footprint: the union of each layer's slice clipped to that layer's
|
||||
// own contact band. This is the object's bottom face, which on a belt is
|
||||
// spread over every layer instead of sitting in layer 0.
|
||||
ExPolygons footprint_acc;
|
||||
for (size_t i = 0; i < nlayers; ++ i) {
|
||||
const Layer &layer = *object.layers()[i];
|
||||
if (layer.lslices.empty())
|
||||
continue;
|
||||
// print_z - height, not the previous layer's print_z: variable layer
|
||||
// heights make the latter wrong.
|
||||
coordf_t u_lo = bc.ctx.cutoff_u(layer.print_z - layer.height);
|
||||
coordf_t u_hi = bc.ctx.cutoff_u(layer.print_z);
|
||||
if (u_lo > u_hi)
|
||||
std::swap(u_lo, u_hi);
|
||||
BoundingBox bb = get_extents(layer.lslices);
|
||||
bb.offset(scale_(1.));
|
||||
const Polygon band = band_box(bb, bc.frame.from_axis, u_lo, u_hi);
|
||||
if (band.empty())
|
||||
continue;
|
||||
expolygons_append(footprint_acc, intersection_ex(layer.lslices, Polygons{ band }));
|
||||
}
|
||||
const ExPolygons footprint = union_ex(footprint_acc);
|
||||
if (footprint.empty())
|
||||
return;
|
||||
|
||||
// 2. Brim region, offset in the flattened (true on-belt) metric.
|
||||
const PrintObjectConfig &cfg = object.config();
|
||||
bc.brim_flow = print.brim_flow();
|
||||
const double flow_w = bc.brim_flow.scaled_spacing() * SCALING_FACTOR;
|
||||
// Quantize to an even number of lines, as the plate brim does.
|
||||
const coord_t width = scale_(std::floor(cfg.brim_width.value / flow_w / 2) * flow_w * 2);
|
||||
const coord_t leading = scale_(cfg.leading_brim_length.value);
|
||||
const coord_t lateral = scale_(cfg.extra_brim_width.value);
|
||||
const coord_t gap = scale_(cfg.brim_object_gap.value);
|
||||
|
||||
// Belt printers collapse Auto / Mouse ear / Painted to outer-only: the auto width
|
||||
// heuristic and flat ear discs have no meaning on a tilted plane. Leading-edge-only
|
||||
// is an outer brim too; it is narrowed down to the first contact below.
|
||||
const BrimType bt = cfg.brim_type.value;
|
||||
const bool has_outer = bt == btOuterOnly || bt == btOuterAndInner
|
||||
|| bt == btAutoBrim || bt == btEar || bt == btPainted
|
||||
|| bt == btLeadingEdgeOnly;
|
||||
const bool has_inner = bt == btInnerOnly || bt == btOuterAndInner;
|
||||
|
||||
bc.region = belt_unflatten(
|
||||
belt_brim_region(belt_flatten(footprint, bc.frame), has_outer, has_inner,
|
||||
width, gap, leading, lateral, bc.frame),
|
||||
bc.frame);
|
||||
|
||||
if (bt == btLeadingEdgeOnly && ! bc.region.empty())
|
||||
// The cut is the uphill edge of the first layer's contact band: everything
|
||||
// past it belongs to later contacts.
|
||||
bc.region = belt_brim_clip_leading_edge(bc.region, bc.frame,
|
||||
bc.ctx.cutoff_u(object.layers().front()->print_z));
|
||||
|
||||
if (bc.region.empty())
|
||||
return;
|
||||
bc.region_bbox = get_extents(bc.region);
|
||||
|
||||
// 3. Line lattice. Fixed pitch in the flattened metric, anchored at the
|
||||
// footprint's leading-most edge so lines stay collinear across
|
||||
// disconnected islands and across the apron prologue.
|
||||
bc.pitch_u = std::max<coord_t>(1, coord_t(bc.brim_flow.scaled_spacing() * bc.frame.cos_tilt()));
|
||||
bc.in_plane_pitch = unscale<double>(bc.pitch_u) * bc.frame.u_stretch();
|
||||
{
|
||||
const BoundingBox fbb = get_extents(footprint);
|
||||
const bool low_side = bc.frame.shear > 0.;
|
||||
bc.u_anchor = bc.frame.from_axis == 0 ? (low_side ? fbb.min.x() : fbb.max.x())
|
||||
: (low_side ? fbb.min.y() : fbb.max.y());
|
||||
}
|
||||
|
||||
// 4. Bands coincident with an object layer.
|
||||
std::vector<ExtrusionEntityCollection> by_layer(nlayers);
|
||||
std::vector<ExPolygons> areas_by_layer(nlayers);
|
||||
for (size_t i = 0; i < nlayers; ++ i) {
|
||||
const Layer &layer = *object.layers()[i];
|
||||
const Polygons obstacles = belt_brim_obstacles(print, object, bc.region_bbox, layer.print_z, 0.5 * layer.height);
|
||||
belt_brim_band_paths(bc, layer.print_z, layer.height, obstacles, by_layer[i], areas_by_layer[i]);
|
||||
}
|
||||
|
||||
// 5. Apron prologue: the part of the region downhill of the object's first
|
||||
// layer, which has no object layer to ride on.
|
||||
std::vector<BeltBrimBand> prologue;
|
||||
{
|
||||
const Layer &first = *object.layers().front();
|
||||
const coordf_t h = first.height;
|
||||
const bool low_side = bc.frame.shear > 0.;
|
||||
const coord_t u_lead_s = bc.frame.from_axis == 0
|
||||
? (low_side ? bc.region_bbox.min.x() : bc.region_bbox.max.x())
|
||||
: (low_side ? bc.region_bbox.min.y() : bc.region_bbox.max.y());
|
||||
const coordf_t u_lead = unscale<double>(u_lead_s);
|
||||
// print_z at which the belt surface crosses the region's leading edge.
|
||||
const coordf_t z_lead = bc.ctx.shear_factor() * u_lead
|
||||
+ bc.ctx.floor_offset() + bc.ctx.z_shift();
|
||||
if (h > EPSILON)
|
||||
for (coordf_t z = first.print_z - h; z > z_lead - h; z -= h) {
|
||||
const Polygons obstacles = belt_brim_obstacles(print, object, bc.region_bbox, z, 0.5 * h);
|
||||
BeltBrimBand band;
|
||||
band.print_z = z;
|
||||
band.height = h;
|
||||
belt_brim_band_paths(bc, z, h, obstacles, band.fills, band.areas);
|
||||
if (! band.fills.empty())
|
||||
prologue.emplace_back(std::move(band));
|
||||
}
|
||||
// Lowest Z first, so collect_layers_to_print sees them in print order.
|
||||
std::reverse(prologue.begin(), prologue.end());
|
||||
}
|
||||
|
||||
object.set_belt_brim(std::move(by_layer), std::move(areas_by_layer), std::move(prologue));
|
||||
}
|
||||
|
||||
} // namespace Slic3r
|
||||
@@ -0,0 +1,178 @@
|
||||
#ifndef slic3r_BeltBrim_hpp_
|
||||
#define slic3r_BeltBrim_hpp_
|
||||
|
||||
#include "ExPolygon.hpp"
|
||||
#include "ExtrusionEntityCollection.hpp"
|
||||
#include "Point.hpp"
|
||||
#include "Polyline.hpp"
|
||||
#include "libslic3r.h"
|
||||
|
||||
#include <cmath>
|
||||
#include <vector>
|
||||
|
||||
// Belt-printer brim geometry.
|
||||
//
|
||||
// A belt printer slices in a ROTATED frame, so the belt surface is not the
|
||||
// Z=0 bed plane but a tilted plane in slicing space:
|
||||
//
|
||||
// z_slicing(u) = shear * u + floor_offset + z_shift, u = X or Y
|
||||
//
|
||||
// where `shear == tan(tilt)` (SlicingParameters::belt_floor_shear_factor) and
|
||||
// the axis is selected by SlicingParameters::belt_floor_from_axis. See
|
||||
// Support/BeltFloorContext.hpp for the canonical accessors.
|
||||
//
|
||||
// Consequences that drive everything in this file:
|
||||
//
|
||||
// * A horizontal slicing layer touches the belt only along a narrow strip at
|
||||
// its leading edge, `layer_height / shear` wide (~0.2 mm at 45 degrees).
|
||||
// The object's belt footprint - its bottom face - is therefore spread over
|
||||
// every layer, not contained in layer 0.
|
||||
// * Distances measured in slicing XY are NOT on-belt distances: moving `du`
|
||||
// along the shear axis travels `du / cos(tilt)` across the belt. So brim
|
||||
// offsets have to be taken in a "flattened" space where the shear axis is
|
||||
// stretched by `1 / cos(tilt)`, then mapped back.
|
||||
// * Brim ahead of the part (downhill) lies at slicing Z BELOW the object's
|
||||
// first layer, because the object's layer 0 is precisely its leading
|
||||
// contact with the belt.
|
||||
//
|
||||
// Everything here is pure geometry on ExPolygons/Polylines so it can be unit
|
||||
// tested without a Print. Keep user-visible strings out of this file: it is
|
||||
// not listed in localization/i18n/list.txt.
|
||||
|
||||
namespace Slic3r {
|
||||
|
||||
// Tilt window within which the BELT plane, not the bed plane, is the adhesion
|
||||
// surface. Below ~1 degree a belt is a flat bed as far as adhesion goes, and the
|
||||
// contact band would be layer_height/sin(tilt) - tens of millimetres - so the
|
||||
// ordinary plate brim is both correct and cheaper. Above ~85 degrees the whole
|
||||
// brim compresses into a sliver and is not worth generating.
|
||||
inline constexpr double BELT_BRIM_MIN_TILT_DEG = 1.;
|
||||
inline constexpr double BELT_BRIM_MAX_TILT_DEG = 85.;
|
||||
|
||||
// Description of the tilted belt plane, reduced to what the brim geometry needs.
|
||||
struct BeltBrimFrame
|
||||
{
|
||||
// tan(tilt). Sign selects which way is downhill.
|
||||
double shear = 0.;
|
||||
// 0 = X, 1 = Y. Matches BeltFloorContext::from_axis().
|
||||
int from_axis = 1;
|
||||
|
||||
// 1 / cos(tilt). Stretch factor that turns a projected distance along
|
||||
// `from_axis` into the true distance travelled across the belt.
|
||||
double u_stretch() const { return std::sqrt(1. + shear * shear); }
|
||||
// cos(tilt). The inverse mapping.
|
||||
double cos_tilt() const { return 1. / this->u_stretch(); }
|
||||
// Downhill is where the belt surface is lower, i.e. printed earlier, i.e.
|
||||
// the leading edge of the part. For shear > 0 that is -u.
|
||||
int downhill_sign() const { return shear > 0. ? -1 : +1; }
|
||||
};
|
||||
|
||||
// Scale only the `from_axis` component by `factor`, rounding to nearest.
|
||||
//
|
||||
// Deliberately not MultiPoint::scale(fx, fy) / ExPolygon::scale(fx, fy): those
|
||||
// truncate toward zero, which is asymmetric about the origin and loses up to a
|
||||
// full coordinate unit per vertex on every round trip.
|
||||
ExPolygons belt_scale_u(const ExPolygons &src, const BeltBrimFrame &frame, double factor);
|
||||
Polylines belt_scale_u(const Polylines &src, const BeltBrimFrame &frame, double factor);
|
||||
|
||||
// Into / out of the space where Euclidean offsets equal true on-belt distances.
|
||||
inline ExPolygons belt_flatten(const ExPolygons &src, const BeltBrimFrame &frame)
|
||||
{ return belt_scale_u(src, frame, frame.u_stretch()); }
|
||||
inline ExPolygons belt_unflatten(const ExPolygons &src, const BeltBrimFrame &frame)
|
||||
{ return belt_scale_u(src, frame, frame.cos_tilt()); }
|
||||
|
||||
// Minkowski sum of `src` with the segment [0, t]: the region swept by sliding
|
||||
// `src` along t. Used to grow the brim downhill for "extra brim width".
|
||||
//
|
||||
// Implemented as union_(P, P + t, {parallelogram per boundary edge}) over ALL
|
||||
// contours including holes, with every parallelogram forced counter-clockwise
|
||||
// so the non-zero fill rule closes holes narrower than t along the sweep
|
||||
// direction. A hole survives exactly when it is wider than |t| measured along
|
||||
// t - not when it is wider in its narrowest Euclidean direction.
|
||||
ExPolygons sweep_ex(const ExPolygons &src, const Point &t);
|
||||
|
||||
// "Leading edge only": keep the part of a brim region (unflattened, slicing XY)
|
||||
// at or downhill of the object's first contact with the belt, so the part is
|
||||
// supported as it lands and nothing is printed alongside it afterwards. `u_cut`
|
||||
// is the uphill edge of the first layer's contact band along `frame.from_axis`,
|
||||
// in mm (BeltFloorContext::cutoff_u of the first layer); downhill is the side
|
||||
// `frame.downhill_sign()` points to.
|
||||
ExPolygons belt_brim_clip_leading_edge(const ExPolygons ®ion, const BeltBrimFrame &frame, coordf_t u_cut);
|
||||
|
||||
// Brim region for one already-flattened belt footprint. All lengths are scaled
|
||||
// and measured in the flattened (true on-belt) metric.
|
||||
//
|
||||
// `has_outer` / `has_inner` are the resolved BrimType: belt printers collapse
|
||||
// Auto / Mouse ear / Painted to outer-only, so the caller does that mapping and
|
||||
// this function never needs PrintConfig.
|
||||
//
|
||||
// Two directional extras are applied to the footprint before the outer offset, so
|
||||
// each one buys reach in one direction only:
|
||||
//
|
||||
// `leading` (leading_brim_length) sweeps the footprint DOWNHILL along the belt,
|
||||
// so every leading-facing edge gains an apron ahead of it.
|
||||
// `lateral` (extra_brim_width) sweeps it BOTH WAYS across the belt, widening
|
||||
// the brim sideways without pushing it further ahead or behind.
|
||||
//
|
||||
// Neither is applied to the inner (hole) ring.
|
||||
ExPolygons belt_brim_region(const ExPolygons &footprint_flat,
|
||||
bool has_outer,
|
||||
bool has_inner,
|
||||
coord_t brim_width,
|
||||
coord_t object_gap,
|
||||
coord_t leading,
|
||||
coord_t lateral,
|
||||
const BeltBrimFrame &frame);
|
||||
|
||||
// Brim line positions for one layer band.
|
||||
//
|
||||
// Lines sit on a fixed lattice `u_anchor + k * pitch_u` so the on-belt spacing
|
||||
// between neighbouring brim lines is constant regardless of how the lattice
|
||||
// falls across layer bands. Snapping to band centres instead would quantise
|
||||
// the spacing to whole bands and under-deposit by ~35% at 45 degrees.
|
||||
//
|
||||
// The band is half-open, [u_lo, u_hi), so every lattice point belongs to
|
||||
// exactly one band: none duplicated at a boundary, none dropped. A band
|
||||
// narrower than the pitch simply yields nothing; a band much wider (shallow
|
||||
// tilt) yields several lines.
|
||||
std::vector<coord_t> belt_brim_line_positions(coord_t u_lo,
|
||||
coord_t u_hi,
|
||||
coord_t pitch_u,
|
||||
coord_t u_anchor);
|
||||
|
||||
// ---------------------------------------------------------------- pipeline
|
||||
|
||||
// One brim-only layer printed BEFORE the object's first layer, carrying the
|
||||
// apron that has to be stuck to the belt ahead of the part.
|
||||
//
|
||||
// Deliberately not a Layer subclass. A synthetic Layer would inherit id()
|
||||
// semantics that leak into initial-layer temperature selection, the spiral vase
|
||||
// probe, gradual interpolation, avoid-crossing-perimeters and cooling, all of
|
||||
// which key off Layer::id() == 0 or off a layer's regions. A plain record
|
||||
// carries only what the emitter needs.
|
||||
//
|
||||
// `height` is the LAYER height, used for the Z move and ordering metadata only.
|
||||
// Each extrusion path inside `fills` carries its own height, equal to that
|
||||
// line's nozzle-to-belt clearance, which varies across the band.
|
||||
struct BeltBrimBand
|
||||
{
|
||||
coordf_t print_z = 0.;
|
||||
coordf_t height = 0.;
|
||||
// erBrim paths in the object's local slicing frame, untranslated.
|
||||
ExtrusionEntityCollection fills;
|
||||
// Footprint of those paths, for the first-layer convex hull / bbox.
|
||||
ExPolygons areas;
|
||||
};
|
||||
|
||||
class PrintObject;
|
||||
|
||||
// Generate the belt brim for one object: fills its per-object-layer bands and
|
||||
// its apron prologue. No-op unless PrintObject::has_belt_brim().
|
||||
//
|
||||
// Runs inside posSupportMaterial rather than the brim step, because the prologue
|
||||
// print_z values must exist before ToolOrdering is built at psWipeTower.
|
||||
void make_belt_brim(PrintObject &object);
|
||||
|
||||
} // namespace Slic3r
|
||||
|
||||
#endif // slic3r_BeltBrim_hpp_
|
||||
@@ -0,0 +1,73 @@
|
||||
#include "BeltGCode.hpp"
|
||||
#include "GCodeWriter.hpp"
|
||||
#include "GCode/BeltKinematics.hpp"
|
||||
#include "BeltTransform.hpp"
|
||||
#include "Print.hpp"
|
||||
#include "Point.hpp"
|
||||
#include "PrintConfig.hpp"
|
||||
#include "libslic3r.h"
|
||||
#include <cstdlib>
|
||||
|
||||
namespace Slic3r {
|
||||
|
||||
void BeltGCode::init_belt_writer(Print &print)
|
||||
{
|
||||
// Axis remap and build volume max are set by base GCode after init_belt_writer
|
||||
// returns; set_kinematics() replays them, so install order does not matter.
|
||||
install_belt_kinematics(m_writer, print.config());
|
||||
m_writer.set_force_normal_lift(true);
|
||||
}
|
||||
|
||||
void BeltGCode::write_belt_header(GCodeOutputStream &file, const Print &print)
|
||||
{
|
||||
const auto &full_cfg = print.full_print_config();
|
||||
// Slicing rotation: the belt tilt (axis + angle) and the single source of truth
|
||||
// for the physical tilt the G-code viewer uses to enable belt view.
|
||||
file.write_format("; belt_slice_rotation = %s\n", full_cfg.opt_serialize("belt_slice_rotation").c_str());
|
||||
file.write_format("; belt_slice_rotation_angle = %.1f\n", print.config().belt_slice_rotation_angle.value);
|
||||
file.write_format("; belt_slice_rotation_global = %d\n", print.config().belt_slice_rotation_global.value ? 1 : 0);
|
||||
// Pre-slice remap configs
|
||||
file.write_format("; preslice_remap_x = %s\n", full_cfg.opt_serialize("preslice_remap_x").c_str());
|
||||
file.write_format("; preslice_remap_y = %s\n", full_cfg.opt_serialize("preslice_remap_y").c_str());
|
||||
file.write_format("; preslice_remap_z = %s\n", full_cfg.opt_serialize("preslice_remap_z").c_str());
|
||||
file.write_format("; preslice_remap_global = %d\n", print.config().preslice_remap_global.value ? 1 : 0);
|
||||
file.write_format("; belt_preslice_global = %d\n", print.config().belt_preslice_global.value ? 1 : 0);
|
||||
// Machine-frame transform: shear (tan) + scale (1/cos) derived from the belt
|
||||
// tilt angle (or belt_frame_tilt_angle when decoupled).
|
||||
file.write_format("; belt_frame_tilt_decouple = %d\n", print.config().belt_frame_tilt_decouple.value ? 1 : 0);
|
||||
file.write_format("; belt_frame_tilt_angle = %.1f\n", print.config().belt_frame_tilt_angle.value);
|
||||
}
|
||||
|
||||
void BeltGCode::on_set_origin(const PrintObject * /*obj*/, const Point & /*inst_shift*/)
|
||||
{
|
||||
// Global pre-slice mode: adjust origin using computed correction.
|
||||
// Transform the origin through the belt pipeline so that
|
||||
// back_transform(T * origin) = origin (correct machine position).
|
||||
//
|
||||
// Flags that trigger this path:
|
||||
// belt_preslice_global — full pipeline (rotation * remap) is global
|
||||
// preslice_remap_global — only the pre-slice remap is global
|
||||
// belt_slice_rotation_global — slicing rotation treated as global (matches
|
||||
// the per-instance Z-offset added in PrintObjectSlice.cpp)
|
||||
// The XY origin adjustment uses the FULL forward transform, because the
|
||||
// back_transform applied during G-code emission is always the inverse of
|
||||
// the full pipeline.
|
||||
bool use_global = m_config.belt_preslice_global.value
|
||||
|| (m_config.preslice_remap_global.value
|
||||
&& BeltTransformPipeline::has_preslice_remap(m_config))
|
||||
|| (m_config.belt_slice_rotation_global.value
|
||||
&& m_config.belt_slice_rotation.value != BeltRotationAxis::None
|
||||
&& std::abs(m_config.belt_slice_rotation_angle.value) > EPSILON);
|
||||
if (!use_global)
|
||||
return;
|
||||
|
||||
// Adjust origin: transform through belt forward pipeline so that
|
||||
// the back-transform correctly recovers model-space positions.
|
||||
Transform3d T = BeltTransformPipeline::build_forward_transform(m_config);
|
||||
Vec2d cur_origin = this->origin();
|
||||
Vec3d origin3d(cur_origin.x(), cur_origin.y(), 0.);
|
||||
Vec3d adjusted = T.linear() * origin3d;
|
||||
this->set_origin(Vec2d(adjusted.x(), adjusted.y()));
|
||||
}
|
||||
|
||||
} // namespace Slic3r
|
||||
@@ -0,0 +1,25 @@
|
||||
#pragma once
|
||||
|
||||
#include "GCode.hpp"
|
||||
#include "Point.hpp"
|
||||
#include "Print.hpp"
|
||||
|
||||
namespace Slic3r {
|
||||
|
||||
// Belt-printer-specific GCode export.
|
||||
//
|
||||
// Inherits from GCode and overrides virtual hooks to:
|
||||
// - Install a BeltKinematics on the GCodeWriter
|
||||
// - Write belt configuration to the G-code header
|
||||
// - Adjust the origin for global pre-slice transforms when switching instances
|
||||
// (Arc fitting is disabled for belt printers by BeltKinematics::supports_arc_moves(),
|
||||
// which the base GCode::should_disable_arc_fitting() consults -- no override needed.)
|
||||
class BeltGCode : public GCode
|
||||
{
|
||||
protected:
|
||||
void init_belt_writer(Print &print) override;
|
||||
void write_belt_header(GCodeOutputStream &file, const Print &print) override;
|
||||
void on_set_origin(const PrintObject *obj, const Point &inst_shift) override;
|
||||
};
|
||||
|
||||
} // namespace Slic3r
|
||||
@@ -0,0 +1,433 @@
|
||||
// ORCA-Belt: backend of the belt purge tower (the belt replacement for the
|
||||
// classic wipe/prime tower).
|
||||
//
|
||||
// Kept in its own translation unit so the belt-purge logic stays out of the way
|
||||
// of unrelated upstream changes to Print.cpp / PrintObjectSlice.cpp and carries
|
||||
// no regression risk for normal printers: none of these methods do anything
|
||||
// unless the print is a belt printer with the belt purge tower enabled.
|
||||
//
|
||||
// Print::has_belt_purge_tower() - is the belt purge tower active?
|
||||
// Print::_align_belt_purge_layers() - snap the prism's layer grid onto the
|
||||
// printed objects' grid
|
||||
// Print::_plan_belt_purge() - route filament-change purging into the
|
||||
// prism (flush-into-objects), no wipe tower
|
||||
// PrintObject::belt_shift_layer_grid() - shift a sliced layer grid
|
||||
// PrintObject::belt_truncate_layers_above() - cancel the prism past the last swap
|
||||
//
|
||||
// (Declarations live in Print.hpp alongside the rest of the Print interface.)
|
||||
|
||||
#include "Print.hpp"
|
||||
#include "PrintConfig.hpp"
|
||||
#include "Exception.hpp"
|
||||
#include "GCode/ToolOrdering.hpp"
|
||||
#include "Layer.hpp"
|
||||
#include "ExtrusionEntity.hpp"
|
||||
#include "ExtrusionEntityCollection.hpp"
|
||||
#include "I18N.hpp"
|
||||
#include "format.hpp"
|
||||
#include "LocalesUtils.hpp"
|
||||
#include "libslic3r.h"
|
||||
#include "BeltBrim.hpp"
|
||||
#include "PrintBase.hpp"
|
||||
|
||||
#include <algorithm>
|
||||
#include <cmath>
|
||||
#include <limits>
|
||||
|
||||
#include <boost/log/trivial.hpp>
|
||||
#include <cassert>
|
||||
#include <cstddef>
|
||||
#include <functional>
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
namespace Slic3r {
|
||||
|
||||
// Belt purge prism: purging after filament changes is routed into a sliced
|
||||
// prism object via the flush-into-objects machinery instead of a wipe tower.
|
||||
bool Print::has_belt_purge_tower() const
|
||||
{
|
||||
// Its own purge-tower "type", gated by the belt-only enable_belt_purge_tower
|
||||
// option (not the classic enable_prime_tower).
|
||||
if (!(m_config.belt_printer.value
|
||||
&& m_config.enable_belt_purge_tower.value
|
||||
&& !m_config.spiral_mode.value
|
||||
&& m_config.filament_diameter.values.size() > 1))
|
||||
return false;
|
||||
|
||||
return std::any_of(m_objects.begin(), m_objects.end(), [](const PrintObject *object) {
|
||||
return object->config().belt_purge_tower_object.value;
|
||||
});
|
||||
}
|
||||
|
||||
// Belt mode: align ALL objects on the plate (the printed objects AND the purge
|
||||
// prism) onto one common layer grid, so the prism can absorb every toolchange.
|
||||
//
|
||||
// After belt slicing each object's layer print_z carries a per-object global z
|
||||
// offset (mesh-vertex-scan belt_z_shift + instance-Y-dependent terms), so
|
||||
// objects at different belt-Y positions get layer grids with DIFFERENT residues
|
||||
// (mod layer height). Purge marking looks absorbers up with
|
||||
// get_layer_at_printz(lt.print_z, EPSILON), so a toolchange on object B only
|
||||
// absorbs into the prism if the prism has a layer at B's print_z. Snapping only
|
||||
// the prism to one object therefore worked for a single (assembled) multi-color
|
||||
// object but failed with multiple separate objects — the prism could follow only
|
||||
// one grid, and toolchanges on the others went unabsorbed ("multiple layer
|
||||
// grids" warning).
|
||||
//
|
||||
// Fix: pick one reference grid (the tallest object) and shift every object onto
|
||||
// it. Each shift is at most half a layer height — a sub-100µm move along the
|
||||
// belt, the very same mechanism the per-object global_z_offset already uses, and
|
||||
// it keeps each object internally consistent (belt_shift_layer_grid moves the
|
||||
// object's layers, its support layers, and its belt floor together). Equal layer
|
||||
// height across objects is enforced by Print::validate(), so once residues match
|
||||
// every object steps on the same lattice {ref_offset + k*h} and every toolchange
|
||||
// layer coincides with a prism layer.
|
||||
void Print::_align_belt_purge_layers()
|
||||
{
|
||||
PrintObject *prism = nullptr;
|
||||
for (PrintObject *po : m_objects)
|
||||
if (po->config().belt_purge_tower_object.value && !po->layers().empty()) {
|
||||
prism = po;
|
||||
break;
|
||||
}
|
||||
if (prism == nullptr || prism->layers().empty())
|
||||
return;
|
||||
|
||||
const double h = prism->config().layer_height.value;
|
||||
if (h <= EPSILON)
|
||||
return;
|
||||
|
||||
// Grid residue of an object's layer grid: identical for all of an object's
|
||||
// layers above the first since they step by h.
|
||||
auto grid_offset = [h](const PrintObject *po) -> double {
|
||||
if (po->layers().empty())
|
||||
return 0.;
|
||||
const double z = po->layers().front()->print_z;
|
||||
return z - std::floor(z / h) * h; // in [0, h)
|
||||
};
|
||||
|
||||
// Reference grid: the tallest non-prism object (proxy for the object with
|
||||
// the most toolchange layers — minimizes how far the rest must move).
|
||||
const PrintObject *ref = nullptr;
|
||||
double ref_top = -std::numeric_limits<double>::max();
|
||||
for (const PrintObject *po : m_objects) {
|
||||
if (po->config().belt_purge_tower_object.value || po->layers().empty())
|
||||
continue;
|
||||
const double top = po->layers().back()->print_z;
|
||||
if (top > ref_top) {
|
||||
ref_top = top;
|
||||
ref = po;
|
||||
}
|
||||
}
|
||||
if (ref == nullptr)
|
||||
return;
|
||||
|
||||
const double ref_offset = grid_offset(ref);
|
||||
|
||||
// Snap every object (printed objects AND the prism) onto the reference grid.
|
||||
for (PrintObject *po : m_objects) {
|
||||
if (po->layers().empty())
|
||||
continue;
|
||||
double delta = ref_offset - grid_offset(po);
|
||||
if (delta > 0.5 * h)
|
||||
delta -= h;
|
||||
else if (delta <= -0.5 * h)
|
||||
delta += h;
|
||||
po->belt_shift_layer_grid(delta); // no-op for the reference object (delta ~ 0)
|
||||
}
|
||||
}
|
||||
|
||||
// Belt mode replacement for _make_wipe_tower(): plan filament-change purging
|
||||
// into the belt purge prism (and any other flush_into_* object) using the
|
||||
// flush-into-objects machinery, without generating classic wipe tower G-code.
|
||||
// The toolchange itself is emitted by GCode::set_extruder() via the
|
||||
// change_filament_gcode macro; the overrides marked here make the new
|
||||
// filament's first extrusions land in the purge prism.
|
||||
void Print::_plan_belt_purge()
|
||||
{
|
||||
m_wipe_tower_data.clear();
|
||||
|
||||
// psWipeTower may be invalidated without posSlice (for example after a
|
||||
// filament-map or tool-ordering change). Restore a prism shortened by the
|
||||
// previous plan so a newly higher toolchange can use its original layers.
|
||||
for (PrintObject *po : m_objects)
|
||||
if (po->config().belt_purge_tower_object.value)
|
||||
po->belt_undo_purge_plan();
|
||||
|
||||
// Must run before ToolOrdering is built: LayerTools merge per-object layer
|
||||
// print_z values, and the prism only absorbs purge where its (snapped)
|
||||
// layers coincide with the toolchange layers.
|
||||
this->_align_belt_purge_layers();
|
||||
|
||||
const unsigned int number_of_extruders = (unsigned int) m_config.filament_colour.values.size();
|
||||
|
||||
// No initial priming extrusions: there is no tower to prime on.
|
||||
m_wipe_tower_data.tool_ordering = ToolOrdering(*this, (unsigned int) -1, false);
|
||||
m_wipe_tower_data.tool_ordering.sort_and_build_data(*this, (unsigned int) -1, false);
|
||||
|
||||
if (m_wipe_tower_data.tool_ordering.empty() || m_wipe_tower_data.tool_ordering.last_extruder() == unsigned(-1))
|
||||
throw Slic3r::SlicingError("The print is empty. The model is not printable with current print settings.");
|
||||
|
||||
// Is there any filament change at all? Not ToolOrdering::has_wipe_tower(): that reads the
|
||||
// FIRST layer's flag, and on a belt the first layer may be a brim apron band, which carries
|
||||
// neither object nor support and so never gets the flag even when the print changes filament.
|
||||
{
|
||||
bool any_change = false;
|
||||
unsigned int cur = m_wipe_tower_data.tool_ordering.first_extruder();
|
||||
for (const auto < : m_wipe_tower_data.tool_ordering.layer_tools())
|
||||
for (const unsigned int e : lt.extruders)
|
||||
if (e != cur) { any_change = true; cur = e; }
|
||||
if (! any_change)
|
||||
return;
|
||||
}
|
||||
|
||||
this->throw_if_canceled();
|
||||
|
||||
// Flush volumes per filament pair, mirroring the generic wipe tower path:
|
||||
// full flush matrix for single extruder multi material with purging enabled,
|
||||
// plain prime volume otherwise.
|
||||
std::vector<float> flush_matrix(cast<float>(
|
||||
get_flush_volumes_matrix(m_config.flush_volumes_matrix.values, 0, m_config.nozzle_diameter.values.size())));
|
||||
std::vector<std::vector<float>> wipe_volumes;
|
||||
for (unsigned int i = 0; i < number_of_extruders; ++i)
|
||||
wipe_volumes.push_back(std::vector<float>(flush_matrix.begin() + i * number_of_extruders,
|
||||
flush_matrix.begin() + (i + 1) * number_of_extruders));
|
||||
const bool use_flush_matrix = m_config.purge_in_prime_tower && m_config.single_extruder_multi_material;
|
||||
const float flush_multiplier = (float) m_config.flush_multiplier.get_at(0);
|
||||
|
||||
// Cancel the purge prism early: pre-scan the tool ordering for the highest
|
||||
// print_z that actually has a toolchange, then drop the prism's layers above
|
||||
// it so the tower stops at the last color swap (saves filament/time). This
|
||||
// MUST happen before the marking loop below: ensure_perimeters_infills_order
|
||||
// force-overrides the prism's extrusions on every layer (it is a dedicated
|
||||
// flush object), so truncating afterwards would leave dangling overrides
|
||||
// pointing into deleted layers.
|
||||
{
|
||||
// The tool ordering covers the WHOLE print, and the prism is a printed
|
||||
// object in it. Left unbounded, the scan below sees the prism's own
|
||||
// toolchanges on layers above every model object -- the prism runs past
|
||||
// them by design (ramp/height compensation at the tilted ends) -- so
|
||||
// last_tc_z lands at the prism's own top and the truncation cancels
|
||||
// nothing. The tower ends up justifying its own existence.
|
||||
//
|
||||
// Nothing above the tallest printed object can require a color change,
|
||||
// so bound the scan there. On MCTEST5 that is 197 toolchanges spanning
|
||||
// z=154.00..193.20 with the tallest object topping out at 153.80, i.e.
|
||||
// 39.4 mm of tower that no swap ever needed.
|
||||
// Support layers count too: on a belt they can extend above the object's
|
||||
// own top, and a toolchange there is a real one.
|
||||
double obj_top_z = -1.;
|
||||
for (const PrintObject *po : m_objects) {
|
||||
if (po->config().belt_purge_tower_object.value)
|
||||
continue;
|
||||
if (!po->layers().empty())
|
||||
obj_top_z = std::max(obj_top_z, po->layers().back()->print_z);
|
||||
if (!po->support_layers().empty())
|
||||
obj_top_z = std::max(obj_top_z, po->support_layers().back()->print_z);
|
||||
}
|
||||
|
||||
double last_tc_z = -1.;
|
||||
unsigned int cur_ext = m_wipe_tower_data.tool_ordering.first_extruder();
|
||||
for (const auto < : m_wipe_tower_data.tool_ordering.layer_tools()) {
|
||||
// layer_tools() is ordered by print_z ascending.
|
||||
if (obj_top_z >= 0. && lt.print_z > obj_top_z + EPSILON)
|
||||
break;
|
||||
for (const unsigned int e : lt.extruders)
|
||||
if (e != cur_ext) { last_tc_z = lt.print_z; cur_ext = e; }
|
||||
}
|
||||
// Deliberately NOT cancelling the prism outright when no object toolchange
|
||||
// exists: belt_truncate_layers_above(0.) empties m_layers, and an object
|
||||
// with zero layers is not something the rest of the pipeline expects. The
|
||||
// GUI already declines to create a prism unless more than one filament is
|
||||
// in use, so this case is a stale prism, not a hot path -- leave it whole
|
||||
// rather than risk a zero-layer object.
|
||||
if (last_tc_z >= 0.)
|
||||
for (PrintObject *po : m_objects)
|
||||
if (po->config().belt_purge_tower_object.value && !po->layers().empty()) {
|
||||
po->belt_truncate_layers_above(last_tc_z);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// The prism only absorbs purge at toolchange layers whose print_z coincides
|
||||
// with one of its own layers.
|
||||
PrintObject *prism_po = nullptr;
|
||||
for (PrintObject *po : m_objects)
|
||||
if (po->config().belt_purge_tower_object.value && !po->layers().empty()) { prism_po = po; break; }
|
||||
|
||||
float total_leftover = 0.f;
|
||||
float worst_layer_leftover = 0.f;
|
||||
double worst_layer_z = 0.;
|
||||
|
||||
unsigned int current_extruder_id = m_wipe_tower_data.tool_ordering.first_extruder();
|
||||
for (auto &layer_tools : m_wipe_tower_data.tool_ordering.layer_tools()) {
|
||||
float layer_leftover = 0.f;
|
||||
for (const unsigned int extruder_id : layer_tools.extruders) {
|
||||
if (extruder_id == current_extruder_id)
|
||||
continue;
|
||||
float volume_to_wipe = use_flush_matrix ?
|
||||
wipe_volumes[current_extruder_id][extruder_id] * flush_multiplier :
|
||||
(float) m_config.prime_volume;
|
||||
float leftover = layer_tools.wiping_extrusions().mark_wiping_extrusions(*this, current_extruder_id, extruder_id,
|
||||
volume_to_wipe);
|
||||
layer_leftover += leftover;
|
||||
current_extruder_id = extruder_id;
|
||||
}
|
||||
|
||||
// Plastic saving: drop the prism's fills that no toolchange on this layer
|
||||
// claimed. At this point the prism's OVERRIDDEN fills are exactly the
|
||||
// purge; the rest would print as solid infill in the prism's own filament
|
||||
// for nothing -- which is the whole prism on a layer with no toolchange
|
||||
// (141 of 692 layers on MCTEST5 before the truncation fix). Perimeters are
|
||||
// left alone so the bar keeps a continuous wall along the belt.
|
||||
//
|
||||
// Non-destructive: the entities are stashed with their positions and put
|
||||
// back by belt_restore_dropped_fills() at the top of the next plan. An
|
||||
// earlier version deleted them outright, which broke replanning when a
|
||||
// later tool ordering needed what this one had not claimed -- that is why
|
||||
// it was removed rather than kept.
|
||||
if (prism_po != nullptr) {
|
||||
const auto &we = layer_tools.wiping_extrusions();
|
||||
prism_po->belt_drop_unclaimed_fills(
|
||||
prism_po->get_layer_at_printz(layer_tools.print_z, EPSILON),
|
||||
[&we, prism_po](const ExtrusionEntity *e) { return we.is_entity_overridden(e, prism_po, 0); });
|
||||
}
|
||||
|
||||
layer_tools.wiping_extrusions().ensure_perimeters_infills_order(*this);
|
||||
if (layer_leftover > 0.f) {
|
||||
total_leftover += layer_leftover;
|
||||
if (layer_leftover > worst_layer_leftover) {
|
||||
worst_layer_leftover = layer_leftover;
|
||||
worst_layer_z = layer_tools.print_z;
|
||||
}
|
||||
}
|
||||
this->throw_if_canceled();
|
||||
}
|
||||
|
||||
if (total_leftover > 1.f) {
|
||||
this->active_step_add_warning(
|
||||
PrintStateBase::WarningLevel::CRITICAL,
|
||||
Slic3r::format(_u8L("The belt purge tower cannot absorb the full purge volume: %1% mm³ in total could not "
|
||||
"be purged (worst layer: %2% mm³ at height %3%). The print may show color bleeding. "
|
||||
"Increase the belt purge tower width, or reduce flushing volumes."),
|
||||
int(std::ceil(total_leftover)), int(std::ceil(worst_layer_leftover)),
|
||||
Slic3r::float_to_string_decimal_point(worst_layer_z, 2)));
|
||||
}
|
||||
}
|
||||
|
||||
// Belt mode: shift the sliced layer grid by delta. Mirrors the global_z_offset
|
||||
// application in slice() — layer print_z and belt_floor_z_shift move together
|
||||
// so belt floor clipping stays consistent with the shifted grid. Used by
|
||||
// Print::_align_belt_purge_layers() to snap the purge prism onto the printed
|
||||
// objects' layer grid; |delta| <= half a layer height, i.e. a sub-layer shift
|
||||
// of the prism along the belt.
|
||||
void PrintObject::belt_shift_layer_grid(double delta)
|
||||
{
|
||||
if (std::abs(delta) < EPSILON)
|
||||
return;
|
||||
for (Layer *layer : m_layers)
|
||||
layer->print_z += delta;
|
||||
for (SupportLayer *layer : m_support_layers)
|
||||
layer->print_z += delta;
|
||||
// The brim's apron bands below the first layer carry their own print_z.
|
||||
for (BeltBrimBand &band : m_belt_brim_prologue)
|
||||
band.print_z += delta;
|
||||
m_slicing_params.belt_floor_z_shift += delta;
|
||||
// The grid stays shifted across a support-only or brim-only change (posSlice does
|
||||
// not rerun), so everything slice() derived from it has to follow: the cached floor
|
||||
// that update_slicing_parameters() restores, and the global offset the organic
|
||||
// support layers and the adaptive infill octree are placed with. Left alone, the
|
||||
// next alignment finds a delta of 0 and the floor and the supports sit up to half
|
||||
// a layer off the grid, unlike a fresh slice.
|
||||
if (m_belt_floor_z_shift_cache_valid)
|
||||
m_belt_floor_z_shift_cached += delta;
|
||||
m_belt_global_z_offset += delta;
|
||||
}
|
||||
|
||||
// Belt mode: drop layers strictly above z (used to cancel the purge prism early
|
||||
// once there are no more toolchanges above z, so the tower stops at the last
|
||||
// color swap instead of wasting filament up the rest of the belt). Each layer's
|
||||
// cross-section is already sliced, so removing upper layers does not affect the
|
||||
// last toolchange's coverage. Deletes the Layer objects and clears the new top
|
||||
// layer's upper-layer link. Returns the number of layers removed.
|
||||
size_t PrintObject::belt_truncate_layers_above(coordf_t z)
|
||||
{
|
||||
// A repeated plan always starts from the restored full layer set.
|
||||
assert(m_belt_truncated_layers.empty());
|
||||
size_t keep = m_layers.size();
|
||||
while (keep > 0 && m_layers[keep - 1]->print_z > z + EPSILON)
|
||||
--keep;
|
||||
if (keep >= m_layers.size())
|
||||
return 0;
|
||||
const size_t removed = m_layers.size() - keep;
|
||||
m_belt_truncated_layers.assign(m_layers.begin() + keep, m_layers.end());
|
||||
m_layers.resize(keep);
|
||||
if (!m_layers.empty())
|
||||
m_layers.back()->upper_layer = nullptr;
|
||||
return removed;
|
||||
}
|
||||
|
||||
// Plastic saving on the purge prism: keep only the fills a toolchange claimed.
|
||||
//
|
||||
// Called per layer from _plan_belt_purge(), after the real-purge marking and
|
||||
// BEFORE ensure_perimeters_infills_order() -- that pass force-overrides every
|
||||
// remaining fill on the prism (it is a dedicated flush object), so afterwards
|
||||
// everything looks claimed and nothing could be distinguished.
|
||||
size_t PrintObject::belt_drop_unclaimed_fills(Layer *layer, const std::function<bool(const ExtrusionEntity*)> &claimed)
|
||||
{
|
||||
if (layer == nullptr)
|
||||
return 0;
|
||||
size_t dropped = 0;
|
||||
for (size_t ri = 0; ri < layer->regions().size(); ++ri) {
|
||||
LayerRegion *lr = layer->get_region(ri);
|
||||
auto &ents = lr->fills.entities;
|
||||
ExtrusionEntitiesPtr keep;
|
||||
keep.reserve(ents.size());
|
||||
for (size_t i = 0; i < ents.size(); ++i) {
|
||||
if (claimed(ents[i])) {
|
||||
keep.emplace_back(ents[i]);
|
||||
} else {
|
||||
// Stash with its original index so the restore is exact.
|
||||
m_belt_dropped_fills.push_back(BeltDroppedFill{ layer, ri, i, ents[i] });
|
||||
++dropped;
|
||||
}
|
||||
}
|
||||
ents = std::move(keep);
|
||||
}
|
||||
return dropped;
|
||||
}
|
||||
|
||||
void PrintObject::belt_restore_dropped_fills()
|
||||
{
|
||||
if (m_belt_dropped_fills.empty())
|
||||
return;
|
||||
// Ascending index per (layer, region): inserting in that order lands every
|
||||
// entity back at its original position, because each insertion shifts only
|
||||
// the entries after it, which are themselves still to be inserted.
|
||||
std::stable_sort(m_belt_dropped_fills.begin(), m_belt_dropped_fills.end(),
|
||||
[](const BeltDroppedFill &a, const BeltDroppedFill &b) {
|
||||
if (a.layer != b.layer) return a.layer < b.layer;
|
||||
if (a.region_idx != b.region_idx) return a.region_idx < b.region_idx;
|
||||
return a.index < b.index;
|
||||
});
|
||||
for (const BeltDroppedFill &d : m_belt_dropped_fills) {
|
||||
auto &ents = d.layer->get_region(d.region_idx)->fills.entities;
|
||||
ents.insert(ents.begin() + std::min(d.index, ents.size()), d.entity);
|
||||
}
|
||||
m_belt_dropped_fills.clear();
|
||||
}
|
||||
|
||||
void PrintObject::belt_restore_truncated_layers()
|
||||
{
|
||||
if (m_belt_truncated_layers.empty())
|
||||
return;
|
||||
|
||||
m_layers.insert(m_layers.end(), m_belt_truncated_layers.begin(), m_belt_truncated_layers.end());
|
||||
m_belt_truncated_layers.clear();
|
||||
for (size_t i = 0; i < m_layers.size(); ++i) {
|
||||
m_layers[i]->lower_layer = i == 0 ? nullptr : m_layers[i - 1];
|
||||
m_layers[i]->upper_layer = i + 1 < m_layers.size() ? m_layers[i + 1] : nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace Slic3r
|
||||
@@ -0,0 +1,70 @@
|
||||
#include "BeltSliceStrategy.hpp"
|
||||
#include "Model.hpp"
|
||||
#include "BeltTransform.hpp"
|
||||
#include "Point.hpp"
|
||||
#include "PrintConfig.hpp"
|
||||
|
||||
#include <limits>
|
||||
#include <algorithm>
|
||||
|
||||
namespace Slic3r {
|
||||
|
||||
void BeltSliceStrategy::apply_preslice_transforms(Transform3d &trafo,
|
||||
const PrintConfig &config,
|
||||
const ModelVolumePtrs &model_volumes,
|
||||
double *out_belt_min_z)
|
||||
{
|
||||
// 1. Standalone pre-slice axis remap (works without belt mode).
|
||||
const bool has_remap = BeltTransformPipeline::has_preslice_remap(config);
|
||||
if (has_remap)
|
||||
trafo = BeltTransformPipeline::build_preslice_remap(config) * trafo;
|
||||
|
||||
// 2. Belt rotation — the sole mesh-side belt transform (matching
|
||||
// BeltTransformPipeline::build_forward_transform). Only active in
|
||||
// belt-printer mode.
|
||||
bool has_rotation = false;
|
||||
if (config.belt_printer.value) {
|
||||
const Matrix3d rot = BeltTransformPipeline::build_rotation_matrix(config, &has_rotation);
|
||||
if (has_rotation) {
|
||||
Transform3d belt_xform = Transform3d::Identity();
|
||||
belt_xform.linear() = rot;
|
||||
trafo = belt_xform * trafo;
|
||||
}
|
||||
}
|
||||
|
||||
if (!has_remap && !has_rotation)
|
||||
return;
|
||||
|
||||
// 3. Z-shift — detect if the mesh clips below the build plate after the
|
||||
// transforms and lift it. Each mesh vertex must be brought into object space
|
||||
// via mv->get_matrix() before applying the full trafo (which is in object
|
||||
// space). Missing this on assemblies (where per-volume get_matrix() positions
|
||||
// each volume within the object) would compute min_z against mesh-local vertex
|
||||
// coordinates rather than object-space coordinates, so volumes translated along
|
||||
// the slicer's Z axis would be silently excluded from the bound check.
|
||||
|
||||
double min_z = std::numeric_limits<double>::max();
|
||||
for (const ModelVolume *mv : model_volumes) {
|
||||
if (!mv->is_model_part()) continue;
|
||||
Transform3d vol_trafo = trafo * mv->get_matrix();
|
||||
const auto &its = mv->mesh().its;
|
||||
for (const stl_vertex &v : its.vertices) {
|
||||
Vec3d vm = v.cast<double>();
|
||||
Vec3d pt = vol_trafo * vm;
|
||||
min_z = std::min(min_z, pt.z());
|
||||
}
|
||||
}
|
||||
const double z_shift_val = (min_z < 0. && min_z != std::numeric_limits<double>::max()) ? -min_z : 0.;
|
||||
if (z_shift_val > 0.) {
|
||||
Transform3d z_shift = Transform3d::Identity();
|
||||
z_shift.matrix()(2, 3) = z_shift_val;
|
||||
trafo = z_shift * trafo;
|
||||
}
|
||||
// out_belt_min_z is only meaningful in belt mode; the standalone-remap path
|
||||
// never reported it.
|
||||
if (out_belt_min_z && config.belt_printer.value) {
|
||||
*out_belt_min_z = (min_z != std::numeric_limits<double>::max()) ? min_z : 0.;
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace Slic3r
|
||||
@@ -0,0 +1,36 @@
|
||||
#pragma once
|
||||
|
||||
#include "libslic3r.h"
|
||||
#include "Point.hpp"
|
||||
#include "BeltTransform.hpp"
|
||||
#include "PrintConfig.hpp"
|
||||
#include "Model.hpp"
|
||||
|
||||
namespace Slic3r {
|
||||
|
||||
// Belt printer / pre-slice transform strategy.
|
||||
//
|
||||
// Composes, in order, the pre-slice mesh transforms applied before slicing:
|
||||
// 1. Pre-slice axis remap (standalone — works without belt mode)
|
||||
// 2. Belt rotation (the sole mesh-side belt transform; shear & scale are a
|
||||
// g-code-side stage, see MachineFrameTransform)
|
||||
// 3. Per-object Z-shift that lifts the mesh above the build plate
|
||||
//
|
||||
// Isolates this belt/remap-specific logic from the generic slicing pipeline in
|
||||
// PrintObjectSlice.cpp.
|
||||
class BeltSliceStrategy
|
||||
{
|
||||
public:
|
||||
// Apply the pre-slice remap + belt rotation + Z-shift to `trafo` in place.
|
||||
// No-op when neither a remap nor a belt rotation is configured.
|
||||
//
|
||||
// out_belt_min_z (if non-null) receives the minimum mesh Z after the
|
||||
// transforms, but only in belt-printer mode — the standalone-remap path
|
||||
// never reported it.
|
||||
static void apply_preslice_transforms(Transform3d &trafo,
|
||||
const PrintConfig &config,
|
||||
const ModelVolumePtrs &model_volumes,
|
||||
double *out_belt_min_z = nullptr);
|
||||
};
|
||||
|
||||
} // namespace Slic3r
|
||||
@@ -0,0 +1,230 @@
|
||||
#include "BeltTransform.hpp"
|
||||
#include "Model.hpp"
|
||||
#include "BoundingBox.hpp"
|
||||
#include "Config.hpp"
|
||||
#include "Geometry.hpp"
|
||||
#include "Point.hpp"
|
||||
#include "PrintConfig.hpp"
|
||||
#include "libslic3r.h"
|
||||
|
||||
#include <limits>
|
||||
#include <algorithm>
|
||||
#include <cmath>
|
||||
#include <cstdlib>
|
||||
|
||||
namespace Slic3r {
|
||||
|
||||
// ---- Matrix builders ------------------------------------------------------
|
||||
|
||||
Transform3d BeltTransformPipeline::build_preslice_remap(const PrintConfig &config)
|
||||
{
|
||||
Transform3d pre_remap = Transform3d::Identity();
|
||||
if (!has_preslice_remap(config))
|
||||
return pre_remap;
|
||||
|
||||
int pre_rx = int(config.preslice_remap_x.value);
|
||||
int pre_ry = int(config.preslice_remap_y.value);
|
||||
int pre_rz = int(config.preslice_remap_z.value);
|
||||
|
||||
// Each remap value selects a source axis and sign.
|
||||
auto remap_column = [](int r) -> Vec3d {
|
||||
int axis = r % 3;
|
||||
Vec3d col = Vec3d::Zero();
|
||||
if (r < 3) col[axis] = 1.0; // +axis
|
||||
else if (r < 6) col[axis] = -1.0; // -axis
|
||||
else col[axis] = -1.0; // Rev: max - pos = -(pos - max)
|
||||
return col;
|
||||
};
|
||||
|
||||
Matrix3d remap_lin;
|
||||
remap_lin.col(0) = remap_column(pre_rx);
|
||||
remap_lin.col(1) = remap_column(pre_ry);
|
||||
remap_lin.col(2) = remap_column(pre_rz);
|
||||
pre_remap.linear() = remap_lin;
|
||||
|
||||
// Translation for Rev modes (needs build volume extents).
|
||||
if (pre_rx >= 6 || pre_ry >= 6 || pre_rz >= 6) {
|
||||
BoundingBoxf bbox_bed(config.printable_area.values);
|
||||
Vec3d vol_max(bbox_bed.max.x(), bbox_bed.max.y(),
|
||||
config.printable_height.value);
|
||||
Vec3d remap_trans = Vec3d::Zero();
|
||||
auto add_rev = [&](int r, int out) {
|
||||
if (r >= 6) remap_trans[out] = vol_max[r % 3];
|
||||
};
|
||||
add_rev(pre_rx, 0);
|
||||
add_rev(pre_ry, 1);
|
||||
add_rev(pre_rz, 2);
|
||||
pre_remap.translation() = remap_trans;
|
||||
}
|
||||
|
||||
return pre_remap;
|
||||
}
|
||||
|
||||
Matrix3d BeltTransformPipeline::build_rotation_matrix(const PrintConfig &config, bool *has_rot_out)
|
||||
{
|
||||
BeltRotationAxis axis = config.belt_slice_rotation.value;
|
||||
double angle_deg = config.belt_slice_rotation_angle.value;
|
||||
bool active = axis != BeltRotationAxis::None && std::abs(angle_deg) > EPSILON;
|
||||
if (has_rot_out) *has_rot_out = active;
|
||||
if (!active)
|
||||
return Matrix3d::Identity();
|
||||
double angle_rad = Geometry::deg2rad(angle_deg);
|
||||
Vec3d unit_axis;
|
||||
switch (axis) {
|
||||
case BeltRotationAxis::X: unit_axis = Vec3d::UnitX(); break;
|
||||
case BeltRotationAxis::Y: unit_axis = Vec3d::UnitY(); break;
|
||||
case BeltRotationAxis::Z: unit_axis = Vec3d::UnitZ(); break;
|
||||
default: return Matrix3d::Identity();
|
||||
}
|
||||
return Eigen::AngleAxisd(angle_rad, unit_axis).toRotationMatrix();
|
||||
}
|
||||
|
||||
Transform3d BeltTransformPipeline::build_forward_transform(const PrintConfig &config)
|
||||
{
|
||||
// Mesh-side belt transform: rotation applied after the pre-slice axis remap.
|
||||
// (Shear & scale are a g-code-side stage, not part of the mesh transform.)
|
||||
Transform3d pre_remap = build_preslice_remap(config);
|
||||
Matrix3d rot = build_rotation_matrix(config);
|
||||
|
||||
Transform3d combined = Transform3d::Identity();
|
||||
combined.linear() = rot;
|
||||
combined = combined * pre_remap;
|
||||
return combined;
|
||||
}
|
||||
|
||||
// ---- Bounding box remap ---------------------------------------------------
|
||||
|
||||
BoundingBoxf3 BeltTransformPipeline::remap_bbox(const BoundingBoxf3 &bb, const PrintConfig &config)
|
||||
{
|
||||
if (!has_preslice_remap(config))
|
||||
return bb; // Identity remap, or belt mode off.
|
||||
|
||||
int pre_rx = int(config.preslice_remap_x.value);
|
||||
int pre_ry = int(config.preslice_remap_y.value);
|
||||
int pre_rz = int(config.preslice_remap_z.value);
|
||||
|
||||
auto remap_coord = [](int r, const Vec3d &v) -> double {
|
||||
int axis = r % 3;
|
||||
if (r < 3) return v[axis];
|
||||
return -v[axis];
|
||||
};
|
||||
|
||||
Vec3d mn = bb.min.cast<double>(), mx = bb.max.cast<double>();
|
||||
BoundingBoxf3 rbb;
|
||||
for (int i = 0; i < 8; ++i) {
|
||||
Vec3d c((i & 1) ? mx.x() : mn.x(),
|
||||
(i & 2) ? mx.y() : mn.y(),
|
||||
(i & 4) ? mx.z() : mn.z());
|
||||
Vec3d rc(remap_coord(pre_rx, c), remap_coord(pre_ry, c), remap_coord(pre_rz, c));
|
||||
if (i == 0) rbb = BoundingBoxf3(rc, rc);
|
||||
else rbb.merge(rc);
|
||||
}
|
||||
return rbb;
|
||||
}
|
||||
|
||||
BoundingBoxf3 BeltTransformPipeline::remap_bbox(const ModelObject &model_object, const PrintConfig &config)
|
||||
{
|
||||
return remap_bbox(model_object.raw_bounding_box(), config);
|
||||
}
|
||||
|
||||
// ---- Belt floor parameters ------------------------------------------------
|
||||
|
||||
// Shared implementation for both PrintConfig and DynamicPrintConfig.
|
||||
// Template avoids duplicating the math for the two config types.
|
||||
namespace {
|
||||
|
||||
template<typename Config>
|
||||
BeltTransformPipeline::BeltHeightResult compute_belt_height_and_floor_impl(
|
||||
const Config &config, const BoundingBoxf3 &bb, double original_height)
|
||||
{
|
||||
BeltTransformPipeline::BeltHeightResult result;
|
||||
result.object_height = original_height;
|
||||
|
||||
// Extract the mesh rotation from config (the sole mesh-side belt transform).
|
||||
BeltRotationAxis rot_axis;
|
||||
double rot_angle;
|
||||
|
||||
if constexpr (std::is_same_v<Config, PrintConfig>) {
|
||||
rot_axis = config.belt_slice_rotation.value;
|
||||
rot_angle = config.belt_slice_rotation_angle.value;
|
||||
} else {
|
||||
// DynamicPrintConfig path
|
||||
auto get_float = [&](const char *key) {
|
||||
auto *opt = config.template option<ConfigOptionFloat>(key);
|
||||
return opt ? opt->value : 0.0;
|
||||
};
|
||||
auto get_rot_axis = [&](const char *key) {
|
||||
auto *opt = config.template option<ConfigOptionEnum<BeltRotationAxis>>(key);
|
||||
return opt ? opt->value : BeltRotationAxis::None;
|
||||
};
|
||||
rot_axis = get_rot_axis("belt_slice_rotation");
|
||||
rot_angle = get_float("belt_slice_rotation_angle");
|
||||
}
|
||||
|
||||
bool has_rotation = rot_axis != BeltRotationAxis::None && std::abs(rot_angle) > EPSILON;
|
||||
if (!has_rotation)
|
||||
return result;
|
||||
|
||||
// Rotation path: sweep the 8 bbox corners through R to get the rotated height,
|
||||
// then derive the belt floor (the image of machine-Z = 0 under R).
|
||||
double angle_rad = Geometry::deg2rad(rot_angle);
|
||||
Vec3d unit_axis;
|
||||
switch (rot_axis) {
|
||||
case BeltRotationAxis::X: unit_axis = Vec3d::UnitX(); break;
|
||||
case BeltRotationAxis::Y: unit_axis = Vec3d::UnitY(); break;
|
||||
case BeltRotationAxis::Z: unit_axis = Vec3d::UnitZ(); break;
|
||||
default: unit_axis = Vec3d::UnitX(); break;
|
||||
}
|
||||
Matrix3d R = Eigen::AngleAxisd(angle_rad, unit_axis).toRotationMatrix();
|
||||
double min_rz = std::numeric_limits<double>::max();
|
||||
double max_rz = std::numeric_limits<double>::lowest();
|
||||
for (int i = 0; i < 8; ++i) {
|
||||
Vec3d c((i & 1) ? bb.max.x() : bb.min.x(),
|
||||
(i & 2) ? bb.max.y() : bb.min.y(),
|
||||
(i & 4) ? bb.max.z() : bb.min.z());
|
||||
double z = (R * c).z();
|
||||
min_rz = std::min(min_rz, z);
|
||||
max_rz = std::max(max_rz, z);
|
||||
}
|
||||
result.object_height = max_rz - min_rz;
|
||||
|
||||
// Belt floor in slicer-frame is the image of z_machine = 0 under R.
|
||||
// R(+α, X): point (·, y, 0) → (·, cos α · y, sin α · y) ⇒ z = tan(α) · y_s
|
||||
// R(+α, Y): point (x, ·, 0) → (cos α · x, ·, -sin α · x) ⇒ z = -tan(α) · x_s
|
||||
// R(+α, Z): point (·, ·, 0) → (·, ·, 0); no tilt → no floor
|
||||
double sin_a = std::sin(angle_rad), cos_a = std::cos(angle_rad);
|
||||
switch (rot_axis) {
|
||||
case BeltRotationAxis::X:
|
||||
result.floor_params.shear_factor = (std::abs(cos_a) > EPSILON) ? sin_a / cos_a : 0.;
|
||||
result.floor_params.from_axis = 1; // Y
|
||||
break;
|
||||
case BeltRotationAxis::Y:
|
||||
result.floor_params.shear_factor = (std::abs(cos_a) > EPSILON) ? -sin_a / cos_a : 0.;
|
||||
result.floor_params.from_axis = 0; // X
|
||||
break;
|
||||
case BeltRotationAxis::Z:
|
||||
default:
|
||||
result.floor_params.shear_factor = 0.0;
|
||||
result.floor_params.from_axis = 1;
|
||||
break;
|
||||
}
|
||||
result.floor_params.z_shift = bb.min.z() + ((min_rz < 0.) ? -min_rz : 0.);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
BeltTransformPipeline::BeltHeightResult BeltTransformPipeline::compute_belt_height_and_floor(
|
||||
const PrintConfig &config, const BoundingBoxf3 &remapped_bbox, double original_height)
|
||||
{
|
||||
return compute_belt_height_and_floor_impl(config, remapped_bbox, original_height);
|
||||
}
|
||||
|
||||
BeltTransformPipeline::BeltHeightResult BeltTransformPipeline::compute_belt_height_and_floor(
|
||||
const DynamicPrintConfig &config, const BoundingBoxf3 &remapped_bbox, double original_height)
|
||||
{
|
||||
return compute_belt_height_and_floor_impl(config, remapped_bbox, original_height);
|
||||
}
|
||||
|
||||
} // namespace Slic3r
|
||||
@@ -0,0 +1,168 @@
|
||||
#pragma once
|
||||
|
||||
#include "libslic3r.h"
|
||||
#include "Point.hpp"
|
||||
#include "BoundingBox.hpp"
|
||||
#include "PrintConfig.hpp"
|
||||
#include "Geometry.hpp"
|
||||
#include "Config.hpp"
|
||||
|
||||
#include <cmath>
|
||||
|
||||
namespace Slic3r {
|
||||
|
||||
class ModelObject;
|
||||
|
||||
// Shared belt-printer transform math.
|
||||
//
|
||||
// The pre-slice pipeline applied in PrintObjectSlice.cpp is:
|
||||
// trafo_out = z_shift * rotation * pre_remap * trafo_in
|
||||
//
|
||||
// Rotation is the sole mesh-side belt transform; shear & scale are applied
|
||||
// to the g-code instead (see MachineFrameTransform). This class provides the
|
||||
// building blocks so every call site uses the same implementation. z_shift is
|
||||
// object-dependent (computed from mesh vertex bounds) and is NOT included in
|
||||
// build_forward_transform(). The machine-frame shear/scale is derived directly
|
||||
// from the tilt angle in MachineFrameTransform and no longer lives here.
|
||||
//
|
||||
// Design note: this mesh-rotation approach replaced an earlier pre-shear
|
||||
// method (now removed). While that initial pre-shear method was instrumental
|
||||
// in getting belt printer slicing off the ground in the first place, its place is
|
||||
// in the past. A big thank you goes to the Unlayered3D team, who recommended
|
||||
// switching to a pre-slice rotation stage instead. Doing so keeps the slicing
|
||||
// operation isometric — no distortion of the sliced geometry — while the
|
||||
// non-orthogonal machine-axis compensation is confined to a g-code-side shear/scale
|
||||
// derived from the same tilt angle.
|
||||
//
|
||||
// This fixed a number of issues, including several issues noticed by hotcubcar
|
||||
// regarding adaptive infills not working, gyroid becoming anisotropic, and more
|
||||
// that were all mostly resolved as a result of the switch.
|
||||
//
|
||||
// This also means that the pre-slice rotation transform methodology can be used
|
||||
// more cleanly on non-belt printers.
|
||||
// - HarrierPigeon (Joseph Robertson)
|
||||
|
||||
class BeltTransformPipeline
|
||||
{
|
||||
public:
|
||||
// ---- Identity checks --------------------------------------------------
|
||||
|
||||
// Whether the axis remaps (preslice_remap_* and gcode_remap_*) apply at all.
|
||||
// The remap fields are only offered in the belt printer group, so a value
|
||||
// left in a profile must not change a non-belt print: with belt mode off every
|
||||
// belt-only key is a no-op. This is the one place to widen if a non-belt use
|
||||
// ever needs them.
|
||||
static bool axis_remap_enabled(const PrintConfig &config) { return config.belt_printer.value; }
|
||||
static bool axis_remap_enabled(const DynamicPrintConfig &config)
|
||||
{
|
||||
auto *opt = config.option<ConfigOptionBool>("belt_printer");
|
||||
return opt != nullptr && opt->value;
|
||||
}
|
||||
|
||||
static bool has_preslice_remap(const PrintConfig &config)
|
||||
{
|
||||
return axis_remap_enabled(config) &&
|
||||
(int(config.preslice_remap_x.value) != int(RemapAxis::PosX) ||
|
||||
int(config.preslice_remap_y.value) != int(RemapAxis::PosY) ||
|
||||
int(config.preslice_remap_z.value) != int(RemapAxis::PosZ));
|
||||
}
|
||||
|
||||
// Overload accepting DynamicPrintConfig (used in static slicing_parameters).
|
||||
static bool has_preslice_remap(const DynamicPrintConfig &config)
|
||||
{
|
||||
if (! axis_remap_enabled(config))
|
||||
return false;
|
||||
auto get_int = [&](const char *key) -> int {
|
||||
auto *opt = config.option<ConfigOptionEnum<RemapAxis>>(key);
|
||||
return opt ? int(opt->value) : 0;
|
||||
};
|
||||
return get_int("preslice_remap_x") != int(RemapAxis::PosX) ||
|
||||
get_int("preslice_remap_y") != int(RemapAxis::PosY) ||
|
||||
get_int("preslice_remap_z") != int(RemapAxis::PosZ);
|
||||
}
|
||||
|
||||
static bool has_rotation(const PrintConfig &config)
|
||||
{
|
||||
return config.belt_slice_rotation.value != BeltRotationAxis::None &&
|
||||
std::abs(config.belt_slice_rotation_angle.value) > EPSILON;
|
||||
}
|
||||
|
||||
// Physical belt tilt derived from the slicing rotation — the single source of
|
||||
// truth for bed rendering, support gravity tilt and the bed-exclusion
|
||||
// projection. Returns the tilt magnitude in degrees split onto the X and Y
|
||||
// build-plate tilt axes according to the rotation axis:
|
||||
// rotation about X → tilt_x = angle (gantry tilts in the YZ plane)
|
||||
// rotation about Y → tilt_y = angle (gantry tilts in the XZ plane)
|
||||
// rotation about Z / None → no tilt (in-plane spin doesn't tilt the belt)
|
||||
// The magnitude uses abs(angle) so a negative rotation still reports a positive
|
||||
// physical tilt.
|
||||
struct PhysicalTilt { double tilt_x_deg = 0.; double tilt_y_deg = 0.; };
|
||||
|
||||
static PhysicalTilt physical_tilt(BeltRotationAxis axis, double angle_deg)
|
||||
{
|
||||
PhysicalTilt t;
|
||||
double mag = std::abs(angle_deg);
|
||||
switch (axis) {
|
||||
case BeltRotationAxis::X: t.tilt_x_deg = mag; break;
|
||||
case BeltRotationAxis::Y: t.tilt_y_deg = mag; break;
|
||||
default: break; // Z / None: no physical tilt
|
||||
}
|
||||
return t;
|
||||
}
|
||||
|
||||
static PhysicalTilt physical_tilt(const PrintConfig &config)
|
||||
{
|
||||
return physical_tilt(config.belt_slice_rotation.value,
|
||||
config.belt_slice_rotation_angle.value);
|
||||
}
|
||||
|
||||
// ---- Matrix builders --------------------------------------------------
|
||||
|
||||
// Build the pre-slice axis remap transform (includes Rev-mode translation).
|
||||
static Transform3d build_preslice_remap(const PrintConfig &config);
|
||||
|
||||
// Build the 3x3 rotation matrix from belt_slice_rotation* config.
|
||||
// Returns Identity if rotation axis is None or angle is ~0.
|
||||
// Also sets has_rot_out if non-null.
|
||||
static Matrix3d build_rotation_matrix(const PrintConfig &config, bool *has_rot_out = nullptr);
|
||||
|
||||
// Combined forward transform (rotation * pre_remap) — the mesh-side belt
|
||||
// transform that BeltSliceStrategy applies and BeltBackTransform inverts.
|
||||
// Does NOT include the per-object Z-shift.
|
||||
static Transform3d build_forward_transform(const PrintConfig &config);
|
||||
|
||||
// ---- Bounding box remap -----------------------------------------------
|
||||
|
||||
// Remap a bounding box through the pre-slice axis remap.
|
||||
// Returns the original bbox if remap is identity.
|
||||
static BoundingBoxf3 remap_bbox(const BoundingBoxf3 &bb, const PrintConfig &config);
|
||||
static BoundingBoxf3 remap_bbox(const ModelObject &model_object, const PrintConfig &config);
|
||||
|
||||
// ---- Belt floor parameters --------------------------------------------
|
||||
|
||||
struct BeltFloorParams {
|
||||
double shear_factor = 0.0;
|
||||
int from_axis = 1;
|
||||
double z_shift = 0.0;
|
||||
};
|
||||
|
||||
// Result of computing belt height + floor params.
|
||||
struct BeltHeightResult {
|
||||
double object_height; // Effective object height after shear/scale
|
||||
BeltFloorParams floor_params;
|
||||
};
|
||||
|
||||
// Compute effective object height and belt floor parameters from config
|
||||
// and pre-remapped bounding box. original_height is the input height
|
||||
// (bb.size().z() or model_object.max_z()).
|
||||
static BeltHeightResult compute_belt_height_and_floor(
|
||||
const PrintConfig &config, const BoundingBoxf3 &remapped_bbox,
|
||||
double original_height);
|
||||
|
||||
// Overload for DynamicPrintConfig (used by static slicing_parameters).
|
||||
static BeltHeightResult compute_belt_height_and_floor(
|
||||
const DynamicPrintConfig &config, const BoundingBoxf3 &remapped_bbox,
|
||||
double original_height);
|
||||
};
|
||||
|
||||
} // namespace Slic3r
|
||||
+14
-1
@@ -474,7 +474,9 @@ static ExPolygons outer_inner_brim_area(const Print& print,
|
||||
const bool use_brim_ears = object->config().brim_type == btPainted;
|
||||
const bool use_inner_brim_ears = (use_auto_brim_ears || use_brim_ears) && !object->config().brim_ears_outer_only.value;
|
||||
const bool has_inner_brim = brim_type == btInnerOnly || brim_type == btOuterAndInner || use_inner_brim_ears;
|
||||
const bool has_outer_brim = brim_type == btOuterOnly || brim_type == btOuterAndInner || brim_type == btAutoBrim || use_auto_brim_ears || use_brim_ears;
|
||||
// btLeadingEdgeOnly is a belt-printer mode; on a flat bed there is no leading
|
||||
// edge, so it degrades to an ordinary outer brim rather than silently to none.
|
||||
const bool has_outer_brim = brim_type == btOuterOnly || brim_type == btOuterAndInner || brim_type == btAutoBrim || brim_type == btLeadingEdgeOnly || use_auto_brim_ears || use_brim_ears;
|
||||
coord_t ear_detection_length = scale_(object->config().brim_ears_detection_length.value);
|
||||
coordf_t brim_ears_max_angle = object->config().brim_ears_max_angle.value;
|
||||
//ORCA: Select brim base slices from EFC-compensated outline when enabled.
|
||||
@@ -889,6 +891,17 @@ void make_brim(const Print& print, PrintTryCancel try_cancel, Polygons& islands_
|
||||
std::vector<unsigned int>& printExtruders,
|
||||
std::map<ObjectInstanceID, ExPolygons>* objectBrimAreasByInstanceOut)
|
||||
{
|
||||
// Belt printers never use the flat plate brim.
|
||||
//
|
||||
// With a tilted belt the brim has to be laid onto the belt plane over many layers,
|
||||
// which BeltBrim.cpp does during posSupportMaterial. With an untilted belt this
|
||||
// could in principle fall through and produce an ordinary brim, but it would never
|
||||
// reach the G-code: the plate brim is emitted out of skirt_brim_groups(), which
|
||||
// _make_skirt() builds, and that returns early for every belt printer. Running the
|
||||
// generator anyway would just burn time on geometry nobody prints.
|
||||
if (print.config().belt_printer.value)
|
||||
return;
|
||||
|
||||
std::map<ObjectInstanceID, ExPolygons> brimAreaMap;
|
||||
Flow flow = print.brim_flow();
|
||||
ExPolygons islands_area_ex = outer_inner_brim_area(print,
|
||||
|
||||
@@ -84,7 +84,7 @@ public:
|
||||
indexed_triangle_set bounding_mesh(bool scale=true) const;
|
||||
|
||||
// Center of the print bed, unscaled.
|
||||
Vec2d bed_center() const { return to_2d(m_bboxf.center()); }
|
||||
Vec2d bed_center() const { return get_extents(m_bed_shape).center(); }
|
||||
// Convex hull of polygon(), scaled.
|
||||
const Polygon& convex_hull() const { return m_convex_hull; }
|
||||
// Smallest enclosing circle of polygon(), scaled.
|
||||
|
||||
@@ -85,6 +85,17 @@ set(lisbslic3r_sources
|
||||
BoundingBox.hpp
|
||||
BridgeDetector.cpp
|
||||
BridgeDetector.hpp
|
||||
BeltBrim.cpp
|
||||
BeltBrim.hpp
|
||||
BeltGCode.cpp
|
||||
BeltGCode.hpp
|
||||
BeltPurge.cpp
|
||||
BeltSliceStrategy.cpp
|
||||
BeltSliceStrategy.hpp
|
||||
BeltTransform.cpp
|
||||
BeltTransform.hpp
|
||||
FirstLayerPlane.cpp
|
||||
FirstLayerPlane.hpp
|
||||
Brim.cpp
|
||||
BrimEarsPoint.hpp
|
||||
Brim.hpp
|
||||
@@ -232,6 +243,14 @@ set(lisbslic3r_sources
|
||||
GCode/AdaptivePAProcessor.hpp
|
||||
GCode/AvoidCrossingPerimeters.cpp
|
||||
GCode/AvoidCrossingPerimeters.hpp
|
||||
GCode/BeltBackTransform.cpp
|
||||
GCode/BeltBackTransform.hpp
|
||||
GCode/MachineFrameTransform.cpp
|
||||
GCode/MachineFrameTransform.hpp
|
||||
GCode/BeltKinematics.cpp
|
||||
GCode/BeltKinematics.hpp
|
||||
GCode/MachineKinematics.cpp
|
||||
GCode/MachineKinematics.hpp
|
||||
GCode/ConflictChecker.cpp
|
||||
GCode/ConflictChecker.hpp
|
||||
GCode/CoolingBuffer.cpp
|
||||
@@ -456,6 +475,8 @@ set(lisbslic3r_sources
|
||||
SlicingAdaptive.hpp
|
||||
Slicing.cpp
|
||||
Slicing.hpp
|
||||
Support/BeltFloorContext.cpp
|
||||
Support/BeltFloorContext.hpp
|
||||
Support/SupportCommon.cpp
|
||||
Support/SupportCommon.hpp
|
||||
Support/SupportLayer.hpp
|
||||
|
||||
@@ -403,6 +403,11 @@ inline void translate(ExPolygons &expolys, const Point &p) {
|
||||
expoly.translate(p);
|
||||
}
|
||||
|
||||
inline void translate(Polygons &polys, const Point &p) {
|
||||
for (Polygon &poly : polys)
|
||||
poly.translate(p);
|
||||
}
|
||||
|
||||
inline void polygons_append(Polygons &dst, const ExPolygon &src)
|
||||
{
|
||||
dst.reserve(dst.size() + src.holes.size() + 1);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user