mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-07-18 14:50:22 +03:00
Compare commits
1 Commits
feature/ba
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a6226ba9cb |
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-07-13 16:24-0300\n"
|
||||
"POT-Creation-Date: 2026-07-17 15:13-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"
|
||||
@@ -1935,6 +1935,17 @@ msgstr ""
|
||||
msgid "Info"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, possible-c-format, possible-boost-format
|
||||
msgid "Plugin %s is no longer available."
|
||||
msgstr ""
|
||||
|
||||
#, possible-c-format, possible-boost-format
|
||||
msgid "Plugin %s access is unauthorized."
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading printer & filament profiles"
|
||||
msgstr ""
|
||||
|
||||
@@ -2048,6 +2059,18 @@ msgstr ""
|
||||
msgid "Resolve cloud sync conflict"
|
||||
msgstr ""
|
||||
|
||||
msgid "Syncing your account…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Migrating presets…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Fetching plugins…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading user presets…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Retrieving printer information, please try again later."
|
||||
msgstr ""
|
||||
|
||||
@@ -2166,6 +2189,21 @@ msgstr ""
|
||||
msgid "*"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, possible-c-format, possible-boost-format
|
||||
msgid ""
|
||||
"Failed to open the Plugins dialog:\n"
|
||||
"%s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to open the Plugins dialog (unknown error)."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin Terminal"
|
||||
msgstr ""
|
||||
|
||||
msgid "Changing application language"
|
||||
msgstr ""
|
||||
|
||||
@@ -4809,6 +4847,28 @@ msgstr ""
|
||||
msgid "N/A"
|
||||
msgstr ""
|
||||
|
||||
msgid "System agents"
|
||||
msgstr ""
|
||||
|
||||
msgid "No plugin selected"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Select plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Remove plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configure"
|
||||
msgstr ""
|
||||
|
||||
#, possible-c-format, possible-boost-format
|
||||
msgid "Configure (%d)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Pick"
|
||||
msgstr ""
|
||||
|
||||
@@ -4974,9 +5034,6 @@ msgstr ""
|
||||
msgid "Fan speed"
|
||||
msgstr ""
|
||||
|
||||
msgid "°C"
|
||||
msgstr ""
|
||||
|
||||
msgid "Time"
|
||||
msgstr ""
|
||||
|
||||
@@ -6939,6 +6996,14 @@ msgctxt "Layers"
|
||||
msgid "Bottom"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin Selection"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"No plugins capabilities available for this type.\n"
|
||||
"Enable or install some to use."
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable detection of build plate position"
|
||||
msgstr ""
|
||||
|
||||
@@ -7791,6 +7856,40 @@ msgstr ""
|
||||
msgid "Synchronize AMS Filament Information"
|
||||
msgstr ""
|
||||
|
||||
msgid "OrcaCloud plugins required by the current preset are not installed:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Install Plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Local plugins required by the current preset are missing:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Find on OrcaCloud"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugins required by the current preset are not activated:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Activate Now"
|
||||
msgstr ""
|
||||
|
||||
msgid "The installed plugin does not provide the required capability — it may be outdated:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Preparing to install plugins..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Installing plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cancelling — finishing the current plugin..."
|
||||
msgstr ""
|
||||
|
||||
#, possible-boost-format
|
||||
msgid "Installing %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plate Settings"
|
||||
msgstr ""
|
||||
|
||||
@@ -8814,6 +8913,9 @@ msgstr ""
|
||||
msgid "Your filament grouping method in the sliced file is not optimal."
|
||||
msgstr ""
|
||||
|
||||
msgid "To ensure print quality, the drying temperature will be lowered during printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto Bed Leveling"
|
||||
msgstr ""
|
||||
|
||||
@@ -9507,6 +9609,12 @@ msgstr ""
|
||||
msgid "Post-processing Scripts"
|
||||
msgstr ""
|
||||
|
||||
msgid "Slicing Pipeline Plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin Configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Notes"
|
||||
msgstr ""
|
||||
|
||||
@@ -10583,6 +10691,9 @@ msgstr ""
|
||||
msgid "Switch between Prepare/Preview"
|
||||
msgstr ""
|
||||
|
||||
msgid "Open actions speed dial"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plater"
|
||||
msgstr ""
|
||||
|
||||
@@ -11394,6 +11505,9 @@ msgstr ""
|
||||
msgid "HTTP digest"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configuration for the plugin capabilities this preset uses, overriding the global Capabilities configuration. Stored as a raw JSON array and edited through the dialog behind the button, never typed in directly."
|
||||
msgstr ""
|
||||
|
||||
msgid "Avoid crossing walls"
|
||||
msgstr ""
|
||||
|
||||
@@ -12230,6 +12344,24 @@ msgid ""
|
||||
"WARNING: Lowering this value may negatively affect bed adhesion."
|
||||
msgstr ""
|
||||
|
||||
msgid "Top surface fill order"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
|
||||
"Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
|
||||
"Default uses shortest-path ordering, which may run in either direction."
|
||||
msgstr ""
|
||||
|
||||
msgid "Bottom surface fill order"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
|
||||
"Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
|
||||
"Default uses shortest-path ordering, which may run in either direction."
|
||||
msgstr ""
|
||||
|
||||
msgid "Internal solid infill pattern"
|
||||
msgstr ""
|
||||
|
||||
@@ -13358,9 +13490,6 @@ msgid ""
|
||||
"Set to 0 to deactivate."
|
||||
msgstr ""
|
||||
|
||||
msgid "%"
|
||||
msgstr ""
|
||||
|
||||
msgid "Time cost"
|
||||
msgstr ""
|
||||
|
||||
@@ -14011,6 +14140,9 @@ msgid ""
|
||||
"RRF: X and Y values are equal."
|
||||
msgstr ""
|
||||
|
||||
msgid "Hz"
|
||||
msgstr ""
|
||||
|
||||
msgid "Y"
|
||||
msgstr ""
|
||||
|
||||
@@ -14251,6 +14383,15 @@ msgstr ""
|
||||
msgid "This G-code is inserted when the extrusion role is changed. It runs after the machine and filament extrusion role G-code."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugins Used"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin capabilities referenced by this preset, stored as name;uuid;capability."
|
||||
msgstr ""
|
||||
|
||||
msgid "Python plugin(s) invoked at each slicing pipeline step to read and modify intermediate slicing data, including a final G-code post-processing step. Research/experimental."
|
||||
msgstr ""
|
||||
|
||||
msgid "Printer type"
|
||||
msgstr ""
|
||||
|
||||
@@ -14311,6 +14452,15 @@ msgstr ""
|
||||
msgid "This is the length of fast retraction before a wipe, relative to retraction length."
|
||||
msgstr ""
|
||||
|
||||
msgid "Retract amount after wipe"
|
||||
msgstr ""
|
||||
|
||||
#, possible-c-format
|
||||
msgid ""
|
||||
"The length of fast retraction after wipe, relative to retraction length.\n"
|
||||
"The value will be clamped by 100% minus the retract amount before the wipe value."
|
||||
msgstr ""
|
||||
|
||||
msgid "Retract on layer change"
|
||||
msgstr ""
|
||||
|
||||
@@ -15243,16 +15393,6 @@ msgstr ""
|
||||
msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers."
|
||||
msgstr ""
|
||||
|
||||
msgid "Anisotropic surfaces"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Anisotropic patterns on the top and bottom surfaces.\n"
|
||||
"Co-directional printing mode will be applied. For certain patterns, omni-directional filling provides color dispersion when using multi-colored or silk plastics.\n"
|
||||
"This option disable the gap fill.\n"
|
||||
"This option can increase a printing time."
|
||||
msgstr ""
|
||||
|
||||
msgid "Separated infills"
|
||||
msgstr ""
|
||||
|
||||
@@ -16960,9 +17100,6 @@ msgstr ""
|
||||
msgid "Frequency settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hz"
|
||||
msgstr ""
|
||||
|
||||
msgid "RepRap firmware uses the same frequency range for both axes."
|
||||
msgstr ""
|
||||
|
||||
@@ -18866,6 +19003,145 @@ msgstr ""
|
||||
msgid "Open File"
|
||||
msgstr ""
|
||||
|
||||
msgid "AMS Dryness Control"
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament Drying Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Stopping"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to dry temporarily due to ..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying Error"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please check the Assistant for troubleshooting"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please remove and store the filament (as shown)."
|
||||
msgstr ""
|
||||
|
||||
msgid "The AMS can rotate the filament which is properly stored, providing better drying results."
|
||||
msgstr ""
|
||||
|
||||
msgid "Rotate spool when drying"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "amsdrying"
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying-Heating"
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying-Dehumidifying"
|
||||
msgstr ""
|
||||
|
||||
msgid " maximum drying temperature is "
|
||||
msgstr ""
|
||||
|
||||
msgid " minimum drying temperature is "
|
||||
msgstr ""
|
||||
|
||||
msgid "This filament may not be completely dried."
|
||||
msgstr ""
|
||||
|
||||
msgid "This AMS is currently printing. To ensure print quality, the drying temperature cannot exceed the recommended drying temperature."
|
||||
msgstr ""
|
||||
|
||||
msgid "The temperature shall not exceed the filament's heat distortion temperature"
|
||||
msgstr ""
|
||||
|
||||
msgid "Minimum time value cannot be less than 1."
|
||||
msgstr ""
|
||||
|
||||
msgid "Maximum time value cannot be greater than 24."
|
||||
msgstr ""
|
||||
|
||||
msgid "Insufficient power"
|
||||
msgstr ""
|
||||
|
||||
msgid " Too many AMS drying simultaneously. Please plug in the power or stop other drying processes before starting."
|
||||
msgstr ""
|
||||
|
||||
msgid "AMS is busy"
|
||||
msgstr ""
|
||||
|
||||
msgid " AMS is calibrating | reading RFID | loading/unloading material, please wait."
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament in AMS outlet"
|
||||
msgstr ""
|
||||
|
||||
msgid " The high drying temperature may cause AMS blockage, please unload first."
|
||||
msgstr ""
|
||||
|
||||
msgid "Initiating AMS drying"
|
||||
msgstr ""
|
||||
|
||||
msgid "Not supported in 2D mode"
|
||||
msgstr ""
|
||||
|
||||
msgid "Task in progress"
|
||||
msgstr ""
|
||||
|
||||
msgid " The AMS might be in use during Task."
|
||||
msgstr ""
|
||||
|
||||
msgid " Firmware update in progress, please wait..."
|
||||
msgstr ""
|
||||
|
||||
msgid " Please plug in the power and then use the drying function."
|
||||
msgstr ""
|
||||
|
||||
msgid " The high drying temperature may cause AMS blockage. Please unload the filament manually before proceeding."
|
||||
msgstr ""
|
||||
|
||||
msgid "System is busy"
|
||||
msgstr ""
|
||||
|
||||
msgid " Initiating other drying processes, please wait a few seconds..."
|
||||
msgstr ""
|
||||
|
||||
msgid "For better drying results, remove the filament and allow it to rotate."
|
||||
msgstr ""
|
||||
|
||||
msgid "The AMS will automatically rotate the stored filament slots to enhance the drying performance."
|
||||
msgstr ""
|
||||
|
||||
msgid "Alternatively, you can dry the filament without removing it."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unknown filaments will be treated as PLA."
|
||||
msgstr ""
|
||||
|
||||
msgid "Please store the filament marked with an exclamation mark."
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament left in the feeder during drying may soften because the drying temperature exceeds the softening point of materials like PLA and TPU."
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking adapter connection"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking filament status"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking drying presets"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking filament location"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking air intake"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking air vent"
|
||||
msgstr ""
|
||||
|
||||
msgid "The filament may not be compatible with the current machine settings. Generic filament presets will be used."
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-07-13 16:24-0300\n"
|
||||
"POT-Creation-Date: 2026-07-17 15:13-0300\n"
|
||||
"PO-Revision-Date: 2025-03-15 10:55+0100\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
@@ -1990,6 +1990,17 @@ msgstr "Aquesta és la versió més recent."
|
||||
msgid "Info"
|
||||
msgstr "Informació"
|
||||
|
||||
msgid "Loading Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Plugin %s is no longer available."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Plugin %s access is unauthorized."
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading printer & filament profiles"
|
||||
msgstr ""
|
||||
|
||||
@@ -2107,6 +2118,18 @@ msgstr ""
|
||||
msgid "Resolve cloud sync conflict"
|
||||
msgstr ""
|
||||
|
||||
msgid "Syncing your account…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Migrating presets…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Fetching plugins…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading user presets…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Retrieving printer information, please try again later."
|
||||
msgstr "Recuperant informació de la impressora, torneu-ho a provar més tard."
|
||||
|
||||
@@ -2232,6 +2255,21 @@ msgstr ""
|
||||
msgid "*"
|
||||
msgstr "*"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"Failed to open the Plugins dialog:\n"
|
||||
"%s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to open the Plugins dialog (unknown error)."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin Terminal"
|
||||
msgstr ""
|
||||
|
||||
msgid "Changing application language"
|
||||
msgstr "Canviant de l'idioma de l'aplicació"
|
||||
|
||||
@@ -5057,6 +5095,28 @@ msgstr "Format no vàlid. Format vectorial esperat: \"%1%\""
|
||||
msgid "N/A"
|
||||
msgstr "N/D"
|
||||
|
||||
msgid "System agents"
|
||||
msgstr ""
|
||||
|
||||
msgid "No plugin selected"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Select plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Remove plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configure"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Configure (%d)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Pick"
|
||||
msgstr "Tria"
|
||||
|
||||
@@ -5222,9 +5282,6 @@ msgstr "Ratio de Flux"
|
||||
msgid "Fan speed"
|
||||
msgstr "Velocitat del ventilador"
|
||||
|
||||
msgid "°C"
|
||||
msgstr "°C"
|
||||
|
||||
msgid "Time"
|
||||
msgstr "Temps"
|
||||
|
||||
@@ -7257,6 +7314,14 @@ msgctxt "Layers"
|
||||
msgid "Bottom"
|
||||
msgstr "Inferior"
|
||||
|
||||
msgid "Plugin Selection"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"No plugins capabilities available for this type.\n"
|
||||
"Enable or install some to use."
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable detection of build plate position"
|
||||
msgstr "Activar detecció de la posició de la placa"
|
||||
|
||||
@@ -8166,6 +8231,40 @@ msgstr "Pàgina del dispositiu"
|
||||
msgid "Synchronize AMS Filament Information"
|
||||
msgstr "Sincronitza la informació del filament de l'AMS"
|
||||
|
||||
msgid "OrcaCloud plugins required by the current preset are not installed:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Install Plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Local plugins required by the current preset are missing:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Find on OrcaCloud"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugins required by the current preset are not activated:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Activate Now"
|
||||
msgstr ""
|
||||
|
||||
msgid "The installed plugin does not provide the required capability — it may be outdated:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Preparing to install plugins..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Installing plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cancelling — finishing the current plugin..."
|
||||
msgstr ""
|
||||
|
||||
#, boost-format
|
||||
msgid "Installing %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plate Settings"
|
||||
msgstr "Configuració de la placa"
|
||||
|
||||
@@ -9227,6 +9326,9 @@ msgstr "Multicolor amb extern"
|
||||
msgid "Your filament grouping method in the sliced file is not optimal."
|
||||
msgstr "El vostre mètode d'agrupació de filaments al fitxer tallat no és òptim."
|
||||
|
||||
msgid "To ensure print quality, the drying temperature will be lowered during printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto Bed Leveling"
|
||||
msgstr "Anivellament automàtic del llit"
|
||||
|
||||
@@ -9958,6 +10060,12 @@ msgstr "Codi-G de canvi del rol d'extrusió"
|
||||
msgid "Post-processing Scripts"
|
||||
msgstr "Scripts de postprocessament"
|
||||
|
||||
msgid "Slicing Pipeline Plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin Configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Notes"
|
||||
msgstr ""
|
||||
|
||||
@@ -11087,6 +11195,9 @@ msgstr ""
|
||||
msgid "Switch between Prepare/Preview"
|
||||
msgstr "Canviar entre Preparar/Previsualitzar"
|
||||
|
||||
msgid "Open actions speed dial"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plater"
|
||||
msgstr "Plataforma"
|
||||
|
||||
@@ -11947,6 +12058,9 @@ msgstr "Codi API"
|
||||
msgid "HTTP digest"
|
||||
msgstr "HTTP-Digest"
|
||||
|
||||
msgid "Configuration for the plugin capabilities this preset uses, overriding the global Capabilities configuration. Stored as a raw JSON array and edited through the dialog behind the button, never typed in directly."
|
||||
msgstr ""
|
||||
|
||||
msgid "Avoid crossing walls"
|
||||
msgstr "Evitar creuar perímetre"
|
||||
|
||||
@@ -12926,6 +13040,24 @@ msgstr ""
|
||||
"Densitat de la capa de superfície inferior. Destinat a fins estètics o funcionals, no per solucionar problemes com la sobreextrusió.\n"
|
||||
"AVÍS: reduir aquest valor pot afectar negativament l'adhesió al llit."
|
||||
|
||||
msgid "Top surface fill order"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
|
||||
"Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
|
||||
"Default uses shortest-path ordering, which may run in either direction."
|
||||
msgstr ""
|
||||
|
||||
msgid "Bottom surface fill order"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
|
||||
"Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
|
||||
"Default uses shortest-path ordering, which may run in either direction."
|
||||
msgstr ""
|
||||
|
||||
msgid "Internal solid infill pattern"
|
||||
msgstr "Patró de farciment sòlid intern"
|
||||
|
||||
@@ -14158,9 +14290,6 @@ msgid ""
|
||||
"Set to 0 to deactivate."
|
||||
msgstr ""
|
||||
|
||||
msgid "%"
|
||||
msgstr "%"
|
||||
|
||||
msgid "Time cost"
|
||||
msgstr "Cost per Temps"
|
||||
|
||||
@@ -14848,6 +14977,9 @@ msgid ""
|
||||
"RRF: X and Y values are equal."
|
||||
msgstr ""
|
||||
|
||||
msgid "Hz"
|
||||
msgstr "Hz"
|
||||
|
||||
msgid "Y"
|
||||
msgstr "Y"
|
||||
|
||||
@@ -15123,6 +15255,15 @@ msgstr ""
|
||||
msgid "This G-code is inserted when the extrusion role is changed. It runs after the machine and filament extrusion role G-code."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugins Used"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin capabilities referenced by this preset, stored as name;uuid;capability."
|
||||
msgstr ""
|
||||
|
||||
msgid "Python plugin(s) invoked at each slicing pipeline step to read and modify intermediate slicing data, including a final G-code post-processing step. Research/experimental."
|
||||
msgstr ""
|
||||
|
||||
msgid "Printer type"
|
||||
msgstr "Tipus d'impressora"
|
||||
|
||||
@@ -15191,6 +15332,15 @@ msgstr "Quantitat de retracció abans de netejar"
|
||||
msgid "This is the length of fast retraction before a wipe, relative to retraction length."
|
||||
msgstr "La longitud de retracció ràpida abans de la neteja, en relació amb la longitud de retracció"
|
||||
|
||||
msgid "Retract amount after wipe"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The length of fast retraction after wipe, relative to retraction length.\n"
|
||||
"The value will be clamped by 100% minus the retract amount before the wipe value."
|
||||
msgstr ""
|
||||
|
||||
# TODO: Review, changed by lang refactor. PR 14254
|
||||
msgid "Retract on layer change"
|
||||
msgstr "Retracció quan canvia de capa"
|
||||
@@ -16198,16 +16348,6 @@ msgstr "Gruix mínim de la carcassa superior"
|
||||
msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers."
|
||||
msgstr "El nombre de capes sòlides superiors augmenta quan es tallen si el gruix calculat per les capes de closca superior és més prim que aquest valor. Això pot evitar tenir una closca massa fina quan l'alçada de la capa és petita. 0 significa que aquesta configuració està desactivada i que el gruix de la carcassa superior està absolutament determinat per les capes de la carcassa superior"
|
||||
|
||||
msgid "Anisotropic surfaces"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Anisotropic patterns on the top and bottom surfaces.\n"
|
||||
"Co-directional printing mode will be applied. For certain patterns, omni-directional filling provides color dispersion when using multi-colored or silk plastics.\n"
|
||||
"This option disable the gap fill.\n"
|
||||
"This option can increase a printing time."
|
||||
msgstr ""
|
||||
|
||||
msgid "Separated infills"
|
||||
msgstr ""
|
||||
|
||||
@@ -18041,9 +18181,6 @@ msgstr "Inici / Final"
|
||||
msgid "Frequency settings"
|
||||
msgstr "Configuració de freqüència"
|
||||
|
||||
msgid "Hz"
|
||||
msgstr "Hz"
|
||||
|
||||
msgid "RepRap firmware uses the same frequency range for both axes."
|
||||
msgstr "El firmware RepRap utilitza el mateix rang de freqüència per a ambdós eixos."
|
||||
|
||||
@@ -20036,6 +20173,145 @@ msgstr ""
|
||||
msgid "Open File"
|
||||
msgstr ""
|
||||
|
||||
msgid "AMS Dryness Control"
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament Drying Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Stopping"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to dry temporarily due to ..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying Error"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please check the Assistant for troubleshooting"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please remove and store the filament (as shown)."
|
||||
msgstr ""
|
||||
|
||||
msgid "The AMS can rotate the filament which is properly stored, providing better drying results."
|
||||
msgstr ""
|
||||
|
||||
msgid "Rotate spool when drying"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "amsdrying"
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying-Heating"
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying-Dehumidifying"
|
||||
msgstr ""
|
||||
|
||||
msgid " maximum drying temperature is "
|
||||
msgstr ""
|
||||
|
||||
msgid " minimum drying temperature is "
|
||||
msgstr ""
|
||||
|
||||
msgid "This filament may not be completely dried."
|
||||
msgstr ""
|
||||
|
||||
msgid "This AMS is currently printing. To ensure print quality, the drying temperature cannot exceed the recommended drying temperature."
|
||||
msgstr ""
|
||||
|
||||
msgid "The temperature shall not exceed the filament's heat distortion temperature"
|
||||
msgstr ""
|
||||
|
||||
msgid "Minimum time value cannot be less than 1."
|
||||
msgstr ""
|
||||
|
||||
msgid "Maximum time value cannot be greater than 24."
|
||||
msgstr ""
|
||||
|
||||
msgid "Insufficient power"
|
||||
msgstr ""
|
||||
|
||||
msgid " Too many AMS drying simultaneously. Please plug in the power or stop other drying processes before starting."
|
||||
msgstr ""
|
||||
|
||||
msgid "AMS is busy"
|
||||
msgstr ""
|
||||
|
||||
msgid " AMS is calibrating | reading RFID | loading/unloading material, please wait."
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament in AMS outlet"
|
||||
msgstr ""
|
||||
|
||||
msgid " The high drying temperature may cause AMS blockage, please unload first."
|
||||
msgstr ""
|
||||
|
||||
msgid "Initiating AMS drying"
|
||||
msgstr ""
|
||||
|
||||
msgid "Not supported in 2D mode"
|
||||
msgstr ""
|
||||
|
||||
msgid "Task in progress"
|
||||
msgstr ""
|
||||
|
||||
msgid " The AMS might be in use during Task."
|
||||
msgstr ""
|
||||
|
||||
msgid " Firmware update in progress, please wait..."
|
||||
msgstr ""
|
||||
|
||||
msgid " Please plug in the power and then use the drying function."
|
||||
msgstr ""
|
||||
|
||||
msgid " The high drying temperature may cause AMS blockage. Please unload the filament manually before proceeding."
|
||||
msgstr ""
|
||||
|
||||
msgid "System is busy"
|
||||
msgstr ""
|
||||
|
||||
msgid " Initiating other drying processes, please wait a few seconds..."
|
||||
msgstr ""
|
||||
|
||||
msgid "For better drying results, remove the filament and allow it to rotate."
|
||||
msgstr ""
|
||||
|
||||
msgid "The AMS will automatically rotate the stored filament slots to enhance the drying performance."
|
||||
msgstr ""
|
||||
|
||||
msgid "Alternatively, you can dry the filament without removing it."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unknown filaments will be treated as PLA."
|
||||
msgstr ""
|
||||
|
||||
msgid "Please store the filament marked with an exclamation mark."
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament left in the feeder during drying may soften because the drying temperature exceeds the softening point of materials like PLA and TPU."
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking adapter connection"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking filament status"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking drying presets"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking filament location"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking air intake"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking air vent"
|
||||
msgstr ""
|
||||
|
||||
msgid "The filament may not be compatible with the current machine settings. Generic filament presets will be used."
|
||||
msgstr "El filament pot no ser compatible amb la configuració actual de la màquina. S'utilitzaran els perfils de filament genèrics."
|
||||
|
||||
@@ -20358,6 +20634,12 @@ msgstr ""
|
||||
"Evitar la deformació( warping )\n"
|
||||
"Sabíeu que quan imprimiu materials propensos a deformar-se, com ara l'ABS, augmentar adequadament la temperatura del llit pot reduir la probabilitat de deformació?"
|
||||
|
||||
#~ msgid "°C"
|
||||
#~ msgstr "°C"
|
||||
|
||||
#~ msgid "%"
|
||||
#~ msgstr "%"
|
||||
|
||||
#~ msgid "Continue to sync filaments"
|
||||
#~ msgstr "Continua sincronitzant filaments"
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Orca Slicer\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-07-13 16:24-0300\n"
|
||||
"POT-Creation-Date: 2026-07-17 15:13-0300\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: Jakub Hencl\n"
|
||||
"Language-Team: \n"
|
||||
@@ -1982,6 +1982,17 @@ msgstr "Toto je nejnovější verze."
|
||||
msgid "Info"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Plugin %s is no longer available."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Plugin %s access is unauthorized."
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading printer & filament profiles"
|
||||
msgstr ""
|
||||
|
||||
@@ -2099,6 +2110,18 @@ msgstr ""
|
||||
msgid "Resolve cloud sync conflict"
|
||||
msgstr ""
|
||||
|
||||
msgid "Syncing your account…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Migrating presets…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Fetching plugins…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading user presets…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Retrieving printer information, please try again later."
|
||||
msgstr "Načítání informací o tiskárně, zkuste to prosím později."
|
||||
|
||||
@@ -2230,6 +2253,21 @@ msgstr ""
|
||||
msgid "*"
|
||||
msgstr "*"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"Failed to open the Plugins dialog:\n"
|
||||
"%s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to open the Plugins dialog (unknown error)."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin Terminal"
|
||||
msgstr ""
|
||||
|
||||
msgid "Changing application language"
|
||||
msgstr "Měním jazyk aplikace"
|
||||
|
||||
@@ -5054,6 +5092,28 @@ msgstr "Neplatný formát. Očekávaný vektorový formát: \"%1%\""
|
||||
msgid "N/A"
|
||||
msgstr ""
|
||||
|
||||
msgid "System agents"
|
||||
msgstr ""
|
||||
|
||||
msgid "No plugin selected"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Select plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Remove plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configure"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Configure (%d)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Pick"
|
||||
msgstr "Vybrat"
|
||||
|
||||
@@ -5219,9 +5279,6 @@ msgstr "Průtok"
|
||||
msgid "Fan speed"
|
||||
msgstr "Rychlost ventilátoru"
|
||||
|
||||
msgid "°C"
|
||||
msgstr "°C"
|
||||
|
||||
msgid "Time"
|
||||
msgstr "Čas"
|
||||
|
||||
@@ -7262,6 +7319,14 @@ msgctxt "Layers"
|
||||
msgid "Bottom"
|
||||
msgstr "Spodní"
|
||||
|
||||
msgid "Plugin Selection"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"No plugins capabilities available for this type.\n"
|
||||
"Enable or install some to use."
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable detection of build plate position"
|
||||
msgstr "Povolit detekci pozice tiskové podložky"
|
||||
|
||||
@@ -8163,6 +8228,40 @@ msgstr "Stránka zařízení"
|
||||
msgid "Synchronize AMS Filament Information"
|
||||
msgstr "Synchronizovat informace o filamentech AMS"
|
||||
|
||||
msgid "OrcaCloud plugins required by the current preset are not installed:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Install Plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Local plugins required by the current preset are missing:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Find on OrcaCloud"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugins required by the current preset are not activated:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Activate Now"
|
||||
msgstr ""
|
||||
|
||||
msgid "The installed plugin does not provide the required capability — it may be outdated:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Preparing to install plugins..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Installing plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cancelling — finishing the current plugin..."
|
||||
msgstr ""
|
||||
|
||||
#, boost-format
|
||||
msgid "Installing %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plate Settings"
|
||||
msgstr "Nastavení desky"
|
||||
|
||||
@@ -9221,6 +9320,9 @@ msgstr "Vícebarevný tisk s externím filamentem"
|
||||
msgid "Your filament grouping method in the sliced file is not optimal."
|
||||
msgstr "Metoda seskupení filamentů ve slicovacím souboru není optimální."
|
||||
|
||||
msgid "To ensure print quality, the drying temperature will be lowered during printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto Bed Leveling"
|
||||
msgstr "Automatické vyrovnání podložky"
|
||||
|
||||
@@ -9949,6 +10051,12 @@ msgstr "Změnit G-code role extruze"
|
||||
msgid "Post-processing Scripts"
|
||||
msgstr "Post-processing skripty"
|
||||
|
||||
msgid "Slicing Pipeline Plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin Configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Notes"
|
||||
msgstr "Poznámky"
|
||||
|
||||
@@ -11089,6 +11197,9 @@ msgstr "Přepnout tisknutelnost objektu/části"
|
||||
msgid "Switch between Prepare/Preview"
|
||||
msgstr "Přepnout mezi Přípravou/Náhledem"
|
||||
|
||||
msgid "Open actions speed dial"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plater"
|
||||
msgstr "Deska"
|
||||
|
||||
@@ -11953,6 +12064,9 @@ msgstr "API klíč"
|
||||
msgid "HTTP digest"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configuration for the plugin capabilities this preset uses, overriding the global Capabilities configuration. Stored as a raw JSON array and edited through the dialog behind the button, never typed in directly."
|
||||
msgstr ""
|
||||
|
||||
msgid "Avoid crossing walls"
|
||||
msgstr "Vyhněte se křížení stěn"
|
||||
|
||||
@@ -12930,6 +13044,24 @@ msgstr ""
|
||||
"Hustota spodní povrchové vrstvy. Určeno pro estetické nebo funkční účely, nikoli k řešení problémů, jako je přeextruze.\n"
|
||||
"VAROVÁNÍ: Snížení této hodnoty může negativně ovlivnit přilnavost k podložce."
|
||||
|
||||
msgid "Top surface fill order"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
|
||||
"Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
|
||||
"Default uses shortest-path ordering, which may run in either direction."
|
||||
msgstr ""
|
||||
|
||||
msgid "Bottom surface fill order"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
|
||||
"Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
|
||||
"Default uses shortest-path ordering, which may run in either direction."
|
||||
msgstr ""
|
||||
|
||||
msgid "Internal solid infill pattern"
|
||||
msgstr "Vzor vnitřní plné výplně"
|
||||
|
||||
@@ -14182,9 +14314,6 @@ msgid ""
|
||||
"Set to 0 to deactivate."
|
||||
msgstr ""
|
||||
|
||||
msgid "%"
|
||||
msgstr "%"
|
||||
|
||||
msgid "Time cost"
|
||||
msgstr "Časová náročnost"
|
||||
|
||||
@@ -14885,6 +15014,9 @@ msgstr ""
|
||||
"Pro vypnutí input shapingu použijte typ Zakázat.\n"
|
||||
"RRF: Hodnoty X a Y jsou shodné."
|
||||
|
||||
msgid "Hz"
|
||||
msgstr "Hz"
|
||||
|
||||
msgid "Y"
|
||||
msgstr "Y"
|
||||
|
||||
@@ -15170,6 +15302,15 @@ msgstr "G-code při změně role extruze (proces)"
|
||||
msgid "This G-code is inserted when the extrusion role is changed. It runs after the machine and filament extrusion role G-code."
|
||||
msgstr "Tento G-code se vloží při změně role extruze. Spouští se po G-code změny role extruze tiskárny a filamentu."
|
||||
|
||||
msgid "Plugins Used"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin capabilities referenced by this preset, stored as name;uuid;capability."
|
||||
msgstr ""
|
||||
|
||||
msgid "Python plugin(s) invoked at each slicing pipeline step to read and modify intermediate slicing data, including a final G-code post-processing step. Research/experimental."
|
||||
msgstr ""
|
||||
|
||||
msgid "Printer type"
|
||||
msgstr "Typ tiskárny"
|
||||
|
||||
@@ -15238,6 +15379,15 @@ msgstr "Množství retrakce před setřením"
|
||||
msgid "This is the length of fast retraction before a wipe, relative to retraction length."
|
||||
msgstr "Délka rychlého zpětného pohybu před setřením, relativně k délce zatažení."
|
||||
|
||||
msgid "Retract amount after wipe"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The length of fast retraction after wipe, relative to retraction length.\n"
|
||||
"The value will be clamped by 100% minus the retract amount before the wipe value."
|
||||
msgstr ""
|
||||
|
||||
# TODO: Review, changed by lang refactor. PR 14254
|
||||
msgid "Retract on layer change"
|
||||
msgstr "Retrakce při změně vrstvy"
|
||||
@@ -16240,16 +16390,6 @@ msgstr "Tloušťka horního pláště"
|
||||
msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers."
|
||||
msgstr "Počet horních pevných vrstev bude při slicování zvýšen, pokud tloušťka vypočtená podle horních vrstev bude menší než tato hodnota. Tím lze předejít příliš tenké skořepině při malé výšce vrstvy. 0 znamená, že je nastavení vypnuté a tloušťka horní skořepiny je určena pouze počtem horních vrstev."
|
||||
|
||||
msgid "Anisotropic surfaces"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Anisotropic patterns on the top and bottom surfaces.\n"
|
||||
"Co-directional printing mode will be applied. For certain patterns, omni-directional filling provides color dispersion when using multi-colored or silk plastics.\n"
|
||||
"This option disable the gap fill.\n"
|
||||
"This option can increase a printing time."
|
||||
msgstr ""
|
||||
|
||||
msgid "Separated infills"
|
||||
msgstr ""
|
||||
|
||||
@@ -18081,9 +18221,6 @@ msgstr "Začátek / Konec"
|
||||
msgid "Frequency settings"
|
||||
msgstr "Nastavení frekvence"
|
||||
|
||||
msgid "Hz"
|
||||
msgstr "Hz"
|
||||
|
||||
msgid "RepRap firmware uses the same frequency range for both axes."
|
||||
msgstr "Firmware RepRap používá stejný rozsah frekvence pro obě osy."
|
||||
|
||||
@@ -20070,6 +20207,145 @@ msgstr ""
|
||||
msgid "Open File"
|
||||
msgstr ""
|
||||
|
||||
msgid "AMS Dryness Control"
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament Drying Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Stopping"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to dry temporarily due to ..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying Error"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please check the Assistant for troubleshooting"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please remove and store the filament (as shown)."
|
||||
msgstr ""
|
||||
|
||||
msgid "The AMS can rotate the filament which is properly stored, providing better drying results."
|
||||
msgstr ""
|
||||
|
||||
msgid "Rotate spool when drying"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "amsdrying"
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying-Heating"
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying-Dehumidifying"
|
||||
msgstr ""
|
||||
|
||||
msgid " maximum drying temperature is "
|
||||
msgstr ""
|
||||
|
||||
msgid " minimum drying temperature is "
|
||||
msgstr ""
|
||||
|
||||
msgid "This filament may not be completely dried."
|
||||
msgstr ""
|
||||
|
||||
msgid "This AMS is currently printing. To ensure print quality, the drying temperature cannot exceed the recommended drying temperature."
|
||||
msgstr ""
|
||||
|
||||
msgid "The temperature shall not exceed the filament's heat distortion temperature"
|
||||
msgstr ""
|
||||
|
||||
msgid "Minimum time value cannot be less than 1."
|
||||
msgstr ""
|
||||
|
||||
msgid "Maximum time value cannot be greater than 24."
|
||||
msgstr ""
|
||||
|
||||
msgid "Insufficient power"
|
||||
msgstr ""
|
||||
|
||||
msgid " Too many AMS drying simultaneously. Please plug in the power or stop other drying processes before starting."
|
||||
msgstr ""
|
||||
|
||||
msgid "AMS is busy"
|
||||
msgstr ""
|
||||
|
||||
msgid " AMS is calibrating | reading RFID | loading/unloading material, please wait."
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament in AMS outlet"
|
||||
msgstr ""
|
||||
|
||||
msgid " The high drying temperature may cause AMS blockage, please unload first."
|
||||
msgstr ""
|
||||
|
||||
msgid "Initiating AMS drying"
|
||||
msgstr ""
|
||||
|
||||
msgid "Not supported in 2D mode"
|
||||
msgstr ""
|
||||
|
||||
msgid "Task in progress"
|
||||
msgstr ""
|
||||
|
||||
msgid " The AMS might be in use during Task."
|
||||
msgstr ""
|
||||
|
||||
msgid " Firmware update in progress, please wait..."
|
||||
msgstr ""
|
||||
|
||||
msgid " Please plug in the power and then use the drying function."
|
||||
msgstr ""
|
||||
|
||||
msgid " The high drying temperature may cause AMS blockage. Please unload the filament manually before proceeding."
|
||||
msgstr ""
|
||||
|
||||
msgid "System is busy"
|
||||
msgstr ""
|
||||
|
||||
msgid " Initiating other drying processes, please wait a few seconds..."
|
||||
msgstr ""
|
||||
|
||||
msgid "For better drying results, remove the filament and allow it to rotate."
|
||||
msgstr ""
|
||||
|
||||
msgid "The AMS will automatically rotate the stored filament slots to enhance the drying performance."
|
||||
msgstr ""
|
||||
|
||||
msgid "Alternatively, you can dry the filament without removing it."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unknown filaments will be treated as PLA."
|
||||
msgstr ""
|
||||
|
||||
msgid "Please store the filament marked with an exclamation mark."
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament left in the feeder during drying may soften because the drying temperature exceeds the softening point of materials like PLA and TPU."
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking adapter connection"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking filament status"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking drying presets"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking filament location"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking air intake"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking air vent"
|
||||
msgstr ""
|
||||
|
||||
msgid "The filament may not be compatible with the current machine settings. Generic filament presets will be used."
|
||||
msgstr ""
|
||||
|
||||
@@ -20392,6 +20668,12 @@ msgstr ""
|
||||
"Zamezte kroucení\n"
|
||||
"Víte, že při tisku materiálů náchylných ke kroucení, jako je ABS, může vhodné zvýšení teploty vyhřívané desky snížit pravděpodobnost kroucení?"
|
||||
|
||||
#~ msgid "°C"
|
||||
#~ msgstr "°C"
|
||||
|
||||
#~ msgid "%"
|
||||
#~ msgstr "%"
|
||||
|
||||
#~ msgid "Align infill direction to model"
|
||||
#~ msgstr "Zarovnat směr výplně podle modelu"
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Orca Slicer\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-07-13 16:24-0300\n"
|
||||
"POT-Creation-Date: 2026-07-17 15:13-0300\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: Heiko Liebscher <hliebschergmail.com>\n"
|
||||
"Language-Team: \n"
|
||||
@@ -1986,6 +1986,17 @@ msgstr "Dies ist die neueste Version."
|
||||
msgid "Info"
|
||||
msgstr "Info"
|
||||
|
||||
msgid "Loading Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Plugin %s is no longer available."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Plugin %s access is unauthorized."
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading printer & filament profiles"
|
||||
msgstr "Lade Drucker- und Filamentprofile"
|
||||
|
||||
@@ -2105,6 +2116,18 @@ msgstr ""
|
||||
msgid "Resolve cloud sync conflict"
|
||||
msgstr "Cloud-Synchronisationskonflikt lösen"
|
||||
|
||||
msgid "Syncing your account…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Migrating presets…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Fetching plugins…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading user presets…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Retrieving printer information, please try again later."
|
||||
msgstr "Empfange Druckerinformationen, bitte später erneut versuchen."
|
||||
|
||||
@@ -2235,6 +2258,21 @@ msgstr ""
|
||||
msgid "*"
|
||||
msgstr "*"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"Failed to open the Plugins dialog:\n"
|
||||
"%s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to open the Plugins dialog (unknown error)."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin Terminal"
|
||||
msgstr ""
|
||||
|
||||
msgid "Changing application language"
|
||||
msgstr "Anwendungssprache ändern"
|
||||
|
||||
@@ -5058,6 +5096,28 @@ msgstr "Ungültiges Format. Erwartetes Vektorformat: \"%1%\""
|
||||
msgid "N/A"
|
||||
msgstr "Nicht verfügbar"
|
||||
|
||||
msgid "System agents"
|
||||
msgstr ""
|
||||
|
||||
msgid "No plugin selected"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Select plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Remove plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configure"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Configure (%d)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Pick"
|
||||
msgstr "Wähle"
|
||||
|
||||
@@ -5223,9 +5283,6 @@ msgstr "Durchflussrate"
|
||||
msgid "Fan speed"
|
||||
msgstr "Lüftergeschwindigkeit"
|
||||
|
||||
msgid "°C"
|
||||
msgstr "°C"
|
||||
|
||||
msgid "Time"
|
||||
msgstr "Zeit"
|
||||
|
||||
@@ -7260,6 +7317,14 @@ msgctxt "Layers"
|
||||
msgid "Bottom"
|
||||
msgstr "Untere"
|
||||
|
||||
msgid "Plugin Selection"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"No plugins capabilities available for this type.\n"
|
||||
"Enable or install some to use."
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable detection of build plate position"
|
||||
msgstr "Positionserkennung der Druckplatte aktivieren"
|
||||
|
||||
@@ -8170,6 +8235,40 @@ msgstr "Geräteseite"
|
||||
msgid "Synchronize AMS Filament Information"
|
||||
msgstr "Synchronisiere AMS-Filamentinformationen"
|
||||
|
||||
msgid "OrcaCloud plugins required by the current preset are not installed:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Install Plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Local plugins required by the current preset are missing:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Find on OrcaCloud"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugins required by the current preset are not activated:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Activate Now"
|
||||
msgstr ""
|
||||
|
||||
msgid "The installed plugin does not provide the required capability — it may be outdated:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Preparing to install plugins..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Installing plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cancelling — finishing the current plugin..."
|
||||
msgstr ""
|
||||
|
||||
#, boost-format
|
||||
msgid "Installing %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plate Settings"
|
||||
msgstr "Druck-Platteneinstellungen"
|
||||
|
||||
@@ -9246,6 +9345,9 @@ msgstr "Mehrfarben mit externen Spulen"
|
||||
msgid "Your filament grouping method in the sliced file is not optimal."
|
||||
msgstr "Ihre Filament-Gruppierungsmethode in der gesliceten Datei ist nicht optimal."
|
||||
|
||||
msgid "To ensure print quality, the drying temperature will be lowered during printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto Bed Leveling"
|
||||
msgstr "Automatische Bett-Nivellierung"
|
||||
|
||||
@@ -9972,6 +10074,12 @@ msgstr "Ändere den G-Code der Extrusionsart"
|
||||
msgid "Post-processing Scripts"
|
||||
msgstr "Nachbearbeitungsskripte"
|
||||
|
||||
msgid "Slicing Pipeline Plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin Configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Notes"
|
||||
msgstr "Notizen"
|
||||
|
||||
@@ -11118,6 +11226,9 @@ msgstr "Druckbar für Objekt/Teil umschalten"
|
||||
msgid "Switch between Prepare/Preview"
|
||||
msgstr "Zwischen Vorbereiten/ Vorschau wechseln"
|
||||
|
||||
msgid "Open actions speed dial"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plater"
|
||||
msgstr "Druckplatte"
|
||||
|
||||
@@ -11985,6 +12096,9 @@ msgstr "API-Schlüssel"
|
||||
msgid "HTTP digest"
|
||||
msgstr "HTTP-Digest"
|
||||
|
||||
msgid "Configuration for the plugin capabilities this preset uses, overriding the global Capabilities configuration. Stored as a raw JSON array and edited through the dialog behind the button, never typed in directly."
|
||||
msgstr ""
|
||||
|
||||
msgid "Avoid crossing walls"
|
||||
msgstr "Vermeiden von Wandüberquerungen"
|
||||
|
||||
@@ -13017,6 +13131,24 @@ msgstr ""
|
||||
"Dichte der unteren Oberflächenschicht. Diese Einstellung dient ästhetischen oder funktionalen Zwecken und nicht zur Behebung von Problemen wie Überextrusion.\n"
|
||||
"ACHTUNG: Eine Verringerung dieses Wertes kann die Haftung am Druckbett negativ beeinflussen."
|
||||
|
||||
msgid "Top surface fill order"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
|
||||
"Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
|
||||
"Default uses shortest-path ordering, which may run in either direction."
|
||||
msgstr ""
|
||||
|
||||
msgid "Bottom surface fill order"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
|
||||
"Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
|
||||
"Default uses shortest-path ordering, which may run in either direction."
|
||||
msgstr ""
|
||||
|
||||
msgid "Internal solid infill pattern"
|
||||
msgstr "Muster für das interne feste Füllmuster"
|
||||
|
||||
@@ -14270,9 +14402,6 @@ msgstr ""
|
||||
"\n"
|
||||
"Setze den Wert auf 0, um diese Funktion zu deaktivieren."
|
||||
|
||||
msgid "%"
|
||||
msgstr "%"
|
||||
|
||||
msgid "Time cost"
|
||||
msgstr "Druckzeit Kosten"
|
||||
|
||||
@@ -14974,6 +15103,9 @@ msgstr ""
|
||||
"Um die Eingangsformung zu deaktivieren, verwenden Sie den Typ Deaktivieren.\n"
|
||||
"RRF: X- und Y-Werte sind gleich."
|
||||
|
||||
msgid "Hz"
|
||||
msgstr "Hz"
|
||||
|
||||
msgid "Y"
|
||||
msgstr "Y"
|
||||
|
||||
@@ -15261,6 +15393,15 @@ msgstr "G-Code für den Wechsel der Extrusionsrolle (Prozess)"
|
||||
msgid "This G-code is inserted when the extrusion role is changed. It runs after the machine and filament extrusion role G-code."
|
||||
msgstr "Dieser G-Code wird eingefügt, wenn die Extrusionsrolle gewechselt wird. Er wird nach dem G-Code für die Maschine und die Filamentextrusionsrolle ausgeführt."
|
||||
|
||||
msgid "Plugins Used"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin capabilities referenced by this preset, stored as name;uuid;capability."
|
||||
msgstr ""
|
||||
|
||||
msgid "Python plugin(s) invoked at each slicing pipeline step to read and modify intermediate slicing data, including a final G-code post-processing step. Research/experimental."
|
||||
msgstr ""
|
||||
|
||||
msgid "Printer type"
|
||||
msgstr "Druckertyp"
|
||||
|
||||
@@ -15329,6 +15470,15 @@ msgstr "Rückzugsmenge vor der Reinigung"
|
||||
msgid "This is the length of fast retraction before a wipe, relative to retraction length."
|
||||
msgstr "Die Länge des schnellen Rückzugs vor dem Abwischen, relativ zur Rückzugslänge."
|
||||
|
||||
msgid "Retract amount after wipe"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The length of fast retraction after wipe, relative to retraction length.\n"
|
||||
"The value will be clamped by 100% minus the retract amount before the wipe value."
|
||||
msgstr ""
|
||||
|
||||
# TODO: Review, changed by lang refactor. PR 14254
|
||||
msgid "Retract on layer change"
|
||||
msgstr "Zurückziehen beim Schichtwechsel"
|
||||
@@ -16356,16 +16506,6 @@ msgstr "Dicke der oberen Schale"
|
||||
msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers."
|
||||
msgstr "Die Anzahl der oberen festen Schichten wird beim Slicen erhöht, wenn die obere Schalenstärke dünner als dieser Wert ist. Dies kann verhindern, dass die Schale zu dünn wird, wenn eine geringe Schichthöhe verwendet wird. 0 bedeutet, dass diese Einstellung deaktiviert ist und die Dicke der oberen Schale absolut durch die oberen Schalenschichten bestimmt wird."
|
||||
|
||||
msgid "Anisotropic surfaces"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Anisotropic patterns on the top and bottom surfaces.\n"
|
||||
"Co-directional printing mode will be applied. For certain patterns, omni-directional filling provides color dispersion when using multi-colored or silk plastics.\n"
|
||||
"This option disable the gap fill.\n"
|
||||
"This option can increase a printing time."
|
||||
msgstr ""
|
||||
|
||||
msgid "Separated infills"
|
||||
msgstr ""
|
||||
|
||||
@@ -18197,9 +18337,6 @@ msgstr "Start / Ende"
|
||||
msgid "Frequency settings"
|
||||
msgstr "Frequenz Einstellungen"
|
||||
|
||||
msgid "Hz"
|
||||
msgstr "Hz"
|
||||
|
||||
msgid "RepRap firmware uses the same frequency range for both axes."
|
||||
msgstr "RepRap-Firmware verwendet denselben Frequenzbereich für beide Achsen."
|
||||
|
||||
@@ -20200,6 +20337,145 @@ msgstr "Archivvorschau"
|
||||
msgid "Open File"
|
||||
msgstr "Datei öffnen"
|
||||
|
||||
msgid "AMS Dryness Control"
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament Drying Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Stopping"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to dry temporarily due to ..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying Error"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please check the Assistant for troubleshooting"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please remove and store the filament (as shown)."
|
||||
msgstr ""
|
||||
|
||||
msgid "The AMS can rotate the filament which is properly stored, providing better drying results."
|
||||
msgstr ""
|
||||
|
||||
msgid "Rotate spool when drying"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "amsdrying"
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying-Heating"
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying-Dehumidifying"
|
||||
msgstr ""
|
||||
|
||||
msgid " maximum drying temperature is "
|
||||
msgstr ""
|
||||
|
||||
msgid " minimum drying temperature is "
|
||||
msgstr ""
|
||||
|
||||
msgid "This filament may not be completely dried."
|
||||
msgstr ""
|
||||
|
||||
msgid "This AMS is currently printing. To ensure print quality, the drying temperature cannot exceed the recommended drying temperature."
|
||||
msgstr ""
|
||||
|
||||
msgid "The temperature shall not exceed the filament's heat distortion temperature"
|
||||
msgstr ""
|
||||
|
||||
msgid "Minimum time value cannot be less than 1."
|
||||
msgstr ""
|
||||
|
||||
msgid "Maximum time value cannot be greater than 24."
|
||||
msgstr ""
|
||||
|
||||
msgid "Insufficient power"
|
||||
msgstr ""
|
||||
|
||||
msgid " Too many AMS drying simultaneously. Please plug in the power or stop other drying processes before starting."
|
||||
msgstr ""
|
||||
|
||||
msgid "AMS is busy"
|
||||
msgstr ""
|
||||
|
||||
msgid " AMS is calibrating | reading RFID | loading/unloading material, please wait."
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament in AMS outlet"
|
||||
msgstr ""
|
||||
|
||||
msgid " The high drying temperature may cause AMS blockage, please unload first."
|
||||
msgstr ""
|
||||
|
||||
msgid "Initiating AMS drying"
|
||||
msgstr ""
|
||||
|
||||
msgid "Not supported in 2D mode"
|
||||
msgstr ""
|
||||
|
||||
msgid "Task in progress"
|
||||
msgstr ""
|
||||
|
||||
msgid " The AMS might be in use during Task."
|
||||
msgstr ""
|
||||
|
||||
msgid " Firmware update in progress, please wait..."
|
||||
msgstr ""
|
||||
|
||||
msgid " Please plug in the power and then use the drying function."
|
||||
msgstr ""
|
||||
|
||||
msgid " The high drying temperature may cause AMS blockage. Please unload the filament manually before proceeding."
|
||||
msgstr ""
|
||||
|
||||
msgid "System is busy"
|
||||
msgstr ""
|
||||
|
||||
msgid " Initiating other drying processes, please wait a few seconds..."
|
||||
msgstr ""
|
||||
|
||||
msgid "For better drying results, remove the filament and allow it to rotate."
|
||||
msgstr ""
|
||||
|
||||
msgid "The AMS will automatically rotate the stored filament slots to enhance the drying performance."
|
||||
msgstr ""
|
||||
|
||||
msgid "Alternatively, you can dry the filament without removing it."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unknown filaments will be treated as PLA."
|
||||
msgstr ""
|
||||
|
||||
msgid "Please store the filament marked with an exclamation mark."
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament left in the feeder during drying may soften because the drying temperature exceeds the softening point of materials like PLA and TPU."
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking adapter connection"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking filament status"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking drying presets"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking filament location"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking air intake"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking air vent"
|
||||
msgstr ""
|
||||
|
||||
msgid "The filament may not be compatible with the current machine settings. Generic filament presets will be used."
|
||||
msgstr "Das Filament ist möglicherweise nicht mit den aktuellen Maschineneinstellungen kompatibel. Es werden generische Filament-Profile verwendet."
|
||||
|
||||
@@ -20524,6 +20800,12 @@ msgstr ""
|
||||
"Verwerfungen vermeiden\n"
|
||||
"Wussten Sie, dass beim Drucken von Materialien, die zu Verwerfungen neigen, wie z.B. ABS, durch eine entsprechende Erhöhung der Heizbetttemperatur die Wahrscheinlichkeit von Verwerfungen verringert werden kann?"
|
||||
|
||||
#~ msgid "°C"
|
||||
#~ msgstr "°C"
|
||||
|
||||
#~ msgid "%"
|
||||
#~ msgstr "%"
|
||||
|
||||
#~ msgid "Renders cast shadows on the plate in realistic view."
|
||||
#~ msgstr "Zeigt geworfene Schatten auf der Platte in der realistischen Ansicht an."
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Orca Slicer\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-07-13 16:24-0300\n"
|
||||
"POT-Creation-Date: 2026-07-17 15:13-0300\n"
|
||||
"PO-Revision-Date: 2026-06-17 15:44-0300\n"
|
||||
"Last-Translator: Alexandre Folle de Menezes\n"
|
||||
"Language-Team: \n"
|
||||
@@ -1931,6 +1931,17 @@ msgstr ""
|
||||
msgid "Info"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Plugin %s is no longer available."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Plugin %s access is unauthorized."
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading printer & filament profiles"
|
||||
msgstr ""
|
||||
|
||||
@@ -2044,6 +2055,18 @@ msgstr ""
|
||||
msgid "Resolve cloud sync conflict"
|
||||
msgstr ""
|
||||
|
||||
msgid "Syncing your account…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Migrating presets…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Fetching plugins…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading user presets…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Retrieving printer information, please try again later."
|
||||
msgstr ""
|
||||
|
||||
@@ -2162,6 +2185,21 @@ msgstr ""
|
||||
msgid "*"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"Failed to open the Plugins dialog:\n"
|
||||
"%s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to open the Plugins dialog (unknown error)."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin Terminal"
|
||||
msgstr ""
|
||||
|
||||
msgid "Changing application language"
|
||||
msgstr ""
|
||||
|
||||
@@ -4805,6 +4843,28 @@ msgstr ""
|
||||
msgid "N/A"
|
||||
msgstr ""
|
||||
|
||||
msgid "System agents"
|
||||
msgstr ""
|
||||
|
||||
msgid "No plugin selected"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Select plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Remove plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configure"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Configure (%d)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Pick"
|
||||
msgstr ""
|
||||
|
||||
@@ -4970,9 +5030,6 @@ msgstr ""
|
||||
msgid "Fan speed"
|
||||
msgstr ""
|
||||
|
||||
msgid "°C"
|
||||
msgstr ""
|
||||
|
||||
msgid "Time"
|
||||
msgstr ""
|
||||
|
||||
@@ -6935,6 +6992,14 @@ msgctxt "Layers"
|
||||
msgid "Bottom"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin Selection"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"No plugins capabilities available for this type.\n"
|
||||
"Enable or install some to use."
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable detection of build plate position"
|
||||
msgstr ""
|
||||
|
||||
@@ -7787,6 +7852,40 @@ msgstr ""
|
||||
msgid "Synchronize AMS Filament Information"
|
||||
msgstr ""
|
||||
|
||||
msgid "OrcaCloud plugins required by the current preset are not installed:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Install Plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Local plugins required by the current preset are missing:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Find on OrcaCloud"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugins required by the current preset are not activated:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Activate Now"
|
||||
msgstr ""
|
||||
|
||||
msgid "The installed plugin does not provide the required capability — it may be outdated:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Preparing to install plugins..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Installing plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cancelling — finishing the current plugin..."
|
||||
msgstr ""
|
||||
|
||||
#, boost-format
|
||||
msgid "Installing %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plate Settings"
|
||||
msgstr ""
|
||||
|
||||
@@ -8810,6 +8909,9 @@ msgstr ""
|
||||
msgid "Your filament grouping method in the sliced file is not optimal."
|
||||
msgstr ""
|
||||
|
||||
msgid "To ensure print quality, the drying temperature will be lowered during printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto Bed Leveling"
|
||||
msgstr ""
|
||||
|
||||
@@ -9503,6 +9605,12 @@ msgstr ""
|
||||
msgid "Post-processing Scripts"
|
||||
msgstr ""
|
||||
|
||||
msgid "Slicing Pipeline Plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin Configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Notes"
|
||||
msgstr ""
|
||||
|
||||
@@ -10579,6 +10687,9 @@ msgstr ""
|
||||
msgid "Switch between Prepare/Preview"
|
||||
msgstr ""
|
||||
|
||||
msgid "Open actions speed dial"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plater"
|
||||
msgstr ""
|
||||
|
||||
@@ -11390,6 +11501,9 @@ msgstr ""
|
||||
msgid "HTTP digest"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configuration for the plugin capabilities this preset uses, overriding the global Capabilities configuration. Stored as a raw JSON array and edited through the dialog behind the button, never typed in directly."
|
||||
msgstr ""
|
||||
|
||||
msgid "Avoid crossing walls"
|
||||
msgstr ""
|
||||
|
||||
@@ -12226,6 +12340,24 @@ msgid ""
|
||||
"WARNING: Lowering this value may negatively affect bed adhesion."
|
||||
msgstr ""
|
||||
|
||||
msgid "Top surface fill order"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
|
||||
"Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
|
||||
"Default uses shortest-path ordering, which may run in either direction."
|
||||
msgstr ""
|
||||
|
||||
msgid "Bottom surface fill order"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
|
||||
"Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
|
||||
"Default uses shortest-path ordering, which may run in either direction."
|
||||
msgstr ""
|
||||
|
||||
msgid "Internal solid infill pattern"
|
||||
msgstr ""
|
||||
|
||||
@@ -13354,9 +13486,6 @@ msgid ""
|
||||
"Set to 0 to deactivate."
|
||||
msgstr ""
|
||||
|
||||
msgid "%"
|
||||
msgstr ""
|
||||
|
||||
msgid "Time cost"
|
||||
msgstr ""
|
||||
|
||||
@@ -14007,6 +14136,9 @@ msgid ""
|
||||
"RRF: X and Y values are equal."
|
||||
msgstr ""
|
||||
|
||||
msgid "Hz"
|
||||
msgstr ""
|
||||
|
||||
msgid "Y"
|
||||
msgstr ""
|
||||
|
||||
@@ -14247,6 +14379,15 @@ msgstr ""
|
||||
msgid "This G-code is inserted when the extrusion role is changed. It runs after the machine and filament extrusion role G-code."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugins Used"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin capabilities referenced by this preset, stored as name;uuid;capability."
|
||||
msgstr ""
|
||||
|
||||
msgid "Python plugin(s) invoked at each slicing pipeline step to read and modify intermediate slicing data, including a final G-code post-processing step. Research/experimental."
|
||||
msgstr ""
|
||||
|
||||
msgid "Printer type"
|
||||
msgstr ""
|
||||
|
||||
@@ -14307,6 +14448,15 @@ msgstr ""
|
||||
msgid "This is the length of fast retraction before a wipe, relative to retraction length."
|
||||
msgstr ""
|
||||
|
||||
msgid "Retract amount after wipe"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The length of fast retraction after wipe, relative to retraction length.\n"
|
||||
"The value will be clamped by 100% minus the retract amount before the wipe value."
|
||||
msgstr ""
|
||||
|
||||
msgid "Retract on layer change"
|
||||
msgstr ""
|
||||
|
||||
@@ -15239,16 +15389,6 @@ msgstr ""
|
||||
msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers."
|
||||
msgstr ""
|
||||
|
||||
msgid "Anisotropic surfaces"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Anisotropic patterns on the top and bottom surfaces.\n"
|
||||
"Co-directional printing mode will be applied. For certain patterns, omni-directional filling provides color dispersion when using multi-colored or silk plastics.\n"
|
||||
"This option disable the gap fill.\n"
|
||||
"This option can increase a printing time."
|
||||
msgstr ""
|
||||
|
||||
msgid "Separated infills"
|
||||
msgstr ""
|
||||
|
||||
@@ -16956,9 +17096,6 @@ msgstr ""
|
||||
msgid "Frequency settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hz"
|
||||
msgstr ""
|
||||
|
||||
msgid "RepRap firmware uses the same frequency range for both axes."
|
||||
msgstr ""
|
||||
|
||||
@@ -18862,6 +18999,145 @@ msgstr ""
|
||||
msgid "Open File"
|
||||
msgstr ""
|
||||
|
||||
msgid "AMS Dryness Control"
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament Drying Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Stopping"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to dry temporarily due to ..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying Error"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please check the Assistant for troubleshooting"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please remove and store the filament (as shown)."
|
||||
msgstr ""
|
||||
|
||||
msgid "The AMS can rotate the filament which is properly stored, providing better drying results."
|
||||
msgstr ""
|
||||
|
||||
msgid "Rotate spool when drying"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "amsdrying"
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying-Heating"
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying-Dehumidifying"
|
||||
msgstr ""
|
||||
|
||||
msgid " maximum drying temperature is "
|
||||
msgstr ""
|
||||
|
||||
msgid " minimum drying temperature is "
|
||||
msgstr ""
|
||||
|
||||
msgid "This filament may not be completely dried."
|
||||
msgstr ""
|
||||
|
||||
msgid "This AMS is currently printing. To ensure print quality, the drying temperature cannot exceed the recommended drying temperature."
|
||||
msgstr ""
|
||||
|
||||
msgid "The temperature shall not exceed the filament's heat distortion temperature"
|
||||
msgstr ""
|
||||
|
||||
msgid "Minimum time value cannot be less than 1."
|
||||
msgstr ""
|
||||
|
||||
msgid "Maximum time value cannot be greater than 24."
|
||||
msgstr ""
|
||||
|
||||
msgid "Insufficient power"
|
||||
msgstr ""
|
||||
|
||||
msgid " Too many AMS drying simultaneously. Please plug in the power or stop other drying processes before starting."
|
||||
msgstr ""
|
||||
|
||||
msgid "AMS is busy"
|
||||
msgstr ""
|
||||
|
||||
msgid " AMS is calibrating | reading RFID | loading/unloading material, please wait."
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament in AMS outlet"
|
||||
msgstr ""
|
||||
|
||||
msgid " The high drying temperature may cause AMS blockage, please unload first."
|
||||
msgstr ""
|
||||
|
||||
msgid "Initiating AMS drying"
|
||||
msgstr ""
|
||||
|
||||
msgid "Not supported in 2D mode"
|
||||
msgstr ""
|
||||
|
||||
msgid "Task in progress"
|
||||
msgstr ""
|
||||
|
||||
msgid " The AMS might be in use during Task."
|
||||
msgstr ""
|
||||
|
||||
msgid " Firmware update in progress, please wait..."
|
||||
msgstr ""
|
||||
|
||||
msgid " Please plug in the power and then use the drying function."
|
||||
msgstr ""
|
||||
|
||||
msgid " The high drying temperature may cause AMS blockage. Please unload the filament manually before proceeding."
|
||||
msgstr ""
|
||||
|
||||
msgid "System is busy"
|
||||
msgstr ""
|
||||
|
||||
msgid " Initiating other drying processes, please wait a few seconds..."
|
||||
msgstr ""
|
||||
|
||||
msgid "For better drying results, remove the filament and allow it to rotate."
|
||||
msgstr ""
|
||||
|
||||
msgid "The AMS will automatically rotate the stored filament slots to enhance the drying performance."
|
||||
msgstr ""
|
||||
|
||||
msgid "Alternatively, you can dry the filament without removing it."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unknown filaments will be treated as PLA."
|
||||
msgstr ""
|
||||
|
||||
msgid "Please store the filament marked with an exclamation mark."
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament left in the feeder during drying may soften because the drying temperature exceeds the softening point of materials like PLA and TPU."
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking adapter connection"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking filament status"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking drying presets"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking filament location"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking air intake"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking air vent"
|
||||
msgstr ""
|
||||
|
||||
msgid "The filament may not be compatible with the current machine settings. Generic filament presets will be used."
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Orca Slicer\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-07-13 16:24-0300\n"
|
||||
"POT-Creation-Date: 2026-07-17 15:13-0300\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: Ian A. Bassi <>\n"
|
||||
"Language-Team: \n"
|
||||
@@ -36,22 +36,22 @@ msgid "AMS does not support 'Bambu Lab PET-CF'."
|
||||
msgstr "'Bambu Lab PET-CF' no soportado por el AMS."
|
||||
|
||||
msgid "The current filament doesn't support the E3D high-flow nozzle and can't be used."
|
||||
msgstr ""
|
||||
msgstr "El filamento actual no es compatible con la boquilla de alto flujo E3D y no se puede utilizar."
|
||||
|
||||
msgid "The current filament doesn't support the TPU high-flow nozzle and can't be used."
|
||||
msgstr ""
|
||||
msgstr "El filamento actual no es compatible con la boquilla de alto flujo para TPU y no se puede utilizar."
|
||||
|
||||
msgid "Auto dynamic flow calibration is not supported for TPU filament."
|
||||
msgstr ""
|
||||
msgstr "La calibración dinámica automática de flujo no es compatible con el filamento TPU."
|
||||
|
||||
msgid "Bambu TPU 85A is not supported for printing with 0.4 mm Standard or High Flow nozzles."
|
||||
msgstr ""
|
||||
msgstr "El Bambu TPU 85A no es compatible con la impresión con boquillas estándar o de alto flujo de 0,4 mm."
|
||||
|
||||
msgid "How to feed TPU filament."
|
||||
msgstr ""
|
||||
msgstr "Cómo alimentar el filamento TPU."
|
||||
|
||||
msgid "How to feed TPU filament on X2D."
|
||||
msgstr ""
|
||||
msgstr "Cómo alimentar el filamento TPU en la X2D."
|
||||
|
||||
msgid "Please cold pull before printing TPU to avoid clogging. You may use cold pull maintenance on the printer."
|
||||
msgstr "Por favor, realice un cold pull antes de imprimir TPU para evitar obstrucciones. Puede utilizar el cold pull de mantenimiento de la impresora."
|
||||
@@ -66,7 +66,7 @@ msgid "The rough surface of PLA Glow can accelerate wear on the AMS system, part
|
||||
msgstr "La superficie rugosa del PLA Glow puede acelerar el desgaste del sistema AMS, especialmente en los componentes internos del AMS Lite."
|
||||
|
||||
msgid "PLA Glow may wear the AMS first stage feeder. Use an external spool instead."
|
||||
msgstr ""
|
||||
msgstr "El PLA Glow puede desgastar el alimentador de primera etapa del AMS. Utilice un carrete externo en su lugar."
|
||||
|
||||
msgid "CF/GF filaments are hard and brittle, it's easy to break or get stuck in AMS, please use with caution."
|
||||
msgstr "Los filamentos CF/GF son duros y quebradizos. Es fácil romperlos o crear atascos en el AMS, por favor úselos con precaución."
|
||||
@@ -78,23 +78,23 @@ msgid "PPA-CF is brittle and could break in bended PTFE tube above Toolhead."
|
||||
msgstr "PPA-CF es quebradizo y podría romperse en el tubo PTFE doblado por encima del cabezal de la herramienta."
|
||||
|
||||
msgid "Default settings may affect print quality. Adjust as needed for best results."
|
||||
msgstr ""
|
||||
msgstr "La configuración predeterminada puede afectar a la calidad de impresión. Ajústela según sea necesario para obtener los mejores resultados."
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "%s has a risk of nozzle clogging when using 0.4mm high-flow nozzles. Use with caution."
|
||||
msgstr ""
|
||||
msgstr "%s tiene riesgo de obstrucción de la boquilla al usar boquillas de alto flujo de 0,4 mm. Úselo con precaución."
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "%s filaments are hard and brittle and could break in AMS, and there is also a risk of nozzle clogging when using 0.4mm high-flow nozzles. Use with caution."
|
||||
msgstr ""
|
||||
msgstr "Los filamentos %s son duros y quebradizos y podrían romperse en el AMS; además, existe riesgo de obstrucción de la boquilla al usar boquillas de alto flujo de 0,4 mm. Úselo con precaución."
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "%s has a risk of nozzle clogging when using 0.4, 0.6, 0.8mm high-flow nozzles. Use with caution."
|
||||
msgstr ""
|
||||
msgstr "%s tiene riesgo de obstrucción de la boquilla al usar boquillas de alto flujo de 0,4, 0,6 y 0,8 mm. Úselo con precaución."
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "%s may fail to load or unload due to the Filament Track Switch. If you wish to continue."
|
||||
msgstr ""
|
||||
msgstr "%s puede fallar al cargar o descargar debido al Filament Track Switch. Si desea continuar."
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "%s is not supported by %s extruder."
|
||||
@@ -102,19 +102,19 @@ msgstr "%s no es compatible con el extrusor %s."
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "There may be critical print quality issues when printing '%s' with %s Bowden extruder. Use with caution!"
|
||||
msgstr ""
|
||||
msgstr "Puede haber problemas críticos de calidad de impresión al imprimir '%s' con el extrusor Bowden %s. ¡Úselo con precaución!"
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "There may be critical print quality issues when printing '%s' with %s extruder. Use with caution!"
|
||||
msgstr ""
|
||||
msgstr "Puede haber problemas críticos de calidad de impresión al imprimir '%s' con el extrusor %s. ¡Úselo con precaución!"
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "There may be print quality issues when printing '%s' with %s Bowden extruder. Use with caution."
|
||||
msgstr ""
|
||||
msgstr "Puede haber problemas de calidad de impresión al imprimir '%s' con el extrusor Bowden %s. Úselo con precaución."
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "There may be print quality issues when printing '%s' with %s extruder. Use with caution."
|
||||
msgstr ""
|
||||
msgstr "Puede haber problemas de calidad de impresión al imprimir '%s' con el extrusor %s. Úselo con precaución."
|
||||
|
||||
msgid "High Flow"
|
||||
msgstr "Flujo alto"
|
||||
@@ -1971,6 +1971,17 @@ msgstr "Esta es la versión más reciente."
|
||||
msgid "Info"
|
||||
msgstr "Información"
|
||||
|
||||
msgid "Loading Plugins"
|
||||
msgstr "Cargando plugins"
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Plugin %s is no longer available."
|
||||
msgstr "El plugin %s ya no está disponible."
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Plugin %s access is unauthorized."
|
||||
msgstr "El acceso al plugin %s no está autorizado."
|
||||
|
||||
msgid "Loading printer & filament profiles"
|
||||
msgstr "Cargando perfiles de impresora y filamento"
|
||||
|
||||
@@ -2099,6 +2110,18 @@ msgstr ""
|
||||
msgid "Resolve cloud sync conflict"
|
||||
msgstr "Resolver conflictos de sincronización con la nube"
|
||||
|
||||
msgid "Syncing your account…"
|
||||
msgstr "Sincronizando tu cuenta…"
|
||||
|
||||
msgid "Migrating presets…"
|
||||
msgstr "Migrando perfiles…"
|
||||
|
||||
msgid "Fetching plugins…"
|
||||
msgstr "Obteniendo plugins…"
|
||||
|
||||
msgid "Loading user presets…"
|
||||
msgstr "Cargando perfiles de usuario…"
|
||||
|
||||
msgid "Retrieving printer information, please try again later."
|
||||
msgstr "Recuperando información de la impresora, por favor, inténtelo de nuevo más tarde."
|
||||
|
||||
@@ -2231,6 +2254,23 @@ msgstr "Orca Slicer - Error al cambiar el idioma"
|
||||
msgid "*"
|
||||
msgstr "*"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr "Plugins"
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"Failed to open the Plugins dialog:\n"
|
||||
"%s"
|
||||
msgstr ""
|
||||
"No se pudo abrir el cuadro de diálogo de plugins:\n"
|
||||
"%s"
|
||||
|
||||
msgid "Failed to open the Plugins dialog (unknown error)."
|
||||
msgstr "No se pudo abrir el cuadro de diálogo de plugins (error desconocido)."
|
||||
|
||||
msgid "Plugin Terminal"
|
||||
msgstr "Terminal de plugins"
|
||||
|
||||
msgid "Changing application language"
|
||||
msgstr "Cambiar el idioma de la aplicación"
|
||||
|
||||
@@ -3239,7 +3279,7 @@ msgid "Filament type is unknown which is required to perform this action. Please
|
||||
msgstr "Se desconoce el tipo de filamento necesario para realizar esta acción. Configure la información del filamento de destino."
|
||||
|
||||
msgid "AMS has not been initialized. Please initialize it before use."
|
||||
msgstr ""
|
||||
msgstr "El AMS no se ha inicializado. Inicialícelo antes de usarlo."
|
||||
|
||||
msgid "Changing fan speed during printing may affect print quality, please choose carefully."
|
||||
msgstr "Cambiar la velocidad del ventilador durante la impresión puede afectar a la calidad de impresión, por lo que se recomienda elegir con cuidado."
|
||||
@@ -3363,22 +3403,22 @@ msgid "Check filament location"
|
||||
msgstr "Probar localización de filamento"
|
||||
|
||||
msgid "Switch"
|
||||
msgstr ""
|
||||
msgstr "Cambiar"
|
||||
|
||||
msgid "hotend"
|
||||
msgstr ""
|
||||
msgstr "hotend"
|
||||
|
||||
msgid "Wait for AMS cooling"
|
||||
msgstr ""
|
||||
msgstr "Esperar a que se enfríe el AMS"
|
||||
|
||||
msgid "Switch current filament at Filament Track Switch"
|
||||
msgstr ""
|
||||
msgstr "Cambiar el filamento actual en el Filament Track Switch"
|
||||
|
||||
msgid "Pull back current filament at Filament Track Switch"
|
||||
msgstr ""
|
||||
msgstr "Retirar el filamento actual en el Filament Track Switch"
|
||||
|
||||
msgid "Switch track at Filament Track Switch"
|
||||
msgstr ""
|
||||
msgstr "Cambiar de vía en el Filament Track Switch"
|
||||
|
||||
msgid "The maximum temperature cannot exceed "
|
||||
msgstr "La temperatura máxima no puede superar "
|
||||
@@ -3432,7 +3472,7 @@ msgid "Launch troubleshoot center"
|
||||
msgstr "Abrir el centro de resolución de problemas"
|
||||
|
||||
msgid "Set nozzle count"
|
||||
msgstr ""
|
||||
msgstr "Establecer el número de boquillas"
|
||||
|
||||
msgid "Please set nozzle count"
|
||||
msgstr "Por favor, configure el número de boquillas"
|
||||
@@ -4021,7 +4061,7 @@ msgid "Printing with the current nozzle may produce an extra %0.2f g of waste."
|
||||
msgstr "La impresión con la boquilla actual puede producir un extra de %0.2f g de desperdicio."
|
||||
|
||||
msgid "External spools is not supported since Filament Track Switch has been installed. If you want to use external spool, please uninstall it."
|
||||
msgstr ""
|
||||
msgstr "Los carretes externos no son compatibles porque se ha instalado el Filament Track Switch. Si desea utilizar un carrete externo, desinstálelo."
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Note: the filament type(%s) does not match with the filament type(%s) in the slicing file. If you want to use this slot, you can install %s instead of %s and change slot information on the 'Device' page."
|
||||
@@ -4963,6 +5003,28 @@ msgstr "Formato inválido. Formato de vector esperado: \"%1%\""
|
||||
msgid "N/A"
|
||||
msgstr "N/A"
|
||||
|
||||
msgid "System agents"
|
||||
msgstr "Agentes del sistema"
|
||||
|
||||
msgid "No plugin selected"
|
||||
msgstr "Ningún plugin seleccionado"
|
||||
|
||||
msgid "Add plugin"
|
||||
msgstr "Añadir plugin"
|
||||
|
||||
msgid "Select plugin"
|
||||
msgstr "Seleccionar plugin"
|
||||
|
||||
msgid "Remove plugin"
|
||||
msgstr "Eliminar plugin"
|
||||
|
||||
msgid "Configure"
|
||||
msgstr "Configurar"
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Configure (%d)"
|
||||
msgstr "Configurar (%d)"
|
||||
|
||||
msgid "Pick"
|
||||
msgstr "Seleccionar"
|
||||
|
||||
@@ -5128,9 +5190,6 @@ msgstr "Test de Flujo"
|
||||
msgid "Fan speed"
|
||||
msgstr "Velocidad del ventilador"
|
||||
|
||||
msgid "°C"
|
||||
msgstr "°C"
|
||||
|
||||
msgid "Time"
|
||||
msgstr "Tiempo"
|
||||
|
||||
@@ -6662,7 +6721,7 @@ msgid "Safety Options"
|
||||
msgstr "Opciones de seguridad"
|
||||
|
||||
msgid "Hotends"
|
||||
msgstr ""
|
||||
msgstr "Hotends"
|
||||
|
||||
msgid "Lamp"
|
||||
msgstr "Luz"
|
||||
@@ -6698,10 +6757,10 @@ msgid "Current extruder is busy changing filament."
|
||||
msgstr "El extrusor actual está ocupado cambiando el filamento."
|
||||
|
||||
msgid "\"Load\" or \"Unload\" is not supported for external spool while using Filament Track Switch."
|
||||
msgstr ""
|
||||
msgstr "\"Cargar\" o \"Descargar\" no es compatible con el carrete externo mientras se usa el Filament Track Switch."
|
||||
|
||||
msgid "The Filament Track Switch has not been setup. Please setup on printer."
|
||||
msgstr ""
|
||||
msgstr "El Filament Track Switch no se ha configurado. Configúrelo en la impresora."
|
||||
|
||||
msgid "Current slot has already been loaded."
|
||||
msgstr "La ranura actual ya está cargada."
|
||||
@@ -7133,6 +7192,16 @@ msgctxt "Layers"
|
||||
msgid "Bottom"
|
||||
msgstr "Inferior"
|
||||
|
||||
msgid "Plugin Selection"
|
||||
msgstr "Selección de plugins"
|
||||
|
||||
msgid ""
|
||||
"No plugins capabilities available for this type.\n"
|
||||
"Enable or install some to use."
|
||||
msgstr ""
|
||||
"No hay capacidades de plugins disponibles para este tipo.\n"
|
||||
"Active o instale alguna para usarla."
|
||||
|
||||
msgid "Enable detection of build plate position"
|
||||
msgstr "Activar detección de posición de cama"
|
||||
|
||||
@@ -7230,7 +7299,7 @@ msgid "High flow"
|
||||
msgstr "Alto flujo"
|
||||
|
||||
msgid "TPU High flow"
|
||||
msgstr ""
|
||||
msgstr "TPU de alto flujo"
|
||||
|
||||
msgid "No wiki link available for this printer."
|
||||
msgstr "No hay enlace a la wiki disponible para esta impresora."
|
||||
@@ -7358,10 +7427,10 @@ msgid "Configuration incompatible"
|
||||
msgstr "Configuración incompatible"
|
||||
|
||||
msgid "Filament switcher detected. All AMS filaments are now available for both extruders. The slicer will auto-assign for optimal printing. "
|
||||
msgstr ""
|
||||
msgstr "Se ha detectado un conmutador de filamento. Todos los filamentos del AMS están ahora disponibles para ambos extrusores. El laminador asignará automáticamente para una impresión óptima. "
|
||||
|
||||
msgid "A filament switcher is detected but not calibrated and thus currently unavailable. Please calibrate it on the printer and synchronize before use. "
|
||||
msgstr ""
|
||||
msgstr "Se ha detectado un conmutador de filamento, pero no está calibrado, por lo que actualmente no está disponible. Calíbrelo en la impresora y sincronícelo antes de usarlo. "
|
||||
|
||||
msgid "Tips"
|
||||
msgstr "Consejos"
|
||||
@@ -7395,7 +7464,7 @@ msgid "Project Filaments"
|
||||
msgstr "Filamentos del proyecto"
|
||||
|
||||
msgid "Purge mode"
|
||||
msgstr ""
|
||||
msgstr "Modo de purga"
|
||||
|
||||
msgid "Flushing volumes"
|
||||
msgstr "Volúmenes de limpieza"
|
||||
@@ -8008,6 +8077,40 @@ msgstr "Página del dispositivo"
|
||||
msgid "Synchronize AMS Filament Information"
|
||||
msgstr "Sincronizar información de filamentos AMS"
|
||||
|
||||
msgid "OrcaCloud plugins required by the current preset are not installed:"
|
||||
msgstr "Los plugins de OrcaCloud requeridos por el perfil actual no están instalados:"
|
||||
|
||||
msgid "Install Plugins"
|
||||
msgstr "Instalar plugins"
|
||||
|
||||
msgid "Local plugins required by the current preset are missing:"
|
||||
msgstr "Faltan los plugins locales requeridos por el perfil actual:"
|
||||
|
||||
msgid "Find on OrcaCloud"
|
||||
msgstr "Buscar en OrcaCloud"
|
||||
|
||||
msgid "Plugins required by the current preset are not activated:"
|
||||
msgstr "Los plugins requeridos por el perfil actual no están activados:"
|
||||
|
||||
msgid "Activate Now"
|
||||
msgstr "Activar ahora"
|
||||
|
||||
msgid "The installed plugin does not provide the required capability — it may be outdated:"
|
||||
msgstr "El plugin instalado no proporciona la capacidad requerida; puede estar desactualizado:"
|
||||
|
||||
msgid "Preparing to install plugins..."
|
||||
msgstr "Preparando la instalación de plugins..."
|
||||
|
||||
msgid "Installing plugins"
|
||||
msgstr "Instalando plugins"
|
||||
|
||||
msgid "Cancelling — finishing the current plugin..."
|
||||
msgstr "Cancelando; finalizando el plugin actual..."
|
||||
|
||||
#, boost-format
|
||||
msgid "Installing %1%..."
|
||||
msgstr "Instalando %1%..."
|
||||
|
||||
msgid "Plate Settings"
|
||||
msgstr "Configuración de Cama"
|
||||
|
||||
@@ -8837,7 +8940,7 @@ msgid "My Printer"
|
||||
msgstr "Mi impresora"
|
||||
|
||||
msgid "AMS filaments"
|
||||
msgstr ""
|
||||
msgstr "Filamentos del AMS"
|
||||
|
||||
msgid "Left filaments"
|
||||
msgstr "Filamentos del lado izquierdo"
|
||||
@@ -9082,6 +9185,9 @@ msgstr "Multicolor con externo"
|
||||
msgid "Your filament grouping method in the sliced file is not optimal."
|
||||
msgstr "Su método de agrupación de filamentos en el archivo laminado no es óptimo."
|
||||
|
||||
msgid "To ensure print quality, the drying temperature will be lowered during printing."
|
||||
msgstr "Para garantizar la calidad de impresión, la temperatura de secado se reducirá durante la impresión."
|
||||
|
||||
msgid "Auto Bed Leveling"
|
||||
msgstr "Nivelado automático de cama"
|
||||
|
||||
@@ -9125,35 +9231,35 @@ msgid "Extra info"
|
||||
msgstr "Información extra"
|
||||
|
||||
msgid "The Filament Track Switch installed on the printer does not match the slicing file. Please re-slice to avoid print quality issues."
|
||||
msgstr ""
|
||||
msgstr "El Filament Track Switch instalado en la impresora no coincide con el archivo laminado. Vuelva a laminar para evitar problemas de calidad de impresión."
|
||||
|
||||
msgid "This print requires a Filament Track Switch. Please install it first."
|
||||
msgstr ""
|
||||
msgstr "Esta impresión requiere un Filament Track Switch. Instálelo primero."
|
||||
|
||||
msgid "The Filament Track Switch has not been setup. Please setup it first."
|
||||
msgstr ""
|
||||
msgstr "El Filament Track Switch no se ha configurado. Configúrelo primero."
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Failed to send nozzle auto-mapping request to printer { code: %d }. Please try to refresh the printer information. If it still does not recover, you can try to rebind the printer and check the network connection."
|
||||
msgstr ""
|
||||
msgstr "No se pudo enviar la solicitud de mapeo automático de boquillas a la impresora { code: %d }. Intente actualizar la información de la impresora. Si aún así no se recupera, puede intentar volver a vincular la impresora y comprobar la conexión de red."
|
||||
|
||||
msgid "The printer is calculating nozzle mapping."
|
||||
msgstr ""
|
||||
msgstr "La impresora está calculando el mapeo de boquillas."
|
||||
|
||||
msgid "Please wait a moment..."
|
||||
msgstr ""
|
||||
msgstr "Espere un momento..."
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Failed to receive nozzle auto-mapping table from printer { msg: %s }. Please refresh the printer information."
|
||||
msgstr ""
|
||||
msgstr "No se pudo recibir la tabla de mapeo automático de boquillas de la impresora { msg: %s }. Actualice la información de la impresora."
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "The printer failed to build the nozzle auto-mapping table { code: %d }. Please refresh nozzle information."
|
||||
msgstr ""
|
||||
msgstr "La impresora no pudo crear la tabla de mapeo automático de boquillas { code: %d }. Actualice la información de las boquillas."
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "The current nozzle mapping may produce an extra %0.2f g of waste."
|
||||
msgstr ""
|
||||
msgstr "El mapeo de boquillas actual puede producir %0.2f g adicionales de residuos."
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Filament %s does not match the filament in AMS slot %s. Please update the printer firmware to support AMS slot assignment."
|
||||
@@ -9217,32 +9323,32 @@ msgstr "boquilla"
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Refreshing information of hotends(%d/%d)."
|
||||
msgstr ""
|
||||
msgstr "Actualizando la información de los hotends (%d/%d)."
|
||||
|
||||
msgid "There are not enough available hotends currently."
|
||||
msgstr ""
|
||||
msgstr "Actualmente no hay suficientes hotends disponibles."
|
||||
|
||||
msgid "Please complete the hotend rack setup and try again."
|
||||
msgstr ""
|
||||
msgstr "Complete la configuración del rack del hotend e inténtelo de nuevo."
|
||||
|
||||
msgid "Please refresh the nozzle information and try again."
|
||||
msgstr ""
|
||||
msgstr "Actualice la información de las boquillas e inténtelo de nuevo."
|
||||
|
||||
msgid "Please re-slice to avoid filament waste."
|
||||
msgstr ""
|
||||
msgstr "Vuelva a laminar para evitar desperdicio de filamento."
|
||||
|
||||
msgid "The reported hotend information may be unreliable."
|
||||
msgstr ""
|
||||
msgstr "La información notificada de los hotends puede no ser fiable."
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "The printer has no nozzle matching the slicing file (%s)."
|
||||
msgstr ""
|
||||
msgstr "La impresora no tiene ninguna boquilla que coincida con el archivo laminado (%s)."
|
||||
|
||||
msgid "Please install a matching nozzle in the hotend rack, or set the corresponding printer preset while slicing."
|
||||
msgstr ""
|
||||
msgstr "Instale una boquilla compatible en el rack del hotend, o establezca el perfil de impresora correspondiente al laminar."
|
||||
|
||||
msgid "The toolhead and hotend rack are full. Please remove at least one hotend before printing."
|
||||
msgstr ""
|
||||
msgstr "El cabezal y el rack del hotend están llenos. Retire al menos un hotend antes de imprimir."
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "The nozzle flow setting of %s(%s) doesn't match with the slicing file(%s). Please make sure the nozzle installed matches with settings in printer, then set the corresponding printer preset while slicing."
|
||||
@@ -9268,7 +9374,7 @@ msgstr "La dureza del material actual (%s) supera la dureza de %s(%s). Verifique
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "The hardness of current material (%s) exceeds the hardness of %s(%s). It may cause nozzle wear, leading to material leakage and unstable flow. Please exercise caution when using it."
|
||||
msgstr ""
|
||||
msgstr "La dureza del material actual (%s) supera la dureza de %s(%s). Puede provocar el desgaste de la boquilla, dando lugar a fugas de material y flujo inestable. Tenga precaución al utilizarlo."
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "[ %s ] requires printing in a high-temperature environment. Please close the door."
|
||||
@@ -9797,6 +9903,12 @@ msgstr "G-Code de cambio de rol de extrusión"
|
||||
msgid "Post-processing Scripts"
|
||||
msgstr "Script de Post-procesado"
|
||||
|
||||
msgid "Slicing Pipeline Plugin"
|
||||
msgstr "Plugin de la canalización de laminado"
|
||||
|
||||
msgid "Plugin Configuration"
|
||||
msgstr "Configuración del plugin"
|
||||
|
||||
msgid "Notes"
|
||||
msgstr "Anotaciones"
|
||||
|
||||
@@ -10928,6 +11040,9 @@ msgstr "Activar/desactivar la impresión para el objeto/pieza"
|
||||
msgid "Switch between Prepare/Preview"
|
||||
msgstr "Cambiar entre Preparar/Previsualizar"
|
||||
|
||||
msgid "Open actions speed dial"
|
||||
msgstr "Abrir el menú rápido de acciones"
|
||||
|
||||
msgid "Plater"
|
||||
msgstr "Cama"
|
||||
|
||||
@@ -11125,7 +11240,7 @@ msgid "Auto Fire Extinguishing System"
|
||||
msgstr "Sistema de extinción automática de incendios"
|
||||
|
||||
msgid "Filament Track Switch"
|
||||
msgstr ""
|
||||
msgstr "Filament Track Switch"
|
||||
|
||||
msgid "Beta"
|
||||
msgstr "Beta"
|
||||
@@ -11252,7 +11367,7 @@ msgid " can not be placed in the "
|
||||
msgstr " no se puede colocar en el "
|
||||
|
||||
msgid "Group error in manual mode. Please check nozzle count or regroup."
|
||||
msgstr ""
|
||||
msgstr "Error de agrupación en modo manual. Compruebe el número de boquillas o vuelva a agrupar."
|
||||
|
||||
msgid "Internal Bridge"
|
||||
msgstr "Puente Interior"
|
||||
@@ -11757,6 +11872,9 @@ msgstr "Clave API"
|
||||
msgid "HTTP digest"
|
||||
msgstr "Resumen HTTP"
|
||||
|
||||
msgid "Configuration for the plugin capabilities this preset uses, overriding the global Capabilities configuration. Stored as a raw JSON array and edited through the dialog behind the button, never typed in directly."
|
||||
msgstr "Configuración de las capacidades de plugins que utiliza este perfil, que anula la configuración global de Capacidades. Se almacena como un array JSON sin procesar y se edita a través del cuadro de diálogo que hay detrás del botón, nunca se escribe directamente."
|
||||
|
||||
msgid "Avoid crossing walls"
|
||||
msgstr "Evitar cruzar perímetro"
|
||||
|
||||
@@ -12788,6 +12906,30 @@ msgstr ""
|
||||
"Densidad de la capa superficial inferior. Destinada a fines estéticos o funcionales, no para corregir problemas como la sobreextrusión.\n"
|
||||
"ADVERTENCIA: Reducir este valor puede afectar negativamente la adherencia a la cama."
|
||||
|
||||
msgid "Top surface fill order"
|
||||
msgstr "Orden de relleno de la superficie superior"
|
||||
|
||||
msgid ""
|
||||
"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
|
||||
"Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
|
||||
"Default uses shortest-path ordering, which may run in either direction."
|
||||
msgstr ""
|
||||
"Dirección en la que se rellenan las superficies superiores al usar un patrón basado en el centro (Concéntrico, Cuerdas de Arquímedes, Espiral de octograma).\n"
|
||||
"Hacia afuera comienza en el centro de la superficie, de modo que cualquier exceso de material se empuja hacia el borde, donde es menos visible. Hacia adentro comienza en el borde y termina con las curvas cerradas del centro.\n"
|
||||
"Por defecto usa el orden de ruta más corta, que puede ir en cualquier dirección."
|
||||
|
||||
msgid "Bottom surface fill order"
|
||||
msgstr "Orden de relleno de la superficie inferior"
|
||||
|
||||
msgid ""
|
||||
"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
|
||||
"Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
|
||||
"Default uses shortest-path ordering, which may run in either direction."
|
||||
msgstr ""
|
||||
"Dirección en la que se rellenan las superficies inferiores al usar un patrón basado en el centro (Concéntrico, Cuerdas de Arquímedes, Espiral de octograma).\n"
|
||||
"Hacia adentro comienza cada superficie con las curvas exteriores más amplias, lo que mejora la adherencia de la primera capa en las camas donde las curvas cerradas del centro pueden no adherirse. Hacia afuera comienza en el centro, empujando cualquier exceso de material hacia el borde.\n"
|
||||
"Por defecto usa el orden de ruta más corta, que puede ir en cualquier dirección."
|
||||
|
||||
msgid "Internal solid infill pattern"
|
||||
msgstr "Patrón de relleno sólido interno"
|
||||
|
||||
@@ -13115,7 +13257,7 @@ msgid "Temperature when flushing filament. 0 indicates the upper bound of the re
|
||||
msgstr "Temperatura al limpiar el filamento. 0 indica el límite superior del rango de temperatura recomendado para la boquilla."
|
||||
|
||||
msgid "Flush temperature used in fast purge mode."
|
||||
msgstr ""
|
||||
msgstr "Temperatura de purga utilizada en el modo de purga rápida."
|
||||
|
||||
msgid "Flush volumetric speed"
|
||||
msgstr "Velocidad volumétrica de descarga"
|
||||
@@ -13380,10 +13522,10 @@ msgid "The filament is printable in extruder."
|
||||
msgstr "El filamento es imprimible en el extrusor."
|
||||
|
||||
msgid "Filament-extruder compatibility"
|
||||
msgstr ""
|
||||
msgstr "Compatibilidad filamento-extrusor"
|
||||
|
||||
msgid "A single 32-bit int encoding the compatibility level of a filament across all extruders (up to 10). Every 3 bits represent one extruder (bits [3*i, 3*i+2] for extruder i). 0: printable, 1: error, 2: critical warning, 3: warning, 4-7: reserved."
|
||||
msgstr ""
|
||||
msgstr "Un único entero de 32 bits que codifica el nivel de compatibilidad de un filamento en todos los extrusores (hasta 10). Cada 3 bits representan un extrusor (bits [3*i, 3*i+2] para el extrusor i). 0: imprimible, 1: error, 2: advertencia crítica, 3: advertencia, 4-7: reservado."
|
||||
|
||||
msgid "Softening temperature"
|
||||
msgstr "Temperatura de ablandado"
|
||||
@@ -13982,13 +14124,13 @@ msgid "Enable this option if machine has auxiliary part cooling fan. G-code comm
|
||||
msgstr "Activar esta opción si la máquina dispone de ventilador auxiliar de refrigeración de piezas. Comando G-Code: M106 P2 S(0-255)."
|
||||
|
||||
msgid "Fan direction"
|
||||
msgstr ""
|
||||
msgstr "Dirección del ventilador"
|
||||
|
||||
msgid "Cooling fan direction of the printer"
|
||||
msgstr ""
|
||||
msgstr "Dirección del ventilador de refrigeración de la impresora"
|
||||
|
||||
msgid "Both"
|
||||
msgstr ""
|
||||
msgstr "Ambos"
|
||||
|
||||
msgid ""
|
||||
"Start the fan this number of seconds earlier than its target start time (you can use fractional seconds). It assumes infinite acceleration for this time estimation, and will only take into account G1 and G0 moves (arc fitting is unsupported).\n"
|
||||
@@ -14031,9 +14173,6 @@ msgstr ""
|
||||
"Si tu firmware ya desactiva el ventilador por debajo de un umbral (por ejemplo, [fan] off_below: 0.10 de Klipper apaga el ventilador siempre que el ciclo de trabajo ordenado sea inferior al 10 %), lo ideal es que esta opción y el umbral del firmware se establezcan en el mismo valor. Hacer que coincidan (por ejemplo, off_below: 0,10 en Klipper y 10 % aquí) garantiza que el cortador nunca emita un valor distinto de cero que el firmware descartaría silenciosamente, y que el ventilador nunca reciba un valor inferior al que sabes que realmente puede alcanzar.\n"
|
||||
"Establece en 0 para desactivar."
|
||||
|
||||
msgid "%"
|
||||
msgstr "%"
|
||||
|
||||
msgid "Time cost"
|
||||
msgstr "Coste monetario por hora"
|
||||
|
||||
@@ -14595,7 +14734,7 @@ msgid "The allowed maximum output force of Y axis"
|
||||
msgstr "La fuerza máxima permitida del eje Y"
|
||||
|
||||
msgid "N"
|
||||
msgstr ""
|
||||
msgstr "N"
|
||||
|
||||
msgid "Bed mass of the Y axis"
|
||||
msgstr "Masa de la cama del eje Y"
|
||||
@@ -14604,7 +14743,7 @@ msgid "The machine bed mass load of Y axis"
|
||||
msgstr "La carga de la masa de la cama de la máquina del eje Y"
|
||||
|
||||
msgid "g"
|
||||
msgstr ""
|
||||
msgstr "g"
|
||||
|
||||
msgid "The allowed max printed mass"
|
||||
msgstr "Masa máxima de impresión permitida"
|
||||
@@ -14721,6 +14860,9 @@ msgstr ""
|
||||
"Para desactivar el input shaper, utilice el tipo «Desactivar».\n"
|
||||
"RRF: los valores de X e Y son iguales."
|
||||
|
||||
msgid "Hz"
|
||||
msgstr "Hz"
|
||||
|
||||
msgid "Y"
|
||||
msgstr "Y"
|
||||
|
||||
@@ -15002,6 +15144,15 @@ msgstr "G-Code de cambio de rol de extrusión (proceso)"
|
||||
msgid "This G-code is inserted when the extrusion role is changed. It runs after the machine and filament extrusion role G-code."
|
||||
msgstr "Este G-code se inserta cuando se cambia la función de extrusión. Se ejecuta después del G-code de la máquina y de la función de extrusión del filamento."
|
||||
|
||||
msgid "Plugins Used"
|
||||
msgstr "Plugins utilizados"
|
||||
|
||||
msgid "Plugin capabilities referenced by this preset, stored as name;uuid;capability."
|
||||
msgstr "Capacidades de plugins referenciadas por este perfil, almacenadas como name;uuid;capability."
|
||||
|
||||
msgid "Python plugin(s) invoked at each slicing pipeline step to read and modify intermediate slicing data, including a final G-code post-processing step. Research/experimental."
|
||||
msgstr "Plugin(s) de Python que se invocan en cada paso de la canalización de laminado para leer y modificar los datos intermedios de laminado, incluido un paso final de posprocesamiento de G-code. Investigación/experimental."
|
||||
|
||||
msgid "Printer type"
|
||||
msgstr "Tipo de impresora"
|
||||
|
||||
@@ -15062,6 +15213,17 @@ msgstr "Longitud de retracción antes de purgado"
|
||||
msgid "This is the length of fast retraction before a wipe, relative to retraction length."
|
||||
msgstr "La longitud de la retracción rápida antes de la purga, en relación con la longitud de la retracción."
|
||||
|
||||
msgid "Retract amount after wipe"
|
||||
msgstr "Cantidad de retracción después de la limpieza"
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The length of fast retraction after wipe, relative to retraction length.\n"
|
||||
"The value will be clamped by 100% minus the retract amount before the wipe value."
|
||||
msgstr ""
|
||||
"La longitud de la retracción rápida después de la limpieza, relativa a la longitud de retracción.\n"
|
||||
"El valor se limitará al 100 % menos el valor de la cantidad de retracción antes de la limpieza."
|
||||
|
||||
msgid "Retract on layer change"
|
||||
msgstr "Retracción al cambiar de capa"
|
||||
|
||||
@@ -15201,10 +15363,10 @@ msgid "Speed for reloading filament into the nozzle. Zero means same speed of re
|
||||
msgstr "Velocidad para recargar el filamento en la boquilla. Cero significa la misma velocidad que la retracción."
|
||||
|
||||
msgid "Deretraction speed (extruder change)"
|
||||
msgstr ""
|
||||
msgstr "Velocidad de De-retracción (cambio de extrusor)"
|
||||
|
||||
msgid "Speed for reloading filament into the nozzle when switching extruder."
|
||||
msgstr ""
|
||||
msgstr "Velocidad de recarga del filamento en la boquilla al cambiar de extrusor."
|
||||
|
||||
msgid "Use firmware retraction"
|
||||
msgstr "Usar retracción de firmware (beta)"
|
||||
@@ -15510,10 +15672,10 @@ msgid "Traditional"
|
||||
msgstr "Tradicional"
|
||||
|
||||
msgid "Farthest point timelapse"
|
||||
msgstr ""
|
||||
msgstr "Timelapse del punto más lejano"
|
||||
|
||||
msgid "When enabled, the timelapse snapshot is taken at the farthest point from camera instead of traveling to the wipe tower or excess chute. Only effective in traditional timelapse mode on non-I3 printers."
|
||||
msgstr ""
|
||||
msgstr "Cuando está activado, la instantánea del timelapse se toma en el punto más lejano de la cámara en lugar de desplazarse a la torre de purga o a la rampa de exceso. Solo es efectivo en el modo timelapse tradicional en impresoras que no son I3."
|
||||
|
||||
msgid "Temperature variation"
|
||||
msgstr "Variación de temperatura"
|
||||
@@ -16051,20 +16213,6 @@ msgstr "Espesor mínimo de la cubierta superior"
|
||||
msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers."
|
||||
msgstr "El número de capas sólidas superiores se incrementa al laminar si el espesor calculado por las capas de la cubierta es más delgado que este valor. Esto puede evitar tener una cubierta demasiado fina cuando la altura de la capa es pequeña. 0 significa que este ajuste está desactivado y el grosor de la capa superior está absolutamente determinado por las capas de la cubierta superior."
|
||||
|
||||
msgid "Anisotropic surfaces"
|
||||
msgstr "Superficies anisótropas"
|
||||
|
||||
msgid ""
|
||||
"Anisotropic patterns on the top and bottom surfaces.\n"
|
||||
"Co-directional printing mode will be applied. For certain patterns, omni-directional filling provides color dispersion when using multi-colored or silk plastics.\n"
|
||||
"This option disable the gap fill.\n"
|
||||
"This option can increase a printing time."
|
||||
msgstr ""
|
||||
"Patrones anisótropos en las superficies superior e inferior.\n"
|
||||
"Se aplicará el modo de impresión codireccional. Para ciertos patrones, el relleno omnidireccional proporciona dispersión del color al usar plásticos multicolor o de tipo seda.\n"
|
||||
"Esta opción desactiva el relleno de huecos.\n"
|
||||
"Esta opción puede aumentar el tiempo de impresión."
|
||||
|
||||
msgid "Separated infills"
|
||||
msgstr "Rellenos separados"
|
||||
|
||||
@@ -16146,10 +16294,10 @@ msgid "The actual flushing volumes is equal to the flush multiplier value multip
|
||||
msgstr "El volumen de flujo real es igual al producto del multiplicador de flujo y los volúmenes de flujo de la tabla."
|
||||
|
||||
msgid "Flush multiplier (Fast mode)"
|
||||
msgstr ""
|
||||
msgstr "Multiplicador de purga (modo rápido)"
|
||||
|
||||
msgid "The flush multiplier used in fast purge mode."
|
||||
msgstr ""
|
||||
msgstr "El multiplicador de purga utilizado en el modo de purga rápida."
|
||||
|
||||
msgid "Prime volume"
|
||||
msgstr "Volumen de purga"
|
||||
@@ -16158,16 +16306,16 @@ msgid "This is the volume of material to prime the extruder with on the tower."
|
||||
msgstr "El volumen de material para purgar la extrusora en la torre."
|
||||
|
||||
msgid "Prime volume mode"
|
||||
msgstr ""
|
||||
msgstr "Modo de volumen de cebado"
|
||||
|
||||
msgid "Selects how the wipe-tower prime and flush volumes are computed on multi-extruder printers."
|
||||
msgstr ""
|
||||
msgstr "Selecciona cómo se calculan los volúmenes de cebado y purga de la torre de purga en impresoras multiextrusor."
|
||||
|
||||
msgid "Saving"
|
||||
msgstr ""
|
||||
msgstr "Guardando"
|
||||
|
||||
msgid "Fast"
|
||||
msgstr ""
|
||||
msgstr "Rápido"
|
||||
|
||||
msgid "This is the width of prime towers."
|
||||
msgstr "Ancho de la torre de purga."
|
||||
@@ -16493,10 +16641,10 @@ msgid "When this retraction value is modified, it will be used as the amount of
|
||||
msgstr "Cuando se modifique este valor de retracción, se utilizará como la cantidad de filamento retraído dentro del hotend antes de cambiar los hotends."
|
||||
|
||||
msgid "Support fast purge mode"
|
||||
msgstr ""
|
||||
msgstr "Compatible con el modo de purga rápida"
|
||||
|
||||
msgid "Whether this printer supports fast purge mode with optimized temperature and multiplier."
|
||||
msgstr ""
|
||||
msgstr "Indica si esta impresora es compatible con el modo de purga rápida con temperatura y multiplicador optimizados."
|
||||
|
||||
msgid "The volume of material required to prime the extruder for a hotend change on the tower."
|
||||
msgstr "El volumen de material necesario para cebar el extrusor al cambiar el Hotend en la torre."
|
||||
@@ -17874,9 +18022,6 @@ msgstr "Inicio / Fin"
|
||||
msgid "Frequency settings"
|
||||
msgstr "Ajustes de frecuencia"
|
||||
|
||||
msgid "Hz"
|
||||
msgstr "Hz"
|
||||
|
||||
msgid "RepRap firmware uses the same frequency range for both axes."
|
||||
msgstr "El firmware RepRap utiliza el mismo rango de frecuencia para ambos ejes."
|
||||
|
||||
@@ -19367,10 +19512,10 @@ msgid "Removed"
|
||||
msgstr "Eliminado"
|
||||
|
||||
msgid "Enable smart filament assign: Assign one filament to multiple nozzles to maximize savings"
|
||||
msgstr ""
|
||||
msgstr "Activar la asignación inteligente de filamento: asigna un filamento a varias boquillas para maximizar el ahorro"
|
||||
|
||||
msgid "Fila Saving"
|
||||
msgstr ""
|
||||
msgstr "Ahorro de filamento"
|
||||
|
||||
msgid "Don't remind me again"
|
||||
msgstr "No me recuerdes de nuevo"
|
||||
@@ -19407,7 +19552,7 @@ msgstr "(Sincronizar con impresora)"
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Error: %s extruder has no available %s nozzle, current group result is invalid."
|
||||
msgstr ""
|
||||
msgstr "Error: el extrusor %s no tiene ninguna boquilla %s disponible; el resultado del grupo actual no es válido."
|
||||
|
||||
msgid "We will slice according to this grouping method:"
|
||||
msgstr "Laminar según este método de agrupación:"
|
||||
@@ -19416,13 +19561,13 @@ msgid "Tip: You can drag the filaments to reassign them to different nozzles."
|
||||
msgstr "Tip: Puedes arrastrar los filamentos para reasignarlos a diferentes boquillas."
|
||||
|
||||
msgid "Please adjust your grouping or click "
|
||||
msgstr ""
|
||||
msgstr "Ajuste su agrupación o haga clic en "
|
||||
|
||||
msgid " to set nozzle count"
|
||||
msgstr ""
|
||||
msgstr " para establecer el número de boquillas"
|
||||
|
||||
msgid "Set the physical nozzle count..."
|
||||
msgstr ""
|
||||
msgstr "Establecer el número físico de boquillas..."
|
||||
|
||||
msgid "The filament grouping method for current plate is determined by the dropdown option at the slicing plate button."
|
||||
msgstr "El método de agrupación de filamentos para la placa actual se determina por la opción desplegable en el botón de placa de laminado."
|
||||
@@ -19854,6 +19999,145 @@ msgstr "Vista previa del archivo"
|
||||
msgid "Open File"
|
||||
msgstr "Abrir archivo"
|
||||
|
||||
msgid "AMS Dryness Control"
|
||||
msgstr "Control de secado del AMS"
|
||||
|
||||
msgid "Filament Drying Settings"
|
||||
msgstr "Ajustes de secado del filamento"
|
||||
|
||||
msgid "Stopping"
|
||||
msgstr "Deteniendo"
|
||||
|
||||
msgid "Unable to dry temporarily due to ..."
|
||||
msgstr "No se puede secar temporalmente debido a ..."
|
||||
|
||||
msgid "Drying Error"
|
||||
msgstr "Error de secado"
|
||||
|
||||
msgid "Please check the Assistant for troubleshooting"
|
||||
msgstr "Consulte el Asistente para solucionar problemas"
|
||||
|
||||
msgid "Please remove and store the filament (as shown)."
|
||||
msgstr "Retire y almacene el filamento (como se muestra)."
|
||||
|
||||
msgid "The AMS can rotate the filament which is properly stored, providing better drying results."
|
||||
msgstr "El AMS puede rotar el filamento que está correctamente almacenado, proporcionando mejores resultados de secado."
|
||||
|
||||
msgid "Rotate spool when drying"
|
||||
msgstr "Rotar el carrete durante el secado"
|
||||
|
||||
msgctxt "amsdrying"
|
||||
msgid "Back"
|
||||
msgstr "Atrás"
|
||||
|
||||
msgid "Drying-Heating"
|
||||
msgstr "Secado - Calentamiento"
|
||||
|
||||
msgid "Drying-Dehumidifying"
|
||||
msgstr "Secado - Deshumidificación"
|
||||
|
||||
msgid " maximum drying temperature is "
|
||||
msgstr " la temperatura máxima de secado es "
|
||||
|
||||
msgid " minimum drying temperature is "
|
||||
msgstr " la temperatura mínima de secado es "
|
||||
|
||||
msgid "This filament may not be completely dried."
|
||||
msgstr "Es posible que este filamento no esté completamente seco."
|
||||
|
||||
msgid "This AMS is currently printing. To ensure print quality, the drying temperature cannot exceed the recommended drying temperature."
|
||||
msgstr "Este AMS está imprimiendo actualmente. Para garantizar la calidad de impresión, la temperatura de secado no puede superar la temperatura de secado recomendada."
|
||||
|
||||
msgid "The temperature shall not exceed the filament's heat distortion temperature"
|
||||
msgstr "La temperatura no debe superar la temperatura de distorsión térmica del filamento"
|
||||
|
||||
msgid "Minimum time value cannot be less than 1."
|
||||
msgstr "El valor de tiempo mínimo no puede ser inferior a 1."
|
||||
|
||||
msgid "Maximum time value cannot be greater than 24."
|
||||
msgstr "El valor de tiempo máximo no puede ser superior a 24."
|
||||
|
||||
msgid "Insufficient power"
|
||||
msgstr "Potencia insuficiente"
|
||||
|
||||
msgid " Too many AMS drying simultaneously. Please plug in the power or stop other drying processes before starting."
|
||||
msgstr " Demasiados AMS secando simultáneamente. Conecte la alimentación o detenga otros procesos de secado antes de empezar."
|
||||
|
||||
msgid "AMS is busy"
|
||||
msgstr "El AMS está ocupado"
|
||||
|
||||
msgid " AMS is calibrating | reading RFID | loading/unloading material, please wait."
|
||||
msgstr " El AMS está calibrando | leyendo RFID | cargando/descargando material, espere."
|
||||
|
||||
msgid "Filament in AMS outlet"
|
||||
msgstr "Filamento en la salida del AMS"
|
||||
|
||||
msgid " The high drying temperature may cause AMS blockage, please unload first."
|
||||
msgstr " La alta temperatura de secado puede provocar un bloqueo del AMS; descargue primero."
|
||||
|
||||
msgid "Initiating AMS drying"
|
||||
msgstr "Iniciando el secado del AMS"
|
||||
|
||||
msgid "Not supported in 2D mode"
|
||||
msgstr "No compatible en modo 2D"
|
||||
|
||||
msgid "Task in progress"
|
||||
msgstr "Tarea en curso"
|
||||
|
||||
msgid " The AMS might be in use during Task."
|
||||
msgstr " El AMS podría estar en uso durante la tarea."
|
||||
|
||||
msgid " Firmware update in progress, please wait..."
|
||||
msgstr " Actualización de firmware en curso, espere..."
|
||||
|
||||
msgid " Please plug in the power and then use the drying function."
|
||||
msgstr " Conecte la alimentación y luego utilice la función de secado."
|
||||
|
||||
msgid " The high drying temperature may cause AMS blockage. Please unload the filament manually before proceeding."
|
||||
msgstr " La alta temperatura de secado puede provocar un bloqueo del AMS. Descargue el filamento manualmente antes de continuar."
|
||||
|
||||
msgid "System is busy"
|
||||
msgstr "El sistema está ocupado"
|
||||
|
||||
msgid " Initiating other drying processes, please wait a few seconds..."
|
||||
msgstr " Iniciando otros procesos de secado, espere unos segundos..."
|
||||
|
||||
msgid "For better drying results, remove the filament and allow it to rotate."
|
||||
msgstr "Para obtener mejores resultados de secado, retire el filamento y permita que rote."
|
||||
|
||||
msgid "The AMS will automatically rotate the stored filament slots to enhance the drying performance."
|
||||
msgstr "El AMS rotará automáticamente las ranuras de filamento almacenadas para mejorar el rendimiento del secado."
|
||||
|
||||
msgid "Alternatively, you can dry the filament without removing it."
|
||||
msgstr "Como alternativa, puede secar el filamento sin retirarlo."
|
||||
|
||||
msgid "Unknown filaments will be treated as PLA."
|
||||
msgstr "Los filamentos desconocidos se tratarán como PLA."
|
||||
|
||||
msgid "Please store the filament marked with an exclamation mark."
|
||||
msgstr "Almacene el filamento marcado con un signo de exclamación."
|
||||
|
||||
msgid "Filament left in the feeder during drying may soften because the drying temperature exceeds the softening point of materials like PLA and TPU."
|
||||
msgstr "El filamento que quede en el alimentador durante el secado puede ablandarse porque la temperatura de secado supera el punto de reblandecimiento de materiales como el PLA y el TPU."
|
||||
|
||||
msgid "Starting: Checking adapter connection"
|
||||
msgstr "Iniciando: comprobando la conexión del adaptador"
|
||||
|
||||
msgid "Starting: Checking filament status"
|
||||
msgstr "Iniciando: comprobando el estado del filamento"
|
||||
|
||||
msgid "Starting: Checking drying presets"
|
||||
msgstr "Iniciando: comprobando los perfiles de secado"
|
||||
|
||||
msgid "Starting: Checking filament location"
|
||||
msgstr "Iniciando: comprobando la ubicación del filamento"
|
||||
|
||||
msgid "Starting: Checking air intake"
|
||||
msgstr "Iniciando: comprobando la entrada de aire"
|
||||
|
||||
msgid "Starting: Checking air vent"
|
||||
msgstr "Iniciando: comprobando la salida de aire"
|
||||
|
||||
msgid "The filament may not be compatible with the current machine settings. Generic filament presets will be used."
|
||||
msgstr "Es posible que el filamento no sea compatible con la configuración de la máquina. Se utilizará una configuración de filamento genérico."
|
||||
|
||||
@@ -20169,6 +20453,26 @@ msgstr ""
|
||||
"Evita la deformación\n"
|
||||
"¿Sabías que al imprimir materiales propensos a la deformación como el ABS, aumentar adecuadamente la temperatura de la cama térmica puede reducir la probabilidad de deformaciones?"
|
||||
|
||||
#~ msgid "°C"
|
||||
#~ msgstr "°C"
|
||||
|
||||
#~ msgid "%"
|
||||
#~ msgstr "%"
|
||||
|
||||
#~ msgid "Anisotropic surfaces"
|
||||
#~ msgstr "Superficies anisótropas"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Anisotropic patterns on the top and bottom surfaces.\n"
|
||||
#~ "Co-directional printing mode will be applied. For certain patterns, omni-directional filling provides color dispersion when using multi-colored or silk plastics.\n"
|
||||
#~ "This option disable the gap fill.\n"
|
||||
#~ "This option can increase a printing time."
|
||||
#~ msgstr ""
|
||||
#~ "Patrones anisótropos en las superficies superior e inferior.\n"
|
||||
#~ "Se aplicará el modo de impresión codireccional. Para ciertos patrones, el relleno omnidireccional proporciona dispersión del color al usar plásticos multicolor o de tipo seda.\n"
|
||||
#~ "Esta opción desactiva el relleno de huecos.\n"
|
||||
#~ "Esta opción puede aumentar el tiempo de impresión."
|
||||
|
||||
#~ msgid "Renders cast shadows on the plate in realistic view."
|
||||
#~ msgstr "Los objetos renderizados proyectan sombras sobre la cama en la vista realista."
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -6,7 +6,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Orca Slicer\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-07-13 16:24-0300\n"
|
||||
"POT-Creation-Date: 2026-07-17 15:13-0300\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Guislain Cyril, Thomas Lété\n"
|
||||
@@ -1970,6 +1970,17 @@ msgstr "Il s'agit de la version la plus récente."
|
||||
msgid "Info"
|
||||
msgstr "Info"
|
||||
|
||||
msgid "Loading Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Plugin %s is no longer available."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Plugin %s access is unauthorized."
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading printer & filament profiles"
|
||||
msgstr "Chargement des profils d’imprimante et de filament"
|
||||
|
||||
@@ -2098,6 +2109,18 @@ msgstr ""
|
||||
msgid "Resolve cloud sync conflict"
|
||||
msgstr "Résoudre le conflit de synchronisation cloud"
|
||||
|
||||
msgid "Syncing your account…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Migrating presets…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Fetching plugins…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading user presets…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Retrieving printer information, please try again later."
|
||||
msgstr "Récupération des informations de l'imprimante, veuillez réessayer plus tard."
|
||||
|
||||
@@ -2230,6 +2253,21 @@ msgstr "Orca Slicer — Échec du changement de langue"
|
||||
msgid "*"
|
||||
msgstr "*"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"Failed to open the Plugins dialog:\n"
|
||||
"%s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to open the Plugins dialog (unknown error)."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin Terminal"
|
||||
msgstr ""
|
||||
|
||||
msgid "Changing application language"
|
||||
msgstr "Changer la langue de l'application"
|
||||
|
||||
@@ -4960,6 +4998,28 @@ msgstr "Format invalide. Format vectoriel attendu : \"%1%\""
|
||||
msgid "N/A"
|
||||
msgstr "N/A"
|
||||
|
||||
msgid "System agents"
|
||||
msgstr ""
|
||||
|
||||
msgid "No plugin selected"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Select plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Remove plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configure"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Configure (%d)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Pick"
|
||||
msgstr "Sélectionner"
|
||||
|
||||
@@ -5125,9 +5185,6 @@ msgstr "Débit"
|
||||
msgid "Fan speed"
|
||||
msgstr "Vitesse du ventilateur"
|
||||
|
||||
msgid "°C"
|
||||
msgstr "°C"
|
||||
|
||||
msgid "Time"
|
||||
msgstr "Durée"
|
||||
|
||||
@@ -7130,6 +7187,14 @@ msgctxt "Layers"
|
||||
msgid "Bottom"
|
||||
msgstr "Du bas"
|
||||
|
||||
msgid "Plugin Selection"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"No plugins capabilities available for this type.\n"
|
||||
"Enable or install some to use."
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable detection of build plate position"
|
||||
msgstr "Activation de la détection de la position du plateau"
|
||||
|
||||
@@ -8005,6 +8070,40 @@ msgstr "Page appareil"
|
||||
msgid "Synchronize AMS Filament Information"
|
||||
msgstr "Synchroniser les informations de filament AMS"
|
||||
|
||||
msgid "OrcaCloud plugins required by the current preset are not installed:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Install Plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Local plugins required by the current preset are missing:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Find on OrcaCloud"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugins required by the current preset are not activated:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Activate Now"
|
||||
msgstr ""
|
||||
|
||||
msgid "The installed plugin does not provide the required capability — it may be outdated:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Preparing to install plugins..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Installing plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cancelling — finishing the current plugin..."
|
||||
msgstr ""
|
||||
|
||||
#, boost-format
|
||||
msgid "Installing %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plate Settings"
|
||||
msgstr "Paramètres de la plaque"
|
||||
|
||||
@@ -9074,6 +9173,9 @@ msgstr "Multicolore avec bobine externe"
|
||||
msgid "Your filament grouping method in the sliced file is not optimal."
|
||||
msgstr "Votre méthode de regroupement des filaments dans le fichier tranché n'est pas optimale."
|
||||
|
||||
msgid "To ensure print quality, the drying temperature will be lowered during printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto Bed Leveling"
|
||||
msgstr "Nivellement automatique du plateau"
|
||||
|
||||
@@ -9791,6 +9893,12 @@ msgstr "G-code de changement du rôle de l’extrusion"
|
||||
msgid "Post-processing Scripts"
|
||||
msgstr "Scripts de post-traitement"
|
||||
|
||||
msgid "Slicing Pipeline Plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin Configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Notes"
|
||||
msgstr "Notes"
|
||||
|
||||
@@ -10925,6 +11033,9 @@ msgstr "Basculer l’état imprimable de l’objet/de la pièce"
|
||||
msgid "Switch between Prepare/Preview"
|
||||
msgstr "Basculer entre Préparer/Aperçu"
|
||||
|
||||
msgid "Open actions speed dial"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plater"
|
||||
msgstr "Plateau"
|
||||
|
||||
@@ -11760,6 +11871,9 @@ msgstr "Clé API"
|
||||
msgid "HTTP digest"
|
||||
msgstr "Résumé HTTP"
|
||||
|
||||
msgid "Configuration for the plugin capabilities this preset uses, overriding the global Capabilities configuration. Stored as a raw JSON array and edited through the dialog behind the button, never typed in directly."
|
||||
msgstr ""
|
||||
|
||||
msgid "Avoid crossing walls"
|
||||
msgstr "Évitez de traverser les parois"
|
||||
|
||||
@@ -12763,6 +12877,24 @@ msgstr ""
|
||||
"Densité de la couche de surface inférieure. Destiné à des fins esthétiques ou fonctionnelles, pas pour corriger des problèmes comme la surextrusion.\n"
|
||||
"ATTENTION : Réduire cette valeur peut affecter négativement l'adhérence au plateau."
|
||||
|
||||
msgid "Top surface fill order"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
|
||||
"Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
|
||||
"Default uses shortest-path ordering, which may run in either direction."
|
||||
msgstr ""
|
||||
|
||||
msgid "Bottom surface fill order"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
|
||||
"Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
|
||||
"Default uses shortest-path ordering, which may run in either direction."
|
||||
msgstr ""
|
||||
|
||||
msgid "Internal solid infill pattern"
|
||||
msgstr "Motif de remplissage plein interne"
|
||||
|
||||
@@ -14005,9 +14137,6 @@ msgstr ""
|
||||
"Si votre firmware désactive déjà le ventilateur en dessous d’un seuil (par exemple, le [fan] off_below: 0.10 de Klipper éteint le ventilateur dès que le rapport cyclique commandé est inférieur à 10 %), cette option et le seuil du firmware devraient idéalement être réglés sur la même valeur. Les faire correspondre (par exemple off_below: 0.10 dans Klipper et 10 % ici) garantit que le slicer n’émet jamais une valeur non nulle que le firmware abandonnerait silencieusement, et que le ventilateur ne reçoit jamais une valeur inférieure à celle à laquelle vous savez qu’il peut réellement démarrer.\n"
|
||||
"Réglez sur 0 pour désactiver."
|
||||
|
||||
msgid "%"
|
||||
msgstr "%"
|
||||
|
||||
msgid "Time cost"
|
||||
msgstr "Coût horaire"
|
||||
|
||||
@@ -14697,6 +14826,9 @@ msgstr ""
|
||||
"Pour désactiver la mise en forme du signal, utilisez le type « Disable ».\n"
|
||||
"RRF : les valeurs X et Y sont identiques."
|
||||
|
||||
msgid "Hz"
|
||||
msgstr "Hz"
|
||||
|
||||
msgid "Y"
|
||||
msgstr "Y"
|
||||
|
||||
@@ -14978,6 +15110,15 @@ msgstr "G-code de changement du rôle de l’extrusion (traitement)"
|
||||
msgid "This G-code is inserted when the extrusion role is changed. It runs after the machine and filament extrusion role G-code."
|
||||
msgstr "Ce G-code est inséré lorsque le rôle de l’extrusion change. Il s’exécute après le G-code de changement de rôle d’extrusion de la machine et du filament."
|
||||
|
||||
msgid "Plugins Used"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin capabilities referenced by this preset, stored as name;uuid;capability."
|
||||
msgstr ""
|
||||
|
||||
msgid "Python plugin(s) invoked at each slicing pipeline step to read and modify intermediate slicing data, including a final G-code post-processing step. Research/experimental."
|
||||
msgstr ""
|
||||
|
||||
msgid "Printer type"
|
||||
msgstr "Type d’imprimante"
|
||||
|
||||
@@ -15038,6 +15179,15 @@ msgstr "Quantité de rétraction avant essuyage"
|
||||
msgid "This is the length of fast retraction before a wipe, relative to retraction length."
|
||||
msgstr "La longueur de la rétraction rapide avant l’essuyage, par rapport à la longueur de la rétraction"
|
||||
|
||||
msgid "Retract amount after wipe"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The length of fast retraction after wipe, relative to retraction length.\n"
|
||||
"The value will be clamped by 100% minus the retract amount before the wipe value."
|
||||
msgstr ""
|
||||
|
||||
msgid "Retract on layer change"
|
||||
msgstr "Rétracter lors de changement de couche"
|
||||
|
||||
@@ -16022,16 +16172,6 @@ msgstr "Épaisseur de la coque supérieure"
|
||||
msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers."
|
||||
msgstr "Le nombre de couches solides supérieures est augmenté lors du découpage si l'épaisseur calculée par les couches de coque supérieures est inférieure à cette valeur. Cela peut éviter d'avoir une coque trop fine lorsque la hauteur de couche est faible. 0 signifie que ce paramètre est désactivé et que l'épaisseur de la coque supérieure est simplement déterminée par le nombre de couches de coque supérieures."
|
||||
|
||||
msgid "Anisotropic surfaces"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Anisotropic patterns on the top and bottom surfaces.\n"
|
||||
"Co-directional printing mode will be applied. For certain patterns, omni-directional filling provides color dispersion when using multi-colored or silk plastics.\n"
|
||||
"This option disable the gap fill.\n"
|
||||
"This option can increase a printing time."
|
||||
msgstr ""
|
||||
|
||||
msgid "Separated infills"
|
||||
msgstr ""
|
||||
|
||||
@@ -17832,9 +17972,6 @@ msgstr "Début / Fin"
|
||||
msgid "Frequency settings"
|
||||
msgstr "Paramètres de fréquence"
|
||||
|
||||
msgid "Hz"
|
||||
msgstr "Hz"
|
||||
|
||||
msgid "RepRap firmware uses the same frequency range for both axes."
|
||||
msgstr "Le firmware RepRap utilise la même plage de fréquence pour les deux axes."
|
||||
|
||||
@@ -19814,6 +19951,145 @@ msgstr "Aperçu de l’archive"
|
||||
msgid "Open File"
|
||||
msgstr "Ouvrir un fichier"
|
||||
|
||||
msgid "AMS Dryness Control"
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament Drying Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Stopping"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to dry temporarily due to ..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying Error"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please check the Assistant for troubleshooting"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please remove and store the filament (as shown)."
|
||||
msgstr ""
|
||||
|
||||
msgid "The AMS can rotate the filament which is properly stored, providing better drying results."
|
||||
msgstr ""
|
||||
|
||||
msgid "Rotate spool when drying"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "amsdrying"
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying-Heating"
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying-Dehumidifying"
|
||||
msgstr ""
|
||||
|
||||
msgid " maximum drying temperature is "
|
||||
msgstr ""
|
||||
|
||||
msgid " minimum drying temperature is "
|
||||
msgstr ""
|
||||
|
||||
msgid "This filament may not be completely dried."
|
||||
msgstr ""
|
||||
|
||||
msgid "This AMS is currently printing. To ensure print quality, the drying temperature cannot exceed the recommended drying temperature."
|
||||
msgstr ""
|
||||
|
||||
msgid "The temperature shall not exceed the filament's heat distortion temperature"
|
||||
msgstr ""
|
||||
|
||||
msgid "Minimum time value cannot be less than 1."
|
||||
msgstr ""
|
||||
|
||||
msgid "Maximum time value cannot be greater than 24."
|
||||
msgstr ""
|
||||
|
||||
msgid "Insufficient power"
|
||||
msgstr ""
|
||||
|
||||
msgid " Too many AMS drying simultaneously. Please plug in the power or stop other drying processes before starting."
|
||||
msgstr ""
|
||||
|
||||
msgid "AMS is busy"
|
||||
msgstr ""
|
||||
|
||||
msgid " AMS is calibrating | reading RFID | loading/unloading material, please wait."
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament in AMS outlet"
|
||||
msgstr ""
|
||||
|
||||
msgid " The high drying temperature may cause AMS blockage, please unload first."
|
||||
msgstr ""
|
||||
|
||||
msgid "Initiating AMS drying"
|
||||
msgstr ""
|
||||
|
||||
msgid "Not supported in 2D mode"
|
||||
msgstr ""
|
||||
|
||||
msgid "Task in progress"
|
||||
msgstr ""
|
||||
|
||||
msgid " The AMS might be in use during Task."
|
||||
msgstr ""
|
||||
|
||||
msgid " Firmware update in progress, please wait..."
|
||||
msgstr ""
|
||||
|
||||
msgid " Please plug in the power and then use the drying function."
|
||||
msgstr ""
|
||||
|
||||
msgid " The high drying temperature may cause AMS blockage. Please unload the filament manually before proceeding."
|
||||
msgstr ""
|
||||
|
||||
msgid "System is busy"
|
||||
msgstr ""
|
||||
|
||||
msgid " Initiating other drying processes, please wait a few seconds..."
|
||||
msgstr ""
|
||||
|
||||
msgid "For better drying results, remove the filament and allow it to rotate."
|
||||
msgstr ""
|
||||
|
||||
msgid "The AMS will automatically rotate the stored filament slots to enhance the drying performance."
|
||||
msgstr ""
|
||||
|
||||
msgid "Alternatively, you can dry the filament without removing it."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unknown filaments will be treated as PLA."
|
||||
msgstr ""
|
||||
|
||||
msgid "Please store the filament marked with an exclamation mark."
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament left in the feeder during drying may soften because the drying temperature exceeds the softening point of materials like PLA and TPU."
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking adapter connection"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking filament status"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking drying presets"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking filament location"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking air intake"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking air vent"
|
||||
msgstr ""
|
||||
|
||||
msgid "The filament may not be compatible with the current machine settings. Generic filament presets will be used."
|
||||
msgstr "Le filament peut ne pas être compatible avec les paramètres actuels de la machine. Les préréglages de filament génériques seront utilisés."
|
||||
|
||||
@@ -20129,6 +20405,12 @@ 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?"
|
||||
|
||||
#~ msgid "°C"
|
||||
#~ msgstr "°C"
|
||||
|
||||
#~ msgid "%"
|
||||
#~ msgstr "%"
|
||||
|
||||
#~ msgid "Renders cast shadows on the plate in realistic view."
|
||||
#~ msgstr "Affiche les ombres portées sur la plaque dans la vue réaliste."
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Orca Slicer\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-07-13 16:24-0300\n"
|
||||
"POT-Creation-Date: 2026-07-17 15:13-0300\n"
|
||||
"Language: hu\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -1978,6 +1978,17 @@ msgstr "Ez a legújabb verzió."
|
||||
msgid "Info"
|
||||
msgstr "Infó"
|
||||
|
||||
msgid "Loading Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Plugin %s is no longer available."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Plugin %s access is unauthorized."
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading printer & filament profiles"
|
||||
msgstr "Nyomtató- és filamentprofilok betöltése"
|
||||
|
||||
@@ -2095,6 +2106,18 @@ msgstr ""
|
||||
msgid "Resolve cloud sync conflict"
|
||||
msgstr ""
|
||||
|
||||
msgid "Syncing your account…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Migrating presets…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Fetching plugins…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading user presets…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Retrieving printer information, please try again later."
|
||||
msgstr "Nyomtatóinformációk lekérése folyamatban, próbáld újra később."
|
||||
|
||||
@@ -2225,6 +2248,21 @@ msgstr ""
|
||||
msgid "*"
|
||||
msgstr "*"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"Failed to open the Plugins dialog:\n"
|
||||
"%s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to open the Plugins dialog (unknown error)."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin Terminal"
|
||||
msgstr ""
|
||||
|
||||
msgid "Changing application language"
|
||||
msgstr "Alkalmazás nyelvének megváltoztatása"
|
||||
|
||||
@@ -5048,6 +5086,28 @@ msgstr "Érvénytelen formátum. Elvárt vektor formátum: \"%1%\""
|
||||
msgid "N/A"
|
||||
msgstr ""
|
||||
|
||||
msgid "System agents"
|
||||
msgstr ""
|
||||
|
||||
msgid "No plugin selected"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Select plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Remove plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configure"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Configure (%d)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Pick"
|
||||
msgstr "Kiválasztás"
|
||||
|
||||
@@ -5213,9 +5273,6 @@ msgstr "Anyagáramlás"
|
||||
msgid "Fan speed"
|
||||
msgstr "Ventilátor fordulatszám"
|
||||
|
||||
msgid "°C"
|
||||
msgstr "°C"
|
||||
|
||||
msgid "Time"
|
||||
msgstr "Idő"
|
||||
|
||||
@@ -7251,6 +7308,14 @@ msgctxt "Layers"
|
||||
msgid "Bottom"
|
||||
msgstr "Alsó"
|
||||
|
||||
msgid "Plugin Selection"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"No plugins capabilities available for this type.\n"
|
||||
"Enable or install some to use."
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable detection of build plate position"
|
||||
msgstr "Nyomtatótálca helyzetének érzékelése"
|
||||
|
||||
@@ -8149,6 +8214,40 @@ msgstr "Eszköz oldal"
|
||||
msgid "Synchronize AMS Filament Information"
|
||||
msgstr "AMS filament információk szinkronizálása"
|
||||
|
||||
msgid "OrcaCloud plugins required by the current preset are not installed:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Install Plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Local plugins required by the current preset are missing:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Find on OrcaCloud"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugins required by the current preset are not activated:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Activate Now"
|
||||
msgstr ""
|
||||
|
||||
msgid "The installed plugin does not provide the required capability — it may be outdated:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Preparing to install plugins..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Installing plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cancelling — finishing the current plugin..."
|
||||
msgstr ""
|
||||
|
||||
#, boost-format
|
||||
msgid "Installing %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plate Settings"
|
||||
msgstr "Tálca beállítások"
|
||||
|
||||
@@ -9224,6 +9323,9 @@ msgstr "Többszínű nyomtatás külső tekercssel"
|
||||
msgid "Your filament grouping method in the sliced file is not optimal."
|
||||
msgstr "A szeletelt fájlban használt filamentcsoportosítás nem optimális."
|
||||
|
||||
msgid "To ensure print quality, the drying temperature will be lowered during printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto Bed Leveling"
|
||||
msgstr "Automatikus asztalszintezés"
|
||||
|
||||
@@ -9951,6 +10053,12 @@ msgstr "Extrudálási szerep váltása G-kód"
|
||||
msgid "Post-processing Scripts"
|
||||
msgstr "Utófeldolgozó szkriptek"
|
||||
|
||||
msgid "Slicing Pipeline Plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin Configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Notes"
|
||||
msgstr "Megjegyzések"
|
||||
|
||||
@@ -11101,6 +11209,9 @@ msgstr "Nyomtathatóság váltása objektumhoz/alkatrészhez"
|
||||
msgid "Switch between Prepare/Preview"
|
||||
msgstr "Váltás előkészítés/előnézet között"
|
||||
|
||||
msgid "Open actions speed dial"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plater"
|
||||
msgstr "Tálca"
|
||||
|
||||
@@ -11965,6 +12076,9 @@ msgstr "API-kulcs"
|
||||
msgid "HTTP digest"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configuration for the plugin capabilities this preset uses, overriding the global Capabilities configuration. Stored as a raw JSON array and edited through the dialog behind the button, never typed in directly."
|
||||
msgstr ""
|
||||
|
||||
msgid "Avoid crossing walls"
|
||||
msgstr "Kerülje a falak keresztezését"
|
||||
|
||||
@@ -12947,6 +13061,24 @@ msgstr ""
|
||||
"Az alsó felületi réteg sűrűsége. Esztétikai vagy funkcionális célokra szolgál, nem pedig olyan problémák javítására, mint a túlextrudálás.\n"
|
||||
"FIGYELMEZTETÉS: Ennek az értéknek a csökkentése kedvezőtlenül befolyásolhatja a tárgyasztalhoz való tapadást."
|
||||
|
||||
msgid "Top surface fill order"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
|
||||
"Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
|
||||
"Default uses shortest-path ordering, which may run in either direction."
|
||||
msgstr ""
|
||||
|
||||
msgid "Bottom surface fill order"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
|
||||
"Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
|
||||
"Default uses shortest-path ordering, which may run in either direction."
|
||||
msgstr ""
|
||||
|
||||
msgid "Internal solid infill pattern"
|
||||
msgstr "Belső tömör kitöltés mintája"
|
||||
|
||||
@@ -14203,9 +14335,6 @@ msgstr ""
|
||||
"Ha a firmware már letiltja a ventilátort egy küszöbérték alatt (például a Klipper [fan] off_below: 0.10 értéke kikapcsolja a ventilátort, ha a parancsolt munkaciklus 10% alatt van), akkor ezt az opciót és a firmware küszöbértékét ideális esetben ugyanarra az értékre kell állítani. Ezek megfeleltetése (pl. off_below: 0,10 a Klipperben és 10% itt) garantálja, hogy a szeletelő soha nem ad ki olyan nullától eltérő értéket, amelyet a firmware csendben ejtene, és a ventilátor soha nem kap olyan értéket, amely alacsonyabb, mint amiről tudod, hogy ténylegesen képes forogni.\n"
|
||||
"A deaktiváláshoz állítsd 0-ra."
|
||||
|
||||
msgid "%"
|
||||
msgstr "%"
|
||||
|
||||
msgid "Time cost"
|
||||
msgstr "Időköltség"
|
||||
|
||||
@@ -14907,6 +15036,9 @@ msgstr ""
|
||||
"A rezgéskompenzáció letiltásához használd a Letiltás típust.\n"
|
||||
"RRF: X és Y értékek egyenlőek."
|
||||
|
||||
msgid "Hz"
|
||||
msgstr "Hz"
|
||||
|
||||
msgid "Y"
|
||||
msgstr "Y"
|
||||
|
||||
@@ -15195,6 +15327,15 @@ msgstr "Extrudálási szerepkör G-kód módosítása (folyamat)"
|
||||
msgid "This G-code is inserted when the extrusion role is changed. It runs after the machine and filament extrusion role G-code."
|
||||
msgstr "Ez a G-kód akkor kerül beillesztésre, amikor az extrudálási szerep megváltozik. A gép és a filament extrudálási szerepkör G-kódja után fut."
|
||||
|
||||
msgid "Plugins Used"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin capabilities referenced by this preset, stored as name;uuid;capability."
|
||||
msgstr ""
|
||||
|
||||
msgid "Python plugin(s) invoked at each slicing pipeline step to read and modify intermediate slicing data, including a final G-code post-processing step. Research/experimental."
|
||||
msgstr ""
|
||||
|
||||
msgid "Printer type"
|
||||
msgstr "Nyomtató típusa"
|
||||
|
||||
@@ -15263,6 +15404,15 @@ msgstr "Visszahúzott mennyiség törlés előtt"
|
||||
msgid "This is the length of fast retraction before a wipe, relative to retraction length."
|
||||
msgstr "Ez a törlés előtti gyors visszahúzás hossza a visszahúzási hosszhoz viszonyítva."
|
||||
|
||||
msgid "Retract amount after wipe"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The length of fast retraction after wipe, relative to retraction length.\n"
|
||||
"The value will be clamped by 100% minus the retract amount before the wipe value."
|
||||
msgstr ""
|
||||
|
||||
# TODO: Review, changed by lang refactor. PR 14254
|
||||
msgid "Retract on layer change"
|
||||
msgstr "Visszahúzás rétegváltáskor"
|
||||
@@ -16277,16 +16427,6 @@ msgstr "Felső héj vastagság"
|
||||
msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers."
|
||||
msgstr "A felső szilárd rétegek száma szeleteléskor megnő, ha a felső héjrétegekből számított vastagság kisebb ennél az értéknél. Ezzel elkerülhető, hogy túl vékony legyen a héj kis rétegmagasságnál. A 0 azt jelenti, hogy ez a beállítás ki van kapcsolva, és a felső héj vastagságát egyszerűen a felső héjrétegek száma határozza meg."
|
||||
|
||||
msgid "Anisotropic surfaces"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Anisotropic patterns on the top and bottom surfaces.\n"
|
||||
"Co-directional printing mode will be applied. For certain patterns, omni-directional filling provides color dispersion when using multi-colored or silk plastics.\n"
|
||||
"This option disable the gap fill.\n"
|
||||
"This option can increase a printing time."
|
||||
msgstr ""
|
||||
|
||||
msgid "Separated infills"
|
||||
msgstr ""
|
||||
|
||||
@@ -18120,9 +18260,6 @@ msgstr "Kezdés / Vég"
|
||||
msgid "Frequency settings"
|
||||
msgstr "Frekvenciabeállítások"
|
||||
|
||||
msgid "Hz"
|
||||
msgstr "Hz"
|
||||
|
||||
msgid "RepRap firmware uses the same frequency range for both axes."
|
||||
msgstr "A RepRap firmware mindkét tengelyhez ugyanazt a frekvenciatartományt használja."
|
||||
|
||||
@@ -20098,6 +20235,145 @@ msgstr ""
|
||||
msgid "Open File"
|
||||
msgstr ""
|
||||
|
||||
msgid "AMS Dryness Control"
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament Drying Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Stopping"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to dry temporarily due to ..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying Error"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please check the Assistant for troubleshooting"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please remove and store the filament (as shown)."
|
||||
msgstr ""
|
||||
|
||||
msgid "The AMS can rotate the filament which is properly stored, providing better drying results."
|
||||
msgstr ""
|
||||
|
||||
msgid "Rotate spool when drying"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "amsdrying"
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying-Heating"
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying-Dehumidifying"
|
||||
msgstr ""
|
||||
|
||||
msgid " maximum drying temperature is "
|
||||
msgstr ""
|
||||
|
||||
msgid " minimum drying temperature is "
|
||||
msgstr ""
|
||||
|
||||
msgid "This filament may not be completely dried."
|
||||
msgstr ""
|
||||
|
||||
msgid "This AMS is currently printing. To ensure print quality, the drying temperature cannot exceed the recommended drying temperature."
|
||||
msgstr ""
|
||||
|
||||
msgid "The temperature shall not exceed the filament's heat distortion temperature"
|
||||
msgstr ""
|
||||
|
||||
msgid "Minimum time value cannot be less than 1."
|
||||
msgstr ""
|
||||
|
||||
msgid "Maximum time value cannot be greater than 24."
|
||||
msgstr ""
|
||||
|
||||
msgid "Insufficient power"
|
||||
msgstr ""
|
||||
|
||||
msgid " Too many AMS drying simultaneously. Please plug in the power or stop other drying processes before starting."
|
||||
msgstr ""
|
||||
|
||||
msgid "AMS is busy"
|
||||
msgstr ""
|
||||
|
||||
msgid " AMS is calibrating | reading RFID | loading/unloading material, please wait."
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament in AMS outlet"
|
||||
msgstr ""
|
||||
|
||||
msgid " The high drying temperature may cause AMS blockage, please unload first."
|
||||
msgstr ""
|
||||
|
||||
msgid "Initiating AMS drying"
|
||||
msgstr ""
|
||||
|
||||
msgid "Not supported in 2D mode"
|
||||
msgstr ""
|
||||
|
||||
msgid "Task in progress"
|
||||
msgstr ""
|
||||
|
||||
msgid " The AMS might be in use during Task."
|
||||
msgstr ""
|
||||
|
||||
msgid " Firmware update in progress, please wait..."
|
||||
msgstr ""
|
||||
|
||||
msgid " Please plug in the power and then use the drying function."
|
||||
msgstr ""
|
||||
|
||||
msgid " The high drying temperature may cause AMS blockage. Please unload the filament manually before proceeding."
|
||||
msgstr ""
|
||||
|
||||
msgid "System is busy"
|
||||
msgstr ""
|
||||
|
||||
msgid " Initiating other drying processes, please wait a few seconds..."
|
||||
msgstr ""
|
||||
|
||||
msgid "For better drying results, remove the filament and allow it to rotate."
|
||||
msgstr ""
|
||||
|
||||
msgid "The AMS will automatically rotate the stored filament slots to enhance the drying performance."
|
||||
msgstr ""
|
||||
|
||||
msgid "Alternatively, you can dry the filament without removing it."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unknown filaments will be treated as PLA."
|
||||
msgstr ""
|
||||
|
||||
msgid "Please store the filament marked with an exclamation mark."
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament left in the feeder during drying may soften because the drying temperature exceeds the softening point of materials like PLA and TPU."
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking adapter connection"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking filament status"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking drying presets"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking filament location"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking air intake"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking air vent"
|
||||
msgstr ""
|
||||
|
||||
msgid "The filament may not be compatible with the current machine settings. Generic filament presets will be used."
|
||||
msgstr "Előfordulhat, hogy a filament nem kompatibilis az aktuális gépbeállításokkal. Általános filamentbeállítások lesznek használva."
|
||||
|
||||
@@ -20423,6 +20699,12 @@ msgstr ""
|
||||
"Kunkorodás elkerülése\n"
|
||||
"Tudtad, hogy a kunkorodásra hajlamos anyagok (például ABS) nyomtatásakor a tárgyasztal hőmérsékletének növelése csökkentheti a kunkorodás valószínűségét?"
|
||||
|
||||
#~ msgid "°C"
|
||||
#~ msgstr "°C"
|
||||
|
||||
#~ msgid "%"
|
||||
#~ msgstr "%"
|
||||
|
||||
#~ msgid "Continue to sync filaments"
|
||||
#~ msgstr "Filamentek szinkronizálásának folytatása"
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Orca Slicer\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-07-13 16:24-0300\n"
|
||||
"POT-Creation-Date: 2026-07-17 15:13-0300\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
@@ -1980,6 +1980,17 @@ msgstr "Hai la versione più recente."
|
||||
msgid "Info"
|
||||
msgstr "Informazioni"
|
||||
|
||||
msgid "Loading Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Plugin %s is no longer available."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Plugin %s access is unauthorized."
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading printer & filament profiles"
|
||||
msgstr ""
|
||||
|
||||
@@ -2097,6 +2108,18 @@ msgstr ""
|
||||
msgid "Resolve cloud sync conflict"
|
||||
msgstr ""
|
||||
|
||||
msgid "Syncing your account…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Migrating presets…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Fetching plugins…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading user presets…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Retrieving printer information, please try again later."
|
||||
msgstr "Recupero delle informazioni della stampante, riprovare più tardi."
|
||||
|
||||
@@ -2227,6 +2250,21 @@ msgstr ""
|
||||
msgid "*"
|
||||
msgstr "*"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"Failed to open the Plugins dialog:\n"
|
||||
"%s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to open the Plugins dialog (unknown error)."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin Terminal"
|
||||
msgstr ""
|
||||
|
||||
msgid "Changing application language"
|
||||
msgstr "Modifica lingua applicazione"
|
||||
|
||||
@@ -5049,6 +5087,28 @@ msgstr "Formato non valido. Formato vettoriale previsto: \"%1%\""
|
||||
msgid "N/A"
|
||||
msgstr "N/D"
|
||||
|
||||
msgid "System agents"
|
||||
msgstr ""
|
||||
|
||||
msgid "No plugin selected"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Select plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Remove plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configure"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Configure (%d)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Pick"
|
||||
msgstr "Seleziona"
|
||||
|
||||
@@ -5214,9 +5274,6 @@ msgstr "Flusso di stampa"
|
||||
msgid "Fan speed"
|
||||
msgstr "Velocità ventola"
|
||||
|
||||
msgid "°C"
|
||||
msgstr "°C"
|
||||
|
||||
msgid "Time"
|
||||
msgstr "Tempo"
|
||||
|
||||
@@ -7252,6 +7309,14 @@ msgctxt "Layers"
|
||||
msgid "Bottom"
|
||||
msgstr "Inferiore"
|
||||
|
||||
msgid "Plugin Selection"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"No plugins capabilities available for this type.\n"
|
||||
"Enable or install some to use."
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable detection of build plate position"
|
||||
msgstr "Abilita rilevamento posizione del piatto"
|
||||
|
||||
@@ -8156,6 +8221,40 @@ msgstr "Pagina dispositivo"
|
||||
msgid "Synchronize AMS Filament Information"
|
||||
msgstr "Sincronizza informazioni filamento AMS"
|
||||
|
||||
msgid "OrcaCloud plugins required by the current preset are not installed:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Install Plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Local plugins required by the current preset are missing:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Find on OrcaCloud"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugins required by the current preset are not activated:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Activate Now"
|
||||
msgstr ""
|
||||
|
||||
msgid "The installed plugin does not provide the required capability — it may be outdated:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Preparing to install plugins..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Installing plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cancelling — finishing the current plugin..."
|
||||
msgstr ""
|
||||
|
||||
#, boost-format
|
||||
msgid "Installing %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plate Settings"
|
||||
msgstr "Impostazioni Piatto"
|
||||
|
||||
@@ -9214,6 +9313,9 @@ msgstr "Multicolore con esterno"
|
||||
msgid "Your filament grouping method in the sliced file is not optimal."
|
||||
msgstr "Il metodo di raggruppamento filamenti nel file di slicing non è ottimale."
|
||||
|
||||
msgid "To ensure print quality, the drying temperature will be lowered during printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto Bed Leveling"
|
||||
msgstr "Livellamento automatico del piatto"
|
||||
|
||||
@@ -9944,6 +10046,12 @@ msgstr "G-code cambio ruolo di estrusione"
|
||||
msgid "Post-processing Scripts"
|
||||
msgstr "Script di post-elaborazione"
|
||||
|
||||
msgid "Slicing Pipeline Plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin Configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Notes"
|
||||
msgstr "Note"
|
||||
|
||||
@@ -11083,6 +11191,9 @@ msgstr "Attiva/disattiva stampa per oggetto/parte"
|
||||
msgid "Switch between Prepare/Preview"
|
||||
msgstr "Passa tra Prepara e Anteprima"
|
||||
|
||||
msgid "Open actions speed dial"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plater"
|
||||
msgstr "Piatto"
|
||||
|
||||
@@ -11947,6 +12058,9 @@ msgstr "Chiave API"
|
||||
msgid "HTTP digest"
|
||||
msgstr "Autenticazione sicura HTTP"
|
||||
|
||||
msgid "Configuration for the plugin capabilities this preset uses, overriding the global Capabilities configuration. Stored as a raw JSON array and edited through the dialog behind the button, never typed in directly."
|
||||
msgstr ""
|
||||
|
||||
msgid "Avoid crossing walls"
|
||||
msgstr "Evita di attraversare le pareti"
|
||||
|
||||
@@ -12930,6 +13044,24 @@ msgstr ""
|
||||
"Densità dello strato superficiale inferiore. Destinato a scopi estetici o funzionali, non per risolvere problemi come la sovraestrusione.\n"
|
||||
"ATTENZIONE: la riduzione di questo valore potrebbe influire negativamente sull'adesione al piatto."
|
||||
|
||||
msgid "Top surface fill order"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
|
||||
"Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
|
||||
"Default uses shortest-path ordering, which may run in either direction."
|
||||
msgstr ""
|
||||
|
||||
msgid "Bottom surface fill order"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
|
||||
"Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
|
||||
"Default uses shortest-path ordering, which may run in either direction."
|
||||
msgstr ""
|
||||
|
||||
msgid "Internal solid infill pattern"
|
||||
msgstr "Motivo riempimento solido interno"
|
||||
|
||||
@@ -14182,9 +14314,6 @@ msgid ""
|
||||
"Set to 0 to deactivate."
|
||||
msgstr ""
|
||||
|
||||
msgid "%"
|
||||
msgstr "%"
|
||||
|
||||
msgid "Time cost"
|
||||
msgstr "Costo orario"
|
||||
|
||||
@@ -14884,6 +15013,9 @@ msgstr ""
|
||||
"Per disabilitare la compensazione della risonanza, selezionare il tipo \"Disabilita\".\n"
|
||||
"RRF: i valori X e Y sono uguali."
|
||||
|
||||
msgid "Hz"
|
||||
msgstr "Hz"
|
||||
|
||||
msgid "Y"
|
||||
msgstr "Y"
|
||||
|
||||
@@ -15169,6 +15301,15 @@ msgstr "Modifica G-code ruolo di estrusione (processo)"
|
||||
msgid "This G-code is inserted when the extrusion role is changed. It runs after the machine and filament extrusion role G-code."
|
||||
msgstr "Questo G-code viene inserito quando si effettua il cambio del ruolo di estrusione. Viene eseguito dopo il G-code della macchina e del ruolo di estrusione del filamento."
|
||||
|
||||
msgid "Plugins Used"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin capabilities referenced by this preset, stored as name;uuid;capability."
|
||||
msgstr ""
|
||||
|
||||
msgid "Python plugin(s) invoked at each slicing pipeline step to read and modify intermediate slicing data, including a final G-code post-processing step. Research/experimental."
|
||||
msgstr ""
|
||||
|
||||
msgid "Printer type"
|
||||
msgstr "Tipo stampante"
|
||||
|
||||
@@ -15237,6 +15378,15 @@ msgstr "Quantità di retrazione prima di spurgo"
|
||||
msgid "This is the length of fast retraction before a wipe, relative to retraction length."
|
||||
msgstr "Indica la lunghezza della retrazione veloce prima di uno spurgo, rispetto alla lunghezza di retrazione."
|
||||
|
||||
msgid "Retract amount after wipe"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The length of fast retraction after wipe, relative to retraction length.\n"
|
||||
"The value will be clamped by 100% minus the retract amount before the wipe value."
|
||||
msgstr ""
|
||||
|
||||
# TODO: Review, changed by lang refactor. PR 14254
|
||||
msgid "Retract on layer change"
|
||||
msgstr "Ritrai al cambio di strato"
|
||||
@@ -16245,16 +16395,6 @@ msgstr "Spessore guscio superiore"
|
||||
msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers."
|
||||
msgstr "Il numero di strati solidi superiori viene aumentato durante l'elaborazione se lo spessore calcolato dagli strati del guscio superiore è più sottile di questo valore. In questo modo si evita di avere un guscio troppo sottile quando l'altezza degli strati è piccola. Il valore 0 indica che questa impostazione è disattivata e che lo spessore del guscio superiore è determinato in modo assoluto dagli strati del guscio superiore."
|
||||
|
||||
msgid "Anisotropic surfaces"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Anisotropic patterns on the top and bottom surfaces.\n"
|
||||
"Co-directional printing mode will be applied. For certain patterns, omni-directional filling provides color dispersion when using multi-colored or silk plastics.\n"
|
||||
"This option disable the gap fill.\n"
|
||||
"This option can increase a printing time."
|
||||
msgstr ""
|
||||
|
||||
msgid "Separated infills"
|
||||
msgstr ""
|
||||
|
||||
@@ -18086,9 +18226,6 @@ msgstr "Inizio / Fine"
|
||||
msgid "Frequency settings"
|
||||
msgstr "Impostazioni frequenza"
|
||||
|
||||
msgid "Hz"
|
||||
msgstr "Hz"
|
||||
|
||||
msgid "RepRap firmware uses the same frequency range for both axes."
|
||||
msgstr "Il firmware RepRap utilizza lo stesso intervallo di frequenza per entrambi gli assi."
|
||||
|
||||
@@ -20081,6 +20218,145 @@ msgstr ""
|
||||
msgid "Open File"
|
||||
msgstr ""
|
||||
|
||||
msgid "AMS Dryness Control"
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament Drying Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Stopping"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to dry temporarily due to ..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying Error"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please check the Assistant for troubleshooting"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please remove and store the filament (as shown)."
|
||||
msgstr ""
|
||||
|
||||
msgid "The AMS can rotate the filament which is properly stored, providing better drying results."
|
||||
msgstr ""
|
||||
|
||||
msgid "Rotate spool when drying"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "amsdrying"
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying-Heating"
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying-Dehumidifying"
|
||||
msgstr ""
|
||||
|
||||
msgid " maximum drying temperature is "
|
||||
msgstr ""
|
||||
|
||||
msgid " minimum drying temperature is "
|
||||
msgstr ""
|
||||
|
||||
msgid "This filament may not be completely dried."
|
||||
msgstr ""
|
||||
|
||||
msgid "This AMS is currently printing. To ensure print quality, the drying temperature cannot exceed the recommended drying temperature."
|
||||
msgstr ""
|
||||
|
||||
msgid "The temperature shall not exceed the filament's heat distortion temperature"
|
||||
msgstr ""
|
||||
|
||||
msgid "Minimum time value cannot be less than 1."
|
||||
msgstr ""
|
||||
|
||||
msgid "Maximum time value cannot be greater than 24."
|
||||
msgstr ""
|
||||
|
||||
msgid "Insufficient power"
|
||||
msgstr ""
|
||||
|
||||
msgid " Too many AMS drying simultaneously. Please plug in the power or stop other drying processes before starting."
|
||||
msgstr ""
|
||||
|
||||
msgid "AMS is busy"
|
||||
msgstr ""
|
||||
|
||||
msgid " AMS is calibrating | reading RFID | loading/unloading material, please wait."
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament in AMS outlet"
|
||||
msgstr ""
|
||||
|
||||
msgid " The high drying temperature may cause AMS blockage, please unload first."
|
||||
msgstr ""
|
||||
|
||||
msgid "Initiating AMS drying"
|
||||
msgstr ""
|
||||
|
||||
msgid "Not supported in 2D mode"
|
||||
msgstr ""
|
||||
|
||||
msgid "Task in progress"
|
||||
msgstr ""
|
||||
|
||||
msgid " The AMS might be in use during Task."
|
||||
msgstr ""
|
||||
|
||||
msgid " Firmware update in progress, please wait..."
|
||||
msgstr ""
|
||||
|
||||
msgid " Please plug in the power and then use the drying function."
|
||||
msgstr ""
|
||||
|
||||
msgid " The high drying temperature may cause AMS blockage. Please unload the filament manually before proceeding."
|
||||
msgstr ""
|
||||
|
||||
msgid "System is busy"
|
||||
msgstr ""
|
||||
|
||||
msgid " Initiating other drying processes, please wait a few seconds..."
|
||||
msgstr ""
|
||||
|
||||
msgid "For better drying results, remove the filament and allow it to rotate."
|
||||
msgstr ""
|
||||
|
||||
msgid "The AMS will automatically rotate the stored filament slots to enhance the drying performance."
|
||||
msgstr ""
|
||||
|
||||
msgid "Alternatively, you can dry the filament without removing it."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unknown filaments will be treated as PLA."
|
||||
msgstr ""
|
||||
|
||||
msgid "Please store the filament marked with an exclamation mark."
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament left in the feeder during drying may soften because the drying temperature exceeds the softening point of materials like PLA and TPU."
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking adapter connection"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking filament status"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking drying presets"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking filament location"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking air intake"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking air vent"
|
||||
msgstr ""
|
||||
|
||||
msgid "The filament may not be compatible with the current machine settings. Generic filament presets will be used."
|
||||
msgstr "Il filamento potrebbe non essere compatibile con le impostazioni correnti della macchina. Verranno utilizzati i profili di filamento generici."
|
||||
|
||||
@@ -20403,6 +20679,12 @@ msgstr ""
|
||||
"Evita le deformazioni\n"
|
||||
"Sapevi che quando si stampano materiali soggetti a deformazioni come l'ABS, aumentare in modo appropriato la temperatura del piano riscaldato può ridurre la probabilità di deformazione?"
|
||||
|
||||
#~ msgid "°C"
|
||||
#~ msgstr "°C"
|
||||
|
||||
#~ msgid "%"
|
||||
#~ msgstr "%"
|
||||
|
||||
#~ msgid "Continue to sync filaments"
|
||||
#~ msgstr "Continua la sincronizzazione dei filamenti"
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Orca Slicer\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-07-13 16:24-0300\n"
|
||||
"POT-Creation-Date: 2026-07-17 15:13-0300\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
@@ -1979,6 +1979,17 @@ msgstr "最新バージョンです。"
|
||||
msgid "Info"
|
||||
msgstr "情報"
|
||||
|
||||
msgid "Loading Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Plugin %s is no longer available."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Plugin %s access is unauthorized."
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading printer & filament profiles"
|
||||
msgstr ""
|
||||
|
||||
@@ -2096,6 +2107,18 @@ msgstr ""
|
||||
msgid "Resolve cloud sync conflict"
|
||||
msgstr ""
|
||||
|
||||
msgid "Syncing your account…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Migrating presets…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Fetching plugins…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading user presets…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Retrieving printer information, please try again later."
|
||||
msgstr "プリンター情報を取得中です。後でもう一度お試しください。"
|
||||
|
||||
@@ -2221,6 +2244,21 @@ msgstr ""
|
||||
msgid "*"
|
||||
msgstr "*"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"Failed to open the Plugins dialog:\n"
|
||||
"%s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to open the Plugins dialog (unknown error)."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin Terminal"
|
||||
msgstr ""
|
||||
|
||||
msgid "Changing application language"
|
||||
msgstr "言語を変更"
|
||||
|
||||
@@ -5022,6 +5060,28 @@ msgstr "無効なフォーマット、%1%であるはずです。"
|
||||
msgid "N/A"
|
||||
msgstr ""
|
||||
|
||||
msgid "System agents"
|
||||
msgstr ""
|
||||
|
||||
msgid "No plugin selected"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Select plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Remove plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configure"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Configure (%d)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Pick"
|
||||
msgstr "ピック"
|
||||
|
||||
@@ -5187,9 +5247,6 @@ msgstr "フロー率"
|
||||
msgid "Fan speed"
|
||||
msgstr "回転速度"
|
||||
|
||||
msgid "°C"
|
||||
msgstr "°C"
|
||||
|
||||
msgid "Time"
|
||||
msgstr "時間"
|
||||
|
||||
@@ -7205,6 +7262,14 @@ msgctxt "Layers"
|
||||
msgid "Bottom"
|
||||
msgstr "底面"
|
||||
|
||||
msgid "Plugin Selection"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"No plugins capabilities available for this type.\n"
|
||||
"Enable or install some to use."
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable detection of build plate position"
|
||||
msgstr "プレート位置検出を有効"
|
||||
|
||||
@@ -8114,6 +8179,40 @@ msgstr "デバイスページ"
|
||||
msgid "Synchronize AMS Filament Information"
|
||||
msgstr "AMSフィラメント情報を同期"
|
||||
|
||||
msgid "OrcaCloud plugins required by the current preset are not installed:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Install Plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Local plugins required by the current preset are missing:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Find on OrcaCloud"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugins required by the current preset are not activated:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Activate Now"
|
||||
msgstr ""
|
||||
|
||||
msgid "The installed plugin does not provide the required capability — it may be outdated:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Preparing to install plugins..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Installing plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cancelling — finishing the current plugin..."
|
||||
msgstr ""
|
||||
|
||||
#, boost-format
|
||||
msgid "Installing %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plate Settings"
|
||||
msgstr "プレート設定"
|
||||
|
||||
@@ -9175,6 +9274,9 @@ msgstr "外部スプールでマルチカラー"
|
||||
msgid "Your filament grouping method in the sliced file is not optimal."
|
||||
msgstr "スライスファイルのフィラメントグルーピング方法は最適ではありません。"
|
||||
|
||||
msgid "To ensure print quality, the drying temperature will be lowered during printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto Bed Leveling"
|
||||
msgstr "自動ベッドレベリング"
|
||||
|
||||
@@ -9903,6 +10005,12 @@ msgstr "押出ロール変更G-code"
|
||||
msgid "Post-processing Scripts"
|
||||
msgstr "ポストプロセッシングスクリプト"
|
||||
|
||||
msgid "Slicing Pipeline Plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin Configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Notes"
|
||||
msgstr "メモ"
|
||||
|
||||
@@ -11016,6 +11124,9 @@ msgstr ""
|
||||
msgid "Switch between Prepare/Preview"
|
||||
msgstr "準備/プレビュー間の切り替え"
|
||||
|
||||
msgid "Open actions speed dial"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plater"
|
||||
msgstr "準備"
|
||||
|
||||
@@ -11862,6 +11973,9 @@ msgstr "APIキー"
|
||||
msgid "HTTP digest"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configuration for the plugin capabilities this preset uses, overriding the global Capabilities configuration. Stored as a raw JSON array and edited through the dialog behind the button, never typed in directly."
|
||||
msgstr ""
|
||||
|
||||
msgid "Avoid crossing walls"
|
||||
msgstr "壁上の移動を迂回"
|
||||
|
||||
@@ -12733,6 +12847,24 @@ msgid ""
|
||||
"WARNING: Lowering this value may negatively affect bed adhesion."
|
||||
msgstr ""
|
||||
|
||||
msgid "Top surface fill order"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
|
||||
"Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
|
||||
"Default uses shortest-path ordering, which may run in either direction."
|
||||
msgstr ""
|
||||
|
||||
msgid "Bottom surface fill order"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
|
||||
"Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
|
||||
"Default uses shortest-path ordering, which may run in either direction."
|
||||
msgstr ""
|
||||
|
||||
msgid "Internal solid infill pattern"
|
||||
msgstr "内部ソリッドインフィルパターン"
|
||||
|
||||
@@ -13900,9 +14032,6 @@ msgid ""
|
||||
"Set to 0 to deactivate."
|
||||
msgstr ""
|
||||
|
||||
msgid "%"
|
||||
msgstr "%"
|
||||
|
||||
msgid "Time cost"
|
||||
msgstr ""
|
||||
|
||||
@@ -14568,6 +14697,9 @@ msgid ""
|
||||
"RRF: X and Y values are equal."
|
||||
msgstr ""
|
||||
|
||||
msgid "Hz"
|
||||
msgstr "Hz"
|
||||
|
||||
msgid "Y"
|
||||
msgstr "Y"
|
||||
|
||||
@@ -14817,6 +14949,15 @@ msgstr ""
|
||||
msgid "This G-code is inserted when the extrusion role is changed. It runs after the machine and filament extrusion role G-code."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugins Used"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin capabilities referenced by this preset, stored as name;uuid;capability."
|
||||
msgstr ""
|
||||
|
||||
msgid "Python plugin(s) invoked at each slicing pipeline step to read and modify intermediate slicing data, including a final G-code post-processing step. Research/experimental."
|
||||
msgstr ""
|
||||
|
||||
msgid "Printer type"
|
||||
msgstr "プリンタータイプ"
|
||||
|
||||
@@ -14885,6 +15026,15 @@ msgstr "拭き上げ前のリトラクション量"
|
||||
msgid "This is the length of fast retraction before a wipe, relative to retraction length."
|
||||
msgstr "拭き上げ前のリトラクション量です、通常のリトラクション量の比率で指定します。"
|
||||
|
||||
msgid "Retract amount after wipe"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The length of fast retraction after wipe, relative to retraction length.\n"
|
||||
"The value will be clamped by 100% minus the retract amount before the wipe value."
|
||||
msgstr ""
|
||||
|
||||
# TODO: Review, changed by lang refactor. PR 14254
|
||||
msgid "Retract on layer change"
|
||||
msgstr "積層変更時のリトラクション"
|
||||
@@ -15858,16 +16008,6 @@ msgstr "トップ面厚さ"
|
||||
msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers."
|
||||
msgstr "トップ面の厚さです、トップ面層数で決まった厚みがこの値より小さい場合、層数を増やします。この値が0にする場合、この設定が無効となり、設定した層数で造形します。"
|
||||
|
||||
msgid "Anisotropic surfaces"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Anisotropic patterns on the top and bottom surfaces.\n"
|
||||
"Co-directional printing mode will be applied. For certain patterns, omni-directional filling provides color dispersion when using multi-colored or silk plastics.\n"
|
||||
"This option disable the gap fill.\n"
|
||||
"This option can increase a printing time."
|
||||
msgstr ""
|
||||
|
||||
msgid "Separated infills"
|
||||
msgstr ""
|
||||
|
||||
@@ -17627,9 +17767,6 @@ msgstr "開始/終了"
|
||||
msgid "Frequency settings"
|
||||
msgstr "周波数設定"
|
||||
|
||||
msgid "Hz"
|
||||
msgstr "Hz"
|
||||
|
||||
msgid "RepRap firmware uses the same frequency range for both axes."
|
||||
msgstr ""
|
||||
|
||||
@@ -19572,6 +19709,145 @@ msgstr ""
|
||||
msgid "Open File"
|
||||
msgstr ""
|
||||
|
||||
msgid "AMS Dryness Control"
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament Drying Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Stopping"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to dry temporarily due to ..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying Error"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please check the Assistant for troubleshooting"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please remove and store the filament (as shown)."
|
||||
msgstr ""
|
||||
|
||||
msgid "The AMS can rotate the filament which is properly stored, providing better drying results."
|
||||
msgstr ""
|
||||
|
||||
msgid "Rotate spool when drying"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "amsdrying"
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying-Heating"
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying-Dehumidifying"
|
||||
msgstr ""
|
||||
|
||||
msgid " maximum drying temperature is "
|
||||
msgstr ""
|
||||
|
||||
msgid " minimum drying temperature is "
|
||||
msgstr ""
|
||||
|
||||
msgid "This filament may not be completely dried."
|
||||
msgstr ""
|
||||
|
||||
msgid "This AMS is currently printing. To ensure print quality, the drying temperature cannot exceed the recommended drying temperature."
|
||||
msgstr ""
|
||||
|
||||
msgid "The temperature shall not exceed the filament's heat distortion temperature"
|
||||
msgstr ""
|
||||
|
||||
msgid "Minimum time value cannot be less than 1."
|
||||
msgstr ""
|
||||
|
||||
msgid "Maximum time value cannot be greater than 24."
|
||||
msgstr ""
|
||||
|
||||
msgid "Insufficient power"
|
||||
msgstr ""
|
||||
|
||||
msgid " Too many AMS drying simultaneously. Please plug in the power or stop other drying processes before starting."
|
||||
msgstr ""
|
||||
|
||||
msgid "AMS is busy"
|
||||
msgstr ""
|
||||
|
||||
msgid " AMS is calibrating | reading RFID | loading/unloading material, please wait."
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament in AMS outlet"
|
||||
msgstr ""
|
||||
|
||||
msgid " The high drying temperature may cause AMS blockage, please unload first."
|
||||
msgstr ""
|
||||
|
||||
msgid "Initiating AMS drying"
|
||||
msgstr ""
|
||||
|
||||
msgid "Not supported in 2D mode"
|
||||
msgstr ""
|
||||
|
||||
msgid "Task in progress"
|
||||
msgstr ""
|
||||
|
||||
msgid " The AMS might be in use during Task."
|
||||
msgstr ""
|
||||
|
||||
msgid " Firmware update in progress, please wait..."
|
||||
msgstr ""
|
||||
|
||||
msgid " Please plug in the power and then use the drying function."
|
||||
msgstr ""
|
||||
|
||||
msgid " The high drying temperature may cause AMS blockage. Please unload the filament manually before proceeding."
|
||||
msgstr ""
|
||||
|
||||
msgid "System is busy"
|
||||
msgstr ""
|
||||
|
||||
msgid " Initiating other drying processes, please wait a few seconds..."
|
||||
msgstr ""
|
||||
|
||||
msgid "For better drying results, remove the filament and allow it to rotate."
|
||||
msgstr ""
|
||||
|
||||
msgid "The AMS will automatically rotate the stored filament slots to enhance the drying performance."
|
||||
msgstr ""
|
||||
|
||||
msgid "Alternatively, you can dry the filament without removing it."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unknown filaments will be treated as PLA."
|
||||
msgstr ""
|
||||
|
||||
msgid "Please store the filament marked with an exclamation mark."
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament left in the feeder during drying may soften because the drying temperature exceeds the softening point of materials like PLA and TPU."
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking adapter connection"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking filament status"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking drying presets"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking filament location"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking air intake"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking air vent"
|
||||
msgstr ""
|
||||
|
||||
msgid "The filament may not be compatible with the current machine settings. Generic filament presets will be used."
|
||||
msgstr "フィラメントが現在のマシン設定と互換性がない可能性があります。ジェネリックフィラメントプリセットが使用されます。"
|
||||
|
||||
@@ -19871,6 +20147,12 @@ msgstr ""
|
||||
"反りを避ける\n"
|
||||
"ABSのような反りやすい素材を印刷する場合、ヒートベッドの温度を適切に上げることで、反りが発生する確率を下げることができることをご存知ですか?"
|
||||
|
||||
#~ msgid "°C"
|
||||
#~ msgstr "°C"
|
||||
|
||||
#~ msgid "%"
|
||||
#~ msgstr "%"
|
||||
|
||||
#~ msgid "Continue to sync filaments"
|
||||
#~ msgstr "フィラメントの同期を続行"
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Orca Slicer\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-07-13 16:24-0300\n"
|
||||
"POT-Creation-Date: 2026-07-17 15:13-0300\n"
|
||||
"PO-Revision-Date: 2025-06-02 17:12+0900\n"
|
||||
"Last-Translator: crwusiz <crwusiz@gmail.com>\n"
|
||||
"Language-Team: \n"
|
||||
@@ -1985,6 +1985,17 @@ msgstr "최신 버전입니다."
|
||||
msgid "Info"
|
||||
msgstr "정보"
|
||||
|
||||
msgid "Loading Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Plugin %s is no longer available."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Plugin %s access is unauthorized."
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading printer & filament profiles"
|
||||
msgstr ""
|
||||
|
||||
@@ -2102,6 +2113,18 @@ msgstr ""
|
||||
msgid "Resolve cloud sync conflict"
|
||||
msgstr ""
|
||||
|
||||
msgid "Syncing your account…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Migrating presets…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Fetching plugins…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading user presets…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Retrieving printer information, please try again later."
|
||||
msgstr "프린터 정보를 가져오는 중입니다. 나중에 다시 시도하세요."
|
||||
|
||||
@@ -2227,6 +2250,21 @@ msgstr ""
|
||||
msgid "*"
|
||||
msgstr "*"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"Failed to open the Plugins dialog:\n"
|
||||
"%s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to open the Plugins dialog (unknown error)."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin Terminal"
|
||||
msgstr ""
|
||||
|
||||
msgid "Changing application language"
|
||||
msgstr "응용 프로그램 언어 변경"
|
||||
|
||||
@@ -5048,6 +5086,28 @@ msgstr "잘못된 형식입니다. 필요한 벡터 형식: \"%1%\""
|
||||
msgid "N/A"
|
||||
msgstr ""
|
||||
|
||||
msgid "System agents"
|
||||
msgstr ""
|
||||
|
||||
msgid "No plugin selected"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Select plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Remove plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configure"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Configure (%d)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Pick"
|
||||
msgstr "선택"
|
||||
|
||||
@@ -5213,9 +5273,6 @@ msgstr "압출량"
|
||||
msgid "Fan speed"
|
||||
msgstr "팬 속도"
|
||||
|
||||
msgid "°C"
|
||||
msgstr "°C"
|
||||
|
||||
msgid "Time"
|
||||
msgstr "시간"
|
||||
|
||||
@@ -7241,6 +7298,14 @@ msgctxt "Layers"
|
||||
msgid "Bottom"
|
||||
msgstr "하부"
|
||||
|
||||
msgid "Plugin Selection"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"No plugins capabilities available for this type.\n"
|
||||
"Enable or install some to use."
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable detection of build plate position"
|
||||
msgstr "빌드 플레이트 위치 감지 활성화"
|
||||
|
||||
@@ -8146,6 +8211,40 @@ msgstr "디바이스 페이지"
|
||||
msgid "Synchronize AMS Filament Information"
|
||||
msgstr "AMS 필라멘트 정보 동기화"
|
||||
|
||||
msgid "OrcaCloud plugins required by the current preset are not installed:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Install Plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Local plugins required by the current preset are missing:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Find on OrcaCloud"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugins required by the current preset are not activated:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Activate Now"
|
||||
msgstr ""
|
||||
|
||||
msgid "The installed plugin does not provide the required capability — it may be outdated:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Preparing to install plugins..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Installing plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cancelling — finishing the current plugin..."
|
||||
msgstr ""
|
||||
|
||||
#, boost-format
|
||||
msgid "Installing %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plate Settings"
|
||||
msgstr "플레이트 설정"
|
||||
|
||||
@@ -9197,6 +9296,9 @@ msgstr "외부 멀티 컬러"
|
||||
msgid "Your filament grouping method in the sliced file is not optimal."
|
||||
msgstr "슬라이스된 파일의 필라멘트 그룹화 방법이 최적이 아닙니다."
|
||||
|
||||
msgid "To ensure print quality, the drying temperature will be lowered during printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto Bed Leveling"
|
||||
msgstr "자동 베드 레벨링"
|
||||
|
||||
@@ -9925,6 +10027,12 @@ msgstr "압출 역할 Gcode 변경"
|
||||
msgid "Post-processing Scripts"
|
||||
msgstr "후처리 스크립트"
|
||||
|
||||
msgid "Slicing Pipeline Plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin Configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Notes"
|
||||
msgstr "메모"
|
||||
|
||||
@@ -11049,6 +11157,9 @@ msgstr ""
|
||||
msgid "Switch between Prepare/Preview"
|
||||
msgstr "준비 하기/미리 보기 전환"
|
||||
|
||||
msgid "Open actions speed dial"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plater"
|
||||
msgstr "출력판"
|
||||
|
||||
@@ -11906,6 +12017,9 @@ msgstr "API 키"
|
||||
msgid "HTTP digest"
|
||||
msgstr "HTTP 다이제스트"
|
||||
|
||||
msgid "Configuration for the plugin capabilities this preset uses, overriding the global Capabilities configuration. Stored as a raw JSON array and edited through the dialog behind the button, never typed in directly."
|
||||
msgstr ""
|
||||
|
||||
msgid "Avoid crossing walls"
|
||||
msgstr "벽 가로지름 방지"
|
||||
|
||||
@@ -12856,6 +12970,24 @@ msgid ""
|
||||
"WARNING: Lowering this value may negatively affect bed adhesion."
|
||||
msgstr ""
|
||||
|
||||
msgid "Top surface fill order"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
|
||||
"Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
|
||||
"Default uses shortest-path ordering, which may run in either direction."
|
||||
msgstr ""
|
||||
|
||||
msgid "Bottom surface fill order"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
|
||||
"Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
|
||||
"Default uses shortest-path ordering, which may run in either direction."
|
||||
msgstr ""
|
||||
|
||||
msgid "Internal solid infill pattern"
|
||||
msgstr "꽉찬 내부 채우기 패턴"
|
||||
|
||||
@@ -14070,9 +14202,6 @@ msgid ""
|
||||
"Set to 0 to deactivate."
|
||||
msgstr ""
|
||||
|
||||
msgid "%"
|
||||
msgstr "%"
|
||||
|
||||
msgid "Time cost"
|
||||
msgstr "시간비용"
|
||||
|
||||
@@ -14760,6 +14889,9 @@ msgid ""
|
||||
"RRF: X and Y values are equal."
|
||||
msgstr ""
|
||||
|
||||
msgid "Hz"
|
||||
msgstr "Hz"
|
||||
|
||||
msgid "Y"
|
||||
msgstr "Y"
|
||||
|
||||
@@ -15034,6 +15166,15 @@ msgstr ""
|
||||
msgid "This G-code is inserted when the extrusion role is changed. It runs after the machine and filament extrusion role G-code."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugins Used"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin capabilities referenced by this preset, stored as name;uuid;capability."
|
||||
msgstr ""
|
||||
|
||||
msgid "Python plugin(s) invoked at each slicing pipeline step to read and modify intermediate slicing data, including a final G-code post-processing step. Research/experimental."
|
||||
msgstr ""
|
||||
|
||||
msgid "Printer type"
|
||||
msgstr "프린터 유형"
|
||||
|
||||
@@ -15102,6 +15243,15 @@ msgstr "노즐 청소 전 후퇴량"
|
||||
msgid "This is the length of fast retraction before a wipe, relative to retraction length."
|
||||
msgstr "후퇴 길이에 비례한 노즐 청소 전 후퇴량(노즐 청소를 시작하기 전에 일부 필라멘트를 후퇴시키면 노즐 끝에 녹아있는 소량의 필라멘트만 남게되어 추가 누수 위험이 줄어들 수 있습니다)"
|
||||
|
||||
msgid "Retract amount after wipe"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The length of fast retraction after wipe, relative to retraction length.\n"
|
||||
"The value will be clamped by 100% minus the retract amount before the wipe value."
|
||||
msgstr ""
|
||||
|
||||
# TODO: Review, changed by lang refactor. PR 14254
|
||||
msgid "Retract on layer change"
|
||||
msgstr "레이어 변경 시 후퇴"
|
||||
@@ -16107,16 +16257,6 @@ msgstr "상단 쉘 두께"
|
||||
msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers."
|
||||
msgstr "상단 쉘 레이어로 계산된 두께가 이 값보다 얇은 경우 슬라이싱할 때 상단 꽉찬 레이어의 수가 증가합니다. 이렇게 하면 레이어 높이가 작을 때 쉘이 너무 얇아지는 것을 방지할 수 있습니다. 0은 이 설정이 비활성화되고 상단 쉘의 두께가 절대적으로 상단 쉘 레이어에 의해 결정됨을 의미합니다"
|
||||
|
||||
msgid "Anisotropic surfaces"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Anisotropic patterns on the top and bottom surfaces.\n"
|
||||
"Co-directional printing mode will be applied. For certain patterns, omni-directional filling provides color dispersion when using multi-colored or silk plastics.\n"
|
||||
"This option disable the gap fill.\n"
|
||||
"This option can increase a printing time."
|
||||
msgstr ""
|
||||
|
||||
msgid "Separated infills"
|
||||
msgstr ""
|
||||
|
||||
@@ -17944,9 +18084,6 @@ msgstr ""
|
||||
msgid "Frequency settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hz"
|
||||
msgstr "Hz"
|
||||
|
||||
msgid "RepRap firmware uses the same frequency range for both axes."
|
||||
msgstr ""
|
||||
|
||||
@@ -19917,6 +20054,145 @@ msgstr ""
|
||||
msgid "Open File"
|
||||
msgstr ""
|
||||
|
||||
msgid "AMS Dryness Control"
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament Drying Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Stopping"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to dry temporarily due to ..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying Error"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please check the Assistant for troubleshooting"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please remove and store the filament (as shown)."
|
||||
msgstr ""
|
||||
|
||||
msgid "The AMS can rotate the filament which is properly stored, providing better drying results."
|
||||
msgstr ""
|
||||
|
||||
msgid "Rotate spool when drying"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "amsdrying"
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying-Heating"
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying-Dehumidifying"
|
||||
msgstr ""
|
||||
|
||||
msgid " maximum drying temperature is "
|
||||
msgstr ""
|
||||
|
||||
msgid " minimum drying temperature is "
|
||||
msgstr ""
|
||||
|
||||
msgid "This filament may not be completely dried."
|
||||
msgstr ""
|
||||
|
||||
msgid "This AMS is currently printing. To ensure print quality, the drying temperature cannot exceed the recommended drying temperature."
|
||||
msgstr ""
|
||||
|
||||
msgid "The temperature shall not exceed the filament's heat distortion temperature"
|
||||
msgstr ""
|
||||
|
||||
msgid "Minimum time value cannot be less than 1."
|
||||
msgstr ""
|
||||
|
||||
msgid "Maximum time value cannot be greater than 24."
|
||||
msgstr ""
|
||||
|
||||
msgid "Insufficient power"
|
||||
msgstr ""
|
||||
|
||||
msgid " Too many AMS drying simultaneously. Please plug in the power or stop other drying processes before starting."
|
||||
msgstr ""
|
||||
|
||||
msgid "AMS is busy"
|
||||
msgstr ""
|
||||
|
||||
msgid " AMS is calibrating | reading RFID | loading/unloading material, please wait."
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament in AMS outlet"
|
||||
msgstr ""
|
||||
|
||||
msgid " The high drying temperature may cause AMS blockage, please unload first."
|
||||
msgstr ""
|
||||
|
||||
msgid "Initiating AMS drying"
|
||||
msgstr ""
|
||||
|
||||
msgid "Not supported in 2D mode"
|
||||
msgstr ""
|
||||
|
||||
msgid "Task in progress"
|
||||
msgstr ""
|
||||
|
||||
msgid " The AMS might be in use during Task."
|
||||
msgstr ""
|
||||
|
||||
msgid " Firmware update in progress, please wait..."
|
||||
msgstr ""
|
||||
|
||||
msgid " Please plug in the power and then use the drying function."
|
||||
msgstr ""
|
||||
|
||||
msgid " The high drying temperature may cause AMS blockage. Please unload the filament manually before proceeding."
|
||||
msgstr ""
|
||||
|
||||
msgid "System is busy"
|
||||
msgstr ""
|
||||
|
||||
msgid " Initiating other drying processes, please wait a few seconds..."
|
||||
msgstr ""
|
||||
|
||||
msgid "For better drying results, remove the filament and allow it to rotate."
|
||||
msgstr ""
|
||||
|
||||
msgid "The AMS will automatically rotate the stored filament slots to enhance the drying performance."
|
||||
msgstr ""
|
||||
|
||||
msgid "Alternatively, you can dry the filament without removing it."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unknown filaments will be treated as PLA."
|
||||
msgstr ""
|
||||
|
||||
msgid "Please store the filament marked with an exclamation mark."
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament left in the feeder during drying may soften because the drying temperature exceeds the softening point of materials like PLA and TPU."
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking adapter connection"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking filament status"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking drying presets"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking filament location"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking air intake"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking air vent"
|
||||
msgstr ""
|
||||
|
||||
msgid "The filament may not be compatible with the current machine settings. Generic filament presets will be used."
|
||||
msgstr "필라멘트가 현재 기계 설정과 호환되지 않을 수 있습니다. 일반 필라멘트 사전 설정이 사용됩니다."
|
||||
|
||||
@@ -20239,6 +20515,12 @@ msgstr ""
|
||||
"뒤틀림 방지\n"
|
||||
"ABS와 같이 뒤틀림이 발생하기 쉬운 소재를 출력할 때, 히트베드 온도를 적절하게 높이면 뒤틀림 가능성을 줄일 수 있다는 사실을 알고 계셨나요?"
|
||||
|
||||
#~ msgid "°C"
|
||||
#~ msgstr "°C"
|
||||
|
||||
#~ msgid "%"
|
||||
#~ msgstr "%"
|
||||
|
||||
#~ msgid "Continue to sync filaments"
|
||||
#~ msgstr "필라멘트 동기화 계속하기"
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -3,7 +3,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Orca Slicer\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-07-13 16:24-0300\n"
|
||||
"POT-Creation-Date: 2026-07-17 15:13-0300\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
@@ -1966,6 +1966,17 @@ msgstr "Dit is de nieuwste versie."
|
||||
msgid "Info"
|
||||
msgstr "Informatie"
|
||||
|
||||
msgid "Loading Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Plugin %s is no longer available."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Plugin %s access is unauthorized."
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading printer & filament profiles"
|
||||
msgstr ""
|
||||
|
||||
@@ -2080,6 +2091,18 @@ msgstr ""
|
||||
msgid "Resolve cloud sync conflict"
|
||||
msgstr ""
|
||||
|
||||
msgid "Syncing your account…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Migrating presets…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Fetching plugins…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading user presets…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Retrieving printer information, please try again later."
|
||||
msgstr ""
|
||||
|
||||
@@ -2198,6 +2221,21 @@ msgstr ""
|
||||
msgid "*"
|
||||
msgstr "*"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"Failed to open the Plugins dialog:\n"
|
||||
"%s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to open the Plugins dialog (unknown error)."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin Terminal"
|
||||
msgstr ""
|
||||
|
||||
msgid "Changing application language"
|
||||
msgstr "Taal van de applicatie wijzigen"
|
||||
|
||||
@@ -4993,6 +5031,28 @@ msgstr "Onjuist formaat. Het Vector formaat wordt verwacht: \"%1%\""
|
||||
msgid "N/A"
|
||||
msgstr "N/B"
|
||||
|
||||
msgid "System agents"
|
||||
msgstr ""
|
||||
|
||||
msgid "No plugin selected"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Select plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Remove plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configure"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Configure (%d)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Pick"
|
||||
msgstr "Selecteren"
|
||||
|
||||
@@ -5158,9 +5218,6 @@ msgstr "Flowrate"
|
||||
msgid "Fan speed"
|
||||
msgstr "Ventilator snelheid"
|
||||
|
||||
msgid "°C"
|
||||
msgstr "°C"
|
||||
|
||||
msgid "Time"
|
||||
msgstr "Tijd"
|
||||
|
||||
@@ -7171,6 +7228,14 @@ msgctxt "Layers"
|
||||
msgid "Bottom"
|
||||
msgstr "Onderste"
|
||||
|
||||
msgid "Plugin Selection"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"No plugins capabilities available for this type.\n"
|
||||
"Enable or install some to use."
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable detection of build plate position"
|
||||
msgstr "Detectie van de positie van de printplaat inschakelen"
|
||||
|
||||
@@ -8069,6 +8134,40 @@ msgstr ""
|
||||
msgid "Synchronize AMS Filament Information"
|
||||
msgstr ""
|
||||
|
||||
msgid "OrcaCloud plugins required by the current preset are not installed:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Install Plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Local plugins required by the current preset are missing:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Find on OrcaCloud"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugins required by the current preset are not activated:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Activate Now"
|
||||
msgstr ""
|
||||
|
||||
msgid "The installed plugin does not provide the required capability — it may be outdated:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Preparing to install plugins..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Installing plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cancelling — finishing the current plugin..."
|
||||
msgstr ""
|
||||
|
||||
#, boost-format
|
||||
msgid "Installing %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plate Settings"
|
||||
msgstr "Plaatinstellingen"
|
||||
|
||||
@@ -9113,6 +9212,9 @@ msgstr ""
|
||||
msgid "Your filament grouping method in the sliced file is not optimal."
|
||||
msgstr ""
|
||||
|
||||
msgid "To ensure print quality, the drying temperature will be lowered during printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto Bed Leveling"
|
||||
msgstr "Automatische bednivellering"
|
||||
|
||||
@@ -9830,6 +9932,12 @@ msgstr ""
|
||||
msgid "Post-processing Scripts"
|
||||
msgstr ""
|
||||
|
||||
msgid "Slicing Pipeline Plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin Configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Notes"
|
||||
msgstr "Opmerkingen"
|
||||
|
||||
@@ -10943,6 +11051,9 @@ msgstr ""
|
||||
msgid "Switch between Prepare/Preview"
|
||||
msgstr ""
|
||||
|
||||
msgid "Open actions speed dial"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plater"
|
||||
msgstr "Plaat"
|
||||
|
||||
@@ -11791,6 +11902,9 @@ msgstr "API sleutel"
|
||||
msgid "HTTP digest"
|
||||
msgstr "HTTP samenvatting"
|
||||
|
||||
msgid "Configuration for the plugin capabilities this preset uses, overriding the global Capabilities configuration. Stored as a raw JSON array and edited through the dialog behind the button, never typed in directly."
|
||||
msgstr ""
|
||||
|
||||
msgid "Avoid crossing walls"
|
||||
msgstr "Vermijd het oversteken van walls"
|
||||
|
||||
@@ -12665,6 +12779,24 @@ msgid ""
|
||||
"WARNING: Lowering this value may negatively affect bed adhesion."
|
||||
msgstr ""
|
||||
|
||||
msgid "Top surface fill order"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
|
||||
"Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
|
||||
"Default uses shortest-path ordering, which may run in either direction."
|
||||
msgstr ""
|
||||
|
||||
msgid "Bottom surface fill order"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
|
||||
"Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
|
||||
"Default uses shortest-path ordering, which may run in either direction."
|
||||
msgstr ""
|
||||
|
||||
msgid "Internal solid infill pattern"
|
||||
msgstr "Intern massief invulpatroon"
|
||||
|
||||
@@ -13825,9 +13957,6 @@ msgid ""
|
||||
"Set to 0 to deactivate."
|
||||
msgstr ""
|
||||
|
||||
msgid "%"
|
||||
msgstr "%"
|
||||
|
||||
msgid "Time cost"
|
||||
msgstr ""
|
||||
|
||||
@@ -14494,6 +14623,9 @@ msgid ""
|
||||
"RRF: X and Y values are equal."
|
||||
msgstr ""
|
||||
|
||||
msgid "Hz"
|
||||
msgstr "Hz"
|
||||
|
||||
msgid "Y"
|
||||
msgstr "Y"
|
||||
|
||||
@@ -14743,6 +14875,15 @@ msgstr ""
|
||||
msgid "This G-code is inserted when the extrusion role is changed. It runs after the machine and filament extrusion role G-code."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugins Used"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin capabilities referenced by this preset, stored as name;uuid;capability."
|
||||
msgstr ""
|
||||
|
||||
msgid "Python plugin(s) invoked at each slicing pipeline step to read and modify intermediate slicing data, including a final G-code post-processing step. Research/experimental."
|
||||
msgstr ""
|
||||
|
||||
msgid "Printer type"
|
||||
msgstr "Printertype"
|
||||
|
||||
@@ -14811,6 +14952,15 @@ msgstr "Terugtrek (retract) hoeveelheid voor schoonvegen"
|
||||
msgid "This is the length of fast retraction before a wipe, relative to retraction length."
|
||||
msgstr "Dit is de lengte van snel intrekken (retraction) vóór een wipe, in verhouding tot de retraction lengte."
|
||||
|
||||
msgid "Retract amount after wipe"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The length of fast retraction after wipe, relative to retraction length.\n"
|
||||
"The value will be clamped by 100% minus the retract amount before the wipe value."
|
||||
msgstr ""
|
||||
|
||||
# TODO: Review, changed by lang refactor. PR 14254
|
||||
msgid "Retract on layer change"
|
||||
msgstr "Terugtrekken (retract) bij wisselen van laag"
|
||||
@@ -15785,16 +15935,6 @@ msgstr "Dikte bovenkant"
|
||||
msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers."
|
||||
msgstr "Het aantal bovenste solide lagen wordt verhoogd tijdens het slicen als de totale dikte van de bovenste lagen lager is dan deze waarde. Dit zorgt ervoor dat de schaal niet te dun is bij een lage laaghoogte. 0 betekend dat deze instelling niet actief is en dat de dikte van de bovenkant bepaald wordt door het aantal bodem lagen."
|
||||
|
||||
msgid "Anisotropic surfaces"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Anisotropic patterns on the top and bottom surfaces.\n"
|
||||
"Co-directional printing mode will be applied. For certain patterns, omni-directional filling provides color dispersion when using multi-colored or silk plastics.\n"
|
||||
"This option disable the gap fill.\n"
|
||||
"This option can increase a printing time."
|
||||
msgstr ""
|
||||
|
||||
msgid "Separated infills"
|
||||
msgstr ""
|
||||
|
||||
@@ -17559,9 +17699,6 @@ msgstr ""
|
||||
msgid "Frequency settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hz"
|
||||
msgstr "Hz"
|
||||
|
||||
msgid "RepRap firmware uses the same frequency range for both axes."
|
||||
msgstr ""
|
||||
|
||||
@@ -19504,6 +19641,145 @@ msgstr ""
|
||||
msgid "Open File"
|
||||
msgstr ""
|
||||
|
||||
msgid "AMS Dryness Control"
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament Drying Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Stopping"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to dry temporarily due to ..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying Error"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please check the Assistant for troubleshooting"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please remove and store the filament (as shown)."
|
||||
msgstr ""
|
||||
|
||||
msgid "The AMS can rotate the filament which is properly stored, providing better drying results."
|
||||
msgstr ""
|
||||
|
||||
msgid "Rotate spool when drying"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "amsdrying"
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying-Heating"
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying-Dehumidifying"
|
||||
msgstr ""
|
||||
|
||||
msgid " maximum drying temperature is "
|
||||
msgstr ""
|
||||
|
||||
msgid " minimum drying temperature is "
|
||||
msgstr ""
|
||||
|
||||
msgid "This filament may not be completely dried."
|
||||
msgstr ""
|
||||
|
||||
msgid "This AMS is currently printing. To ensure print quality, the drying temperature cannot exceed the recommended drying temperature."
|
||||
msgstr ""
|
||||
|
||||
msgid "The temperature shall not exceed the filament's heat distortion temperature"
|
||||
msgstr ""
|
||||
|
||||
msgid "Minimum time value cannot be less than 1."
|
||||
msgstr ""
|
||||
|
||||
msgid "Maximum time value cannot be greater than 24."
|
||||
msgstr ""
|
||||
|
||||
msgid "Insufficient power"
|
||||
msgstr ""
|
||||
|
||||
msgid " Too many AMS drying simultaneously. Please plug in the power or stop other drying processes before starting."
|
||||
msgstr ""
|
||||
|
||||
msgid "AMS is busy"
|
||||
msgstr ""
|
||||
|
||||
msgid " AMS is calibrating | reading RFID | loading/unloading material, please wait."
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament in AMS outlet"
|
||||
msgstr ""
|
||||
|
||||
msgid " The high drying temperature may cause AMS blockage, please unload first."
|
||||
msgstr ""
|
||||
|
||||
msgid "Initiating AMS drying"
|
||||
msgstr ""
|
||||
|
||||
msgid "Not supported in 2D mode"
|
||||
msgstr ""
|
||||
|
||||
msgid "Task in progress"
|
||||
msgstr ""
|
||||
|
||||
msgid " The AMS might be in use during Task."
|
||||
msgstr ""
|
||||
|
||||
msgid " Firmware update in progress, please wait..."
|
||||
msgstr ""
|
||||
|
||||
msgid " Please plug in the power and then use the drying function."
|
||||
msgstr ""
|
||||
|
||||
msgid " The high drying temperature may cause AMS blockage. Please unload the filament manually before proceeding."
|
||||
msgstr ""
|
||||
|
||||
msgid "System is busy"
|
||||
msgstr ""
|
||||
|
||||
msgid " Initiating other drying processes, please wait a few seconds..."
|
||||
msgstr ""
|
||||
|
||||
msgid "For better drying results, remove the filament and allow it to rotate."
|
||||
msgstr ""
|
||||
|
||||
msgid "The AMS will automatically rotate the stored filament slots to enhance the drying performance."
|
||||
msgstr ""
|
||||
|
||||
msgid "Alternatively, you can dry the filament without removing it."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unknown filaments will be treated as PLA."
|
||||
msgstr ""
|
||||
|
||||
msgid "Please store the filament marked with an exclamation mark."
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament left in the feeder during drying may soften because the drying temperature exceeds the softening point of materials like PLA and TPU."
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking adapter connection"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking filament status"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking drying presets"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking filament location"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking air intake"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking air vent"
|
||||
msgstr ""
|
||||
|
||||
msgid "The filament may not be compatible with the current machine settings. Generic filament presets will be used."
|
||||
msgstr ""
|
||||
|
||||
@@ -19826,6 +20102,12 @@ msgstr ""
|
||||
"Kromtrekken voorkomen\n"
|
||||
"Wist je dat bij het printen van materialen die gevoelig zijn voor kromtrekken, zoals ABS, een juiste verhoging van de temperatuur van het warmtebed de kans op kromtrekken kan verkleinen?"
|
||||
|
||||
#~ msgid "°C"
|
||||
#~ msgstr "°C"
|
||||
|
||||
#~ msgid "%"
|
||||
#~ msgstr "%"
|
||||
|
||||
#~ msgctxt "Sync_Nozzle_AMS"
|
||||
#~ msgid "Cancel"
|
||||
#~ msgstr "Annuleren"
|
||||
|
||||
@@ -3,7 +3,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OrcaSlicer 2.3.0-rc\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-07-13 16:24-0300\n"
|
||||
"POT-Creation-Date: 2026-07-17 15:13-0300\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: Krzysztof Morga <<tlumaczeniebs@gmail.com>>\n"
|
||||
"Language-Team: \n"
|
||||
@@ -1986,6 +1986,17 @@ msgstr "To jest najnowsza wersja."
|
||||
msgid "Info"
|
||||
msgstr "Informacja"
|
||||
|
||||
msgid "Loading Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Plugin %s is no longer available."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Plugin %s access is unauthorized."
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading printer & filament profiles"
|
||||
msgstr ""
|
||||
|
||||
@@ -2103,6 +2114,18 @@ msgstr ""
|
||||
msgid "Resolve cloud sync conflict"
|
||||
msgstr ""
|
||||
|
||||
msgid "Syncing your account…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Migrating presets…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Fetching plugins…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading user presets…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Retrieving printer information, please try again later."
|
||||
msgstr "Pobieranie informacji o drukarce, spróbuj ponownie później."
|
||||
|
||||
@@ -2221,6 +2244,21 @@ msgstr ""
|
||||
msgid "*"
|
||||
msgstr "*"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"Failed to open the Plugins dialog:\n"
|
||||
"%s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to open the Plugins dialog (unknown error)."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin Terminal"
|
||||
msgstr ""
|
||||
|
||||
msgid "Changing application language"
|
||||
msgstr "Zmiana języka aplikacji"
|
||||
|
||||
@@ -5045,6 +5083,28 @@ msgstr "Nieprawidłowy format. Oczekiwano formatu wektorowego: „%1%”"
|
||||
msgid "N/A"
|
||||
msgstr ""
|
||||
|
||||
msgid "System agents"
|
||||
msgstr ""
|
||||
|
||||
msgid "No plugin selected"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Select plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Remove plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configure"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Configure (%d)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Pick"
|
||||
msgstr ""
|
||||
|
||||
@@ -5210,9 +5270,6 @@ msgstr "Natężenie przepływu"
|
||||
msgid "Fan speed"
|
||||
msgstr "Prędkość wentylatora"
|
||||
|
||||
msgid "°C"
|
||||
msgstr "°C"
|
||||
|
||||
msgid "Time"
|
||||
msgstr "Czas"
|
||||
|
||||
@@ -7254,6 +7311,14 @@ msgctxt "Layers"
|
||||
msgid "Bottom"
|
||||
msgstr "Dół"
|
||||
|
||||
msgid "Plugin Selection"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"No plugins capabilities available for this type.\n"
|
||||
"Enable or install some to use."
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable detection of build plate position"
|
||||
msgstr "Włącz wykrywanie położenia płyty roboczej"
|
||||
|
||||
@@ -8156,6 +8221,40 @@ msgstr "Strona Urządzenia"
|
||||
msgid "Synchronize AMS Filament Information"
|
||||
msgstr "Synchronizuj informacje o filamentach w AMS"
|
||||
|
||||
msgid "OrcaCloud plugins required by the current preset are not installed:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Install Plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Local plugins required by the current preset are missing:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Find on OrcaCloud"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugins required by the current preset are not activated:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Activate Now"
|
||||
msgstr ""
|
||||
|
||||
msgid "The installed plugin does not provide the required capability — it may be outdated:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Preparing to install plugins..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Installing plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cancelling — finishing the current plugin..."
|
||||
msgstr ""
|
||||
|
||||
#, boost-format
|
||||
msgid "Installing %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plate Settings"
|
||||
msgstr "Ustawienia stołu"
|
||||
|
||||
@@ -9204,6 +9303,9 @@ msgstr "Druk wielokolorowy za pomocą zewnętrznej szpuli"
|
||||
msgid "Your filament grouping method in the sliced file is not optimal."
|
||||
msgstr "Twoja metoda grupowania filamentów w pliku cięcia nie jest optymalna."
|
||||
|
||||
msgid "To ensure print quality, the drying temperature will be lowered during printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto Bed Leveling"
|
||||
msgstr "Automatyczne poziomowanie stołu"
|
||||
|
||||
@@ -9932,6 +10034,12 @@ msgstr "G-code zmieniający tryb ekstruzji"
|
||||
msgid "Post-processing Scripts"
|
||||
msgstr "Skrypty post-processingu"
|
||||
|
||||
msgid "Slicing Pipeline Plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin Configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Notes"
|
||||
msgstr "Notatki"
|
||||
|
||||
@@ -11066,6 +11174,9 @@ msgstr ""
|
||||
msgid "Switch between Prepare/Preview"
|
||||
msgstr "Przełączanie między przygotowaniem/podglądem"
|
||||
|
||||
msgid "Open actions speed dial"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plater"
|
||||
msgstr "Płyta"
|
||||
|
||||
@@ -11921,6 +12032,9 @@ msgstr "Klucz API"
|
||||
msgid "HTTP digest"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configuration for the plugin capabilities this preset uses, overriding the global Capabilities configuration. Stored as a raw JSON array and edited through the dialog behind the button, never typed in directly."
|
||||
msgstr ""
|
||||
|
||||
msgid "Avoid crossing walls"
|
||||
msgstr "Unikanie ruchów nad obrysami"
|
||||
|
||||
@@ -12875,6 +12989,24 @@ msgid ""
|
||||
"WARNING: Lowering this value may negatively affect bed adhesion."
|
||||
msgstr ""
|
||||
|
||||
msgid "Top surface fill order"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
|
||||
"Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
|
||||
"Default uses shortest-path ordering, which may run in either direction."
|
||||
msgstr ""
|
||||
|
||||
msgid "Bottom surface fill order"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
|
||||
"Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
|
||||
"Default uses shortest-path ordering, which may run in either direction."
|
||||
msgstr ""
|
||||
|
||||
msgid "Internal solid infill pattern"
|
||||
msgstr "Wzór wewnętrznego pełnego wypełnienia"
|
||||
|
||||
@@ -14086,9 +14218,6 @@ msgid ""
|
||||
"Set to 0 to deactivate."
|
||||
msgstr ""
|
||||
|
||||
msgid "%"
|
||||
msgstr "%"
|
||||
|
||||
msgid "Time cost"
|
||||
msgstr "Koszt czasu"
|
||||
|
||||
@@ -14776,6 +14905,9 @@ msgid ""
|
||||
"RRF: X and Y values are equal."
|
||||
msgstr ""
|
||||
|
||||
msgid "Hz"
|
||||
msgstr "Hz"
|
||||
|
||||
msgid "Y"
|
||||
msgstr "Y"
|
||||
|
||||
@@ -15052,6 +15184,15 @@ msgstr ""
|
||||
msgid "This G-code is inserted when the extrusion role is changed. It runs after the machine and filament extrusion role G-code."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugins Used"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin capabilities referenced by this preset, stored as name;uuid;capability."
|
||||
msgstr ""
|
||||
|
||||
msgid "Python plugin(s) invoked at each slicing pipeline step to read and modify intermediate slicing data, including a final G-code post-processing step. Research/experimental."
|
||||
msgstr ""
|
||||
|
||||
msgid "Printer type"
|
||||
msgstr "Typ drukarki"
|
||||
|
||||
@@ -15120,6 +15261,15 @@ msgstr "Długość retrakcji przed wytarciem dyszy"
|
||||
msgid "This is the length of fast retraction before a wipe, relative to retraction length."
|
||||
msgstr "Długość szybkiej retrakcji przed wytarciem dyszy, w stosunku do długości retrakcji."
|
||||
|
||||
msgid "Retract amount after wipe"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The length of fast retraction after wipe, relative to retraction length.\n"
|
||||
"The value will be clamped by 100% minus the retract amount before the wipe value."
|
||||
msgstr ""
|
||||
|
||||
# TODO: Review, changed by lang refactor. PR 14254
|
||||
msgid "Retract on layer change"
|
||||
msgstr "Retrakcja przy zmianie warstwy"
|
||||
@@ -16124,16 +16274,6 @@ msgstr "Grubość górnej powłoki"
|
||||
msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers."
|
||||
msgstr "Liczba górnych zwartych warstw jest zwiększana podczas cięcia, jeśli grubość obliczona przez górną warstwe powłoki jest cieńsza niż ta wartość. Można w ten sposób uniknąć zbyt cienkiej powłoki, gdy wysokość warstwy jest mała. 0 oznacza, że to ustawienie jest wyłączone, a grubość górnej powłoki jest absolutnie określona przez górne warstwy powłoki"
|
||||
|
||||
msgid "Anisotropic surfaces"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Anisotropic patterns on the top and bottom surfaces.\n"
|
||||
"Co-directional printing mode will be applied. For certain patterns, omni-directional filling provides color dispersion when using multi-colored or silk plastics.\n"
|
||||
"This option disable the gap fill.\n"
|
||||
"This option can increase a printing time."
|
||||
msgstr ""
|
||||
|
||||
msgid "Separated infills"
|
||||
msgstr ""
|
||||
|
||||
@@ -17953,9 +18093,6 @@ msgstr ""
|
||||
msgid "Frequency settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hz"
|
||||
msgstr "Hz"
|
||||
|
||||
msgid "RepRap firmware uses the same frequency range for both axes."
|
||||
msgstr ""
|
||||
|
||||
@@ -19931,6 +20068,145 @@ msgstr ""
|
||||
msgid "Open File"
|
||||
msgstr ""
|
||||
|
||||
msgid "AMS Dryness Control"
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament Drying Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Stopping"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to dry temporarily due to ..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying Error"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please check the Assistant for troubleshooting"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please remove and store the filament (as shown)."
|
||||
msgstr ""
|
||||
|
||||
msgid "The AMS can rotate the filament which is properly stored, providing better drying results."
|
||||
msgstr ""
|
||||
|
||||
msgid "Rotate spool when drying"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "amsdrying"
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying-Heating"
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying-Dehumidifying"
|
||||
msgstr ""
|
||||
|
||||
msgid " maximum drying temperature is "
|
||||
msgstr ""
|
||||
|
||||
msgid " minimum drying temperature is "
|
||||
msgstr ""
|
||||
|
||||
msgid "This filament may not be completely dried."
|
||||
msgstr ""
|
||||
|
||||
msgid "This AMS is currently printing. To ensure print quality, the drying temperature cannot exceed the recommended drying temperature."
|
||||
msgstr ""
|
||||
|
||||
msgid "The temperature shall not exceed the filament's heat distortion temperature"
|
||||
msgstr ""
|
||||
|
||||
msgid "Minimum time value cannot be less than 1."
|
||||
msgstr ""
|
||||
|
||||
msgid "Maximum time value cannot be greater than 24."
|
||||
msgstr ""
|
||||
|
||||
msgid "Insufficient power"
|
||||
msgstr ""
|
||||
|
||||
msgid " Too many AMS drying simultaneously. Please plug in the power or stop other drying processes before starting."
|
||||
msgstr ""
|
||||
|
||||
msgid "AMS is busy"
|
||||
msgstr ""
|
||||
|
||||
msgid " AMS is calibrating | reading RFID | loading/unloading material, please wait."
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament in AMS outlet"
|
||||
msgstr ""
|
||||
|
||||
msgid " The high drying temperature may cause AMS blockage, please unload first."
|
||||
msgstr ""
|
||||
|
||||
msgid "Initiating AMS drying"
|
||||
msgstr ""
|
||||
|
||||
msgid "Not supported in 2D mode"
|
||||
msgstr ""
|
||||
|
||||
msgid "Task in progress"
|
||||
msgstr ""
|
||||
|
||||
msgid " The AMS might be in use during Task."
|
||||
msgstr ""
|
||||
|
||||
msgid " Firmware update in progress, please wait..."
|
||||
msgstr ""
|
||||
|
||||
msgid " Please plug in the power and then use the drying function."
|
||||
msgstr ""
|
||||
|
||||
msgid " The high drying temperature may cause AMS blockage. Please unload the filament manually before proceeding."
|
||||
msgstr ""
|
||||
|
||||
msgid "System is busy"
|
||||
msgstr ""
|
||||
|
||||
msgid " Initiating other drying processes, please wait a few seconds..."
|
||||
msgstr ""
|
||||
|
||||
msgid "For better drying results, remove the filament and allow it to rotate."
|
||||
msgstr ""
|
||||
|
||||
msgid "The AMS will automatically rotate the stored filament slots to enhance the drying performance."
|
||||
msgstr ""
|
||||
|
||||
msgid "Alternatively, you can dry the filament without removing it."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unknown filaments will be treated as PLA."
|
||||
msgstr ""
|
||||
|
||||
msgid "Please store the filament marked with an exclamation mark."
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament left in the feeder during drying may soften because the drying temperature exceeds the softening point of materials like PLA and TPU."
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking adapter connection"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking filament status"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking drying presets"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking filament location"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking air intake"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking air vent"
|
||||
msgstr ""
|
||||
|
||||
msgid "The filament may not be compatible with the current machine settings. Generic filament presets will be used."
|
||||
msgstr "Filament może być niekompatybilny z obecnymi ustawieniami maszyny. Domyślny profil filamentu zostanie użyty."
|
||||
|
||||
@@ -20253,6 +20529,12 @@ msgstr ""
|
||||
"Unikaj odkształceń\n"
|
||||
"Czy wiesz, że podczas drukowania filamentami podatnymi na odkształcenia, takimi jak ABS, odpowiednie zwiększenie temperatury podgrzewanej płyty może zmniejszyć prawdopodobieństwo odkształceń?"
|
||||
|
||||
#~ msgid "°C"
|
||||
#~ msgstr "°C"
|
||||
|
||||
#~ msgid "%"
|
||||
#~ msgstr "%"
|
||||
|
||||
#~ msgid "Continue to sync filaments"
|
||||
#~ msgstr "Kontynuuj aby zsynchronizować filamenty"
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Orca Slicer\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-07-13 16:24-0300\n"
|
||||
"POT-Creation-Date: 2026-07-17 15:13-0300\n"
|
||||
"PO-Revision-Date: 2026-07-04 11:51-0300\n"
|
||||
"Last-Translator: Alexandre Folle de Menezes\n"
|
||||
"Language-Team: Portuguese, Brazilian\n"
|
||||
@@ -1969,6 +1969,17 @@ msgstr "Esta é a versão mais recente."
|
||||
msgid "Info"
|
||||
msgstr "Informações"
|
||||
|
||||
msgid "Loading Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Plugin %s is no longer available."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Plugin %s access is unauthorized."
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading printer & filament profiles"
|
||||
msgstr "Carregando perfis de impressora e filamento"
|
||||
|
||||
@@ -2087,6 +2098,18 @@ msgstr ""
|
||||
msgid "Resolve cloud sync conflict"
|
||||
msgstr "Resolver o conflito de sincronização de nuvem"
|
||||
|
||||
msgid "Syncing your account…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Migrating presets…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Fetching plugins…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading user presets…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Retrieving printer information, please try again later."
|
||||
msgstr "Obtendo informações da impressora, tente novamente mais tarde."
|
||||
|
||||
@@ -2216,6 +2239,21 @@ msgstr ""
|
||||
msgid "*"
|
||||
msgstr "*"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"Failed to open the Plugins dialog:\n"
|
||||
"%s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to open the Plugins dialog (unknown error)."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin Terminal"
|
||||
msgstr ""
|
||||
|
||||
msgid "Changing application language"
|
||||
msgstr "Alterando o idioma do aplicativo"
|
||||
|
||||
@@ -4968,6 +5006,28 @@ msgstr "Formato inválido. Formato de vetor esperado: \"%1%\""
|
||||
msgid "N/A"
|
||||
msgstr "N/D"
|
||||
|
||||
msgid "System agents"
|
||||
msgstr ""
|
||||
|
||||
msgid "No plugin selected"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Select plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Remove plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configure"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Configure (%d)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Pick"
|
||||
msgstr "Escolher"
|
||||
|
||||
@@ -5133,9 +5193,6 @@ msgstr "Taxa de fluxo"
|
||||
msgid "Fan speed"
|
||||
msgstr "Velocidade do ventilador"
|
||||
|
||||
msgid "°C"
|
||||
msgstr "℃"
|
||||
|
||||
msgid "Time"
|
||||
msgstr "Tempo"
|
||||
|
||||
@@ -7152,6 +7209,14 @@ msgctxt "Layers"
|
||||
msgid "Bottom"
|
||||
msgstr "Inferior"
|
||||
|
||||
msgid "Plugin Selection"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"No plugins capabilities available for this type.\n"
|
||||
"Enable or install some to use."
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable detection of build plate position"
|
||||
msgstr "Ativar detecção da posição da placa de impressão"
|
||||
|
||||
@@ -8049,6 +8114,40 @@ msgstr "Página do Dispositivo"
|
||||
msgid "Synchronize AMS Filament Information"
|
||||
msgstr "Sincronizar informações de filamento AMS"
|
||||
|
||||
msgid "OrcaCloud plugins required by the current preset are not installed:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Install Plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Local plugins required by the current preset are missing:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Find on OrcaCloud"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugins required by the current preset are not activated:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Activate Now"
|
||||
msgstr ""
|
||||
|
||||
msgid "The installed plugin does not provide the required capability — it may be outdated:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Preparing to install plugins..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Installing plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cancelling — finishing the current plugin..."
|
||||
msgstr ""
|
||||
|
||||
#, boost-format
|
||||
msgid "Installing %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plate Settings"
|
||||
msgstr "Configurações de Placa"
|
||||
|
||||
@@ -9118,6 +9217,9 @@ msgstr "Multicor com externo"
|
||||
msgid "Your filament grouping method in the sliced file is not optimal."
|
||||
msgstr "Seu método de agrupamento de filamentos no arquivo fatiado não é o ideal."
|
||||
|
||||
msgid "To ensure print quality, the drying temperature will be lowered during printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto Bed Leveling"
|
||||
msgstr "Nivelamento Automático da Mesa"
|
||||
|
||||
@@ -9842,6 +9944,12 @@ msgstr "G-code de mudança de tipo de extrusão"
|
||||
msgid "Post-processing Scripts"
|
||||
msgstr "Scripts de pós-processamento"
|
||||
|
||||
msgid "Slicing Pipeline Plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin Configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Notes"
|
||||
msgstr "Notas"
|
||||
|
||||
@@ -10979,6 +11087,9 @@ msgstr "Alternar modo de impressão para objeto/peça"
|
||||
msgid "Switch between Prepare/Preview"
|
||||
msgstr "Alternar entre Preparar/Pré-visualizar"
|
||||
|
||||
msgid "Open actions speed dial"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plater"
|
||||
msgstr "Mesa"
|
||||
|
||||
@@ -11827,6 +11938,9 @@ msgstr "API Key"
|
||||
msgid "HTTP digest"
|
||||
msgstr "Digest HTTP"
|
||||
|
||||
msgid "Configuration for the plugin capabilities this preset uses, overriding the global Capabilities configuration. Stored as a raw JSON array and edited through the dialog behind the button, never typed in directly."
|
||||
msgstr ""
|
||||
|
||||
msgid "Avoid crossing walls"
|
||||
msgstr "Evitar atravessar paredes"
|
||||
|
||||
@@ -12802,6 +12916,24 @@ msgid ""
|
||||
"WARNING: Lowering this value may negatively affect bed adhesion."
|
||||
msgstr ""
|
||||
|
||||
msgid "Top surface fill order"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
|
||||
"Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
|
||||
"Default uses shortest-path ordering, which may run in either direction."
|
||||
msgstr ""
|
||||
|
||||
msgid "Bottom surface fill order"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
|
||||
"Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
|
||||
"Default uses shortest-path ordering, which may run in either direction."
|
||||
msgstr ""
|
||||
|
||||
msgid "Internal solid infill pattern"
|
||||
msgstr "Padrão de preenchimento sólido interno"
|
||||
|
||||
@@ -14041,9 +14173,6 @@ msgstr ""
|
||||
"Se o seu firmware já desativa a ventoinha abaixo de um limite (por exemplo, [fan] off_below: 0.10 do Klipper desliga a ventoinha sempre que o ciclo de trabalho comandado for inferior a 10%), esta opção e o limite do firmware devem idealmente ser definidos com o mesmo valor. A correspondência entre eles (por exemplo, off_below: 0.10 no Klipper e 10% aqui) garante que o fatiador nunca emita um valor diferente de zero que o firmware emitiria a velocidade cai silenciosamente e a ventoinha nunca recebe um valor abaixo daquele que você sabe que ela pode realmente atingir.\n"
|
||||
"Defina como 0 para desativar."
|
||||
|
||||
msgid "%"
|
||||
msgstr "%"
|
||||
|
||||
msgid "Time cost"
|
||||
msgstr "Custo de tempo"
|
||||
|
||||
@@ -14745,6 +14874,9 @@ msgstr ""
|
||||
"Para desativar o modelador de entrada, use o tipo Desativar.\n"
|
||||
"RRF: Os valores de X e Y são iguais."
|
||||
|
||||
msgid "Hz"
|
||||
msgstr "Hz"
|
||||
|
||||
msgid "Y"
|
||||
msgstr "Y"
|
||||
|
||||
@@ -15035,6 +15167,15 @@ msgstr "G-code de mudança de tipo de extrusão (processo)"
|
||||
msgid "This G-code is inserted when the extrusion role is changed. It runs after the machine and filament extrusion role G-code."
|
||||
msgstr "Este G-code é inserido quando a função de extrusão é trocada. Ele é executado após o G-code de máquina e do tipo de extrusão de filamento."
|
||||
|
||||
msgid "Plugins Used"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin capabilities referenced by this preset, stored as name;uuid;capability."
|
||||
msgstr ""
|
||||
|
||||
msgid "Python plugin(s) invoked at each slicing pipeline step to read and modify intermediate slicing data, including a final G-code post-processing step. Research/experimental."
|
||||
msgstr ""
|
||||
|
||||
msgid "Printer type"
|
||||
msgstr "Tipo de impressora"
|
||||
|
||||
@@ -15103,6 +15244,15 @@ msgstr "Quantidade de retração antes da limpeza"
|
||||
msgid "This is the length of fast retraction before a wipe, relative to retraction length."
|
||||
msgstr "O comprimento da retração rápida antes da limpeza, em relação ao comprimento da retração."
|
||||
|
||||
msgid "Retract amount after wipe"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The length of fast retraction after wipe, relative to retraction length.\n"
|
||||
"The value will be clamped by 100% minus the retract amount before the wipe value."
|
||||
msgstr ""
|
||||
|
||||
# TODO: Review, changed by lang refactor. PR 14254
|
||||
msgid "Retract on layer change"
|
||||
msgstr "Retrair ao mudar de camada"
|
||||
@@ -16098,16 +16248,6 @@ msgstr "Espessura da casca do topo"
|
||||
msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers."
|
||||
msgstr "O número de camadas sólidas superiores é aumentado ao fatiar se a espessura calculada pelas camadas da casca do topo for menor do que este valor. Isso pode evitar que a casca seja muito fina quando a altura da camada é pequena. 0 significa que esta configuração está desativada e a espessura da casca do topo é determinada apenas pelo número de camadas da casca do topo."
|
||||
|
||||
msgid "Anisotropic surfaces"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Anisotropic patterns on the top and bottom surfaces.\n"
|
||||
"Co-directional printing mode will be applied. For certain patterns, omni-directional filling provides color dispersion when using multi-colored or silk plastics.\n"
|
||||
"This option disable the gap fill.\n"
|
||||
"This option can increase a printing time."
|
||||
msgstr ""
|
||||
|
||||
msgid "Separated infills"
|
||||
msgstr ""
|
||||
|
||||
@@ -17907,9 +18047,6 @@ msgstr "Inicial / Final"
|
||||
msgid "Frequency settings"
|
||||
msgstr "Configurações de frequência"
|
||||
|
||||
msgid "Hz"
|
||||
msgstr "Hz"
|
||||
|
||||
msgid "RepRap firmware uses the same frequency range for both axes."
|
||||
msgstr "O firmware RepRap usa a mesma faixa de frequência para ambos os eixos."
|
||||
|
||||
@@ -19884,6 +20021,145 @@ msgstr "Arquivar pré-visualização"
|
||||
msgid "Open File"
|
||||
msgstr "Abrir Arquivo"
|
||||
|
||||
msgid "AMS Dryness Control"
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament Drying Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Stopping"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to dry temporarily due to ..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying Error"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please check the Assistant for troubleshooting"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please remove and store the filament (as shown)."
|
||||
msgstr ""
|
||||
|
||||
msgid "The AMS can rotate the filament which is properly stored, providing better drying results."
|
||||
msgstr ""
|
||||
|
||||
msgid "Rotate spool when drying"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "amsdrying"
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying-Heating"
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying-Dehumidifying"
|
||||
msgstr ""
|
||||
|
||||
msgid " maximum drying temperature is "
|
||||
msgstr ""
|
||||
|
||||
msgid " minimum drying temperature is "
|
||||
msgstr ""
|
||||
|
||||
msgid "This filament may not be completely dried."
|
||||
msgstr ""
|
||||
|
||||
msgid "This AMS is currently printing. To ensure print quality, the drying temperature cannot exceed the recommended drying temperature."
|
||||
msgstr ""
|
||||
|
||||
msgid "The temperature shall not exceed the filament's heat distortion temperature"
|
||||
msgstr ""
|
||||
|
||||
msgid "Minimum time value cannot be less than 1."
|
||||
msgstr ""
|
||||
|
||||
msgid "Maximum time value cannot be greater than 24."
|
||||
msgstr ""
|
||||
|
||||
msgid "Insufficient power"
|
||||
msgstr ""
|
||||
|
||||
msgid " Too many AMS drying simultaneously. Please plug in the power or stop other drying processes before starting."
|
||||
msgstr ""
|
||||
|
||||
msgid "AMS is busy"
|
||||
msgstr ""
|
||||
|
||||
msgid " AMS is calibrating | reading RFID | loading/unloading material, please wait."
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament in AMS outlet"
|
||||
msgstr ""
|
||||
|
||||
msgid " The high drying temperature may cause AMS blockage, please unload first."
|
||||
msgstr ""
|
||||
|
||||
msgid "Initiating AMS drying"
|
||||
msgstr ""
|
||||
|
||||
msgid "Not supported in 2D mode"
|
||||
msgstr ""
|
||||
|
||||
msgid "Task in progress"
|
||||
msgstr ""
|
||||
|
||||
msgid " The AMS might be in use during Task."
|
||||
msgstr ""
|
||||
|
||||
msgid " Firmware update in progress, please wait..."
|
||||
msgstr ""
|
||||
|
||||
msgid " Please plug in the power and then use the drying function."
|
||||
msgstr ""
|
||||
|
||||
msgid " The high drying temperature may cause AMS blockage. Please unload the filament manually before proceeding."
|
||||
msgstr ""
|
||||
|
||||
msgid "System is busy"
|
||||
msgstr ""
|
||||
|
||||
msgid " Initiating other drying processes, please wait a few seconds..."
|
||||
msgstr ""
|
||||
|
||||
msgid "For better drying results, remove the filament and allow it to rotate."
|
||||
msgstr ""
|
||||
|
||||
msgid "The AMS will automatically rotate the stored filament slots to enhance the drying performance."
|
||||
msgstr ""
|
||||
|
||||
msgid "Alternatively, you can dry the filament without removing it."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unknown filaments will be treated as PLA."
|
||||
msgstr ""
|
||||
|
||||
msgid "Please store the filament marked with an exclamation mark."
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament left in the feeder during drying may soften because the drying temperature exceeds the softening point of materials like PLA and TPU."
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking adapter connection"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking filament status"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking drying presets"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking filament location"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking air intake"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking air vent"
|
||||
msgstr ""
|
||||
|
||||
msgid "The filament may not be compatible with the current machine settings. Generic filament presets will be used."
|
||||
msgstr "O filamento pode não ser compatível com as configurações atuais da máquina. Serão usadas predefinições genéricas de filamento."
|
||||
|
||||
@@ -20199,6 +20475,12 @@ 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 "°C"
|
||||
#~ msgstr "℃"
|
||||
|
||||
#~ msgid "%"
|
||||
#~ msgstr "%"
|
||||
|
||||
#~ msgid "Renders cast shadows on the plate in realistic view."
|
||||
#~ msgstr "Renderiza sombras na placa em uma visualização realista."
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OrcaSlicer V2.5.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-07-13 16:24-0300\n"
|
||||
"POT-Creation-Date: 2026-07-17 15:13-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"
|
||||
@@ -2030,6 +2030,17 @@ msgstr "Установлена последняя версия программ
|
||||
msgid "Info"
|
||||
msgstr "Информация"
|
||||
|
||||
msgid "Loading Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Plugin %s is no longer available."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Plugin %s access is unauthorized."
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading printer & filament profiles"
|
||||
msgstr "Загрузка профилей принтеров и материалов"
|
||||
|
||||
@@ -2163,6 +2174,18 @@ msgstr ""
|
||||
msgid "Resolve cloud sync conflict"
|
||||
msgstr "Решение проблем синхронизации"
|
||||
|
||||
msgid "Syncing your account…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Migrating presets…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Fetching plugins…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading user presets…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Retrieving printer information, please try again later."
|
||||
msgstr "Получение информации о принтере, попробуйте позднее."
|
||||
|
||||
@@ -2294,6 +2317,21 @@ msgstr ""
|
||||
msgid "*"
|
||||
msgstr "*"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"Failed to open the Plugins dialog:\n"
|
||||
"%s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to open the Plugins dialog (unknown error)."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin Terminal"
|
||||
msgstr ""
|
||||
|
||||
msgid "Changing application language"
|
||||
msgstr "Изменение языка приложения"
|
||||
|
||||
@@ -5101,6 +5139,28 @@ msgstr "Недопустимый формат. Ожидаемый векторн
|
||||
msgid "N/A"
|
||||
msgstr "–"
|
||||
|
||||
msgid "System agents"
|
||||
msgstr ""
|
||||
|
||||
msgid "No plugin selected"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Select plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Remove plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configure"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Configure (%d)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Pick"
|
||||
msgstr "Выбрать"
|
||||
|
||||
@@ -5279,9 +5339,6 @@ msgstr "Расход"
|
||||
msgid "Fan speed"
|
||||
msgstr "Обдув"
|
||||
|
||||
msgid "°C"
|
||||
msgstr "°C"
|
||||
|
||||
msgid "Time"
|
||||
msgstr "Время"
|
||||
|
||||
@@ -7360,6 +7417,14 @@ msgctxt "Layers"
|
||||
msgid "Bottom"
|
||||
msgstr "Снизу"
|
||||
|
||||
msgid "Plugin Selection"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"No plugins capabilities available for this type.\n"
|
||||
"Enable or install some to use."
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable detection of build plate position"
|
||||
msgstr "Определение положения покрытия"
|
||||
|
||||
@@ -8266,6 +8331,40 @@ msgstr "«Принтер»"
|
||||
msgid "Synchronize AMS Filament Information"
|
||||
msgstr "Синхронизировать материалы в AMS"
|
||||
|
||||
msgid "OrcaCloud plugins required by the current preset are not installed:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Install Plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Local plugins required by the current preset are missing:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Find on OrcaCloud"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugins required by the current preset are not activated:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Activate Now"
|
||||
msgstr ""
|
||||
|
||||
msgid "The installed plugin does not provide the required capability — it may be outdated:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Preparing to install plugins..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Installing plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cancelling — finishing the current plugin..."
|
||||
msgstr ""
|
||||
|
||||
#, boost-format
|
||||
msgid "Installing %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plate Settings"
|
||||
msgstr "Настройки стола"
|
||||
|
||||
@@ -9365,6 +9464,9 @@ msgstr "Многоцветная печать с внешней катушкой
|
||||
msgid "Your filament grouping method in the sliced file is not optimal."
|
||||
msgstr "Группировка материалов в файле печати не оптимальна."
|
||||
|
||||
msgid "To ensure print quality, the drying temperature will be lowered during printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto Bed Leveling"
|
||||
msgstr "Автоматическое выравнивание стола"
|
||||
|
||||
@@ -10101,6 +10203,12 @@ msgstr "G-код при смене типа линии"
|
||||
msgid "Post-processing Scripts"
|
||||
msgstr "Скрипты постобработки"
|
||||
|
||||
msgid "Slicing Pipeline Plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin Configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Notes"
|
||||
msgstr "Заметки"
|
||||
|
||||
@@ -11273,6 +11381,9 @@ msgstr "Переключить печать модели"
|
||||
msgid "Switch between Prepare/Preview"
|
||||
msgstr "Переключение между подготовкой и просмотром нарезки"
|
||||
|
||||
msgid "Open actions speed dial"
|
||||
msgstr ""
|
||||
|
||||
# Plater – это название библиотеки. Используется в меню горячих клавиш в качестве заголовка сочетаний клавиш, которые работают внутри пространства Plater. Как минимум на Windows не отображается.
|
||||
msgid "Plater"
|
||||
msgstr ""
|
||||
@@ -12112,6 +12223,9 @@ msgstr "API-ключ"
|
||||
msgid "HTTP digest"
|
||||
msgstr "HTTP digest-авторизация"
|
||||
|
||||
msgid "Configuration for the plugin capabilities this preset uses, overriding the global Capabilities configuration. Stored as a raw JSON array and edited through the dialog behind the button, never typed in directly."
|
||||
msgstr ""
|
||||
|
||||
# Логическая ошибка; пересекаются не периметры, а траектория холостого
|
||||
# перемещения со стенкой модели
|
||||
msgid "Avoid crossing walls"
|
||||
@@ -13186,6 +13300,24 @@ msgstr ""
|
||||
"Плотность нижней поверхности. Эта функция предназначена для улучшения внешнего вида или функциональности объекта, а не для решения проблем, таких как чрезмерная экструзия.\n"
|
||||
"Внимание: уменьшение этого значения может негативно повлиять на адгезию к печатной платформе."
|
||||
|
||||
msgid "Top surface fill order"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
|
||||
"Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
|
||||
"Default uses shortest-path ordering, which may run in either direction."
|
||||
msgstr ""
|
||||
|
||||
msgid "Bottom surface fill order"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
|
||||
"Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
|
||||
"Default uses shortest-path ordering, which may run in either direction."
|
||||
msgstr ""
|
||||
|
||||
msgid "Internal solid infill pattern"
|
||||
msgstr "Шаблон сплошного заполнения"
|
||||
|
||||
@@ -14583,9 +14715,6 @@ msgstr ""
|
||||
"\n"
|
||||
"Примечание: ограничение запуска в некоторых прошивках (например, [fan] off_below в Klipper) может автоматически занулять слишком низкие значения. В таком случае рекомендуется указать минимальный процент, который не сбрасывается прошивкой."
|
||||
|
||||
msgid "%"
|
||||
msgstr "%"
|
||||
|
||||
msgid "Time cost"
|
||||
msgstr "Стоимость часа печати"
|
||||
|
||||
@@ -15323,6 +15452,9 @@ msgstr ""
|
||||
"\n"
|
||||
"Примечание: прошивка RepRap не поддерживает раздельную настройку осей."
|
||||
|
||||
msgid "Hz"
|
||||
msgstr "Гц"
|
||||
|
||||
msgid "Y"
|
||||
msgstr "Y"
|
||||
|
||||
@@ -15628,6 +15760,15 @@ msgstr "G-код при смене типа линии (настройки пе
|
||||
msgid "This G-code is inserted when the extrusion role is changed. It runs after the machine and filament extrusion role G-code."
|
||||
msgstr "Команды в G-коде, которые выполняются между печатью разных элементов структуры (например, при переходе от периметра к заполнению). Выполняются после команд смены типа линии из настроек принтера и материала."
|
||||
|
||||
msgid "Plugins Used"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin capabilities referenced by this preset, stored as name;uuid;capability."
|
||||
msgstr ""
|
||||
|
||||
msgid "Python plugin(s) invoked at each slicing pipeline step to read and modify intermediate slicing data, including a final G-code post-processing step. Research/experimental."
|
||||
msgstr ""
|
||||
|
||||
msgid "Printer type"
|
||||
msgstr "Тип принтера"
|
||||
|
||||
@@ -15695,6 +15836,15 @@ msgstr ""
|
||||
"\n"
|
||||
"Примечание: значение не может быть меньше 25% или больше 100% и будет скорректировано автоматически при нарезке."
|
||||
|
||||
msgid "Retract amount after wipe"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The length of fast retraction after wipe, relative to retraction length.\n"
|
||||
"The value will be clamped by 100% minus the retract amount before the wipe value."
|
||||
msgstr ""
|
||||
|
||||
msgid "Retract on layer change"
|
||||
msgstr "Откат при смене слоя"
|
||||
|
||||
@@ -16838,16 +16988,6 @@ msgstr "Толщина оболочки сверху"
|
||||
msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers."
|
||||
msgstr "Минимальная толщина оболочки сверху в мм. Если толщина оболочки, рассчитанная по количеству сплошных слоёв сверху, меньше этого значения, количество сплошных слоёв сверху будет автоматически увеличено при нарезке, для удовлетворения минимальной толщины оболочки. Это позволяет избежать слишком тонкой оболочки при небольшой высоте слоя. 0 означает, что этот параметр отключён, а толщина оболочки сверху задаётся количеством сплошных слоёв сверху."
|
||||
|
||||
msgid "Anisotropic surfaces"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Anisotropic patterns on the top and bottom surfaces.\n"
|
||||
"Co-directional printing mode will be applied. For certain patterns, omni-directional filling provides color dispersion when using multi-colored or silk plastics.\n"
|
||||
"This option disable the gap fill.\n"
|
||||
"This option can increase a printing time."
|
||||
msgstr ""
|
||||
|
||||
msgid "Separated infills"
|
||||
msgstr ""
|
||||
|
||||
@@ -18767,9 +18907,6 @@ msgstr "(начало/конец)"
|
||||
msgid "Frequency settings"
|
||||
msgstr "Настройка частоты"
|
||||
|
||||
msgid "Hz"
|
||||
msgstr "Гц"
|
||||
|
||||
msgid "RepRap firmware uses the same frequency range for both axes."
|
||||
msgstr "Прошивка RepRap использует общий диапазон частот для обеих осей."
|
||||
|
||||
@@ -20798,6 +20935,145 @@ msgstr "Просмотр архива"
|
||||
msgid "Open File"
|
||||
msgstr "Открыть файл"
|
||||
|
||||
msgid "AMS Dryness Control"
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament Drying Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Stopping"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to dry temporarily due to ..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying Error"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please check the Assistant for troubleshooting"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please remove and store the filament (as shown)."
|
||||
msgstr ""
|
||||
|
||||
msgid "The AMS can rotate the filament which is properly stored, providing better drying results."
|
||||
msgstr ""
|
||||
|
||||
msgid "Rotate spool when drying"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "amsdrying"
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying-Heating"
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying-Dehumidifying"
|
||||
msgstr ""
|
||||
|
||||
msgid " maximum drying temperature is "
|
||||
msgstr ""
|
||||
|
||||
msgid " minimum drying temperature is "
|
||||
msgstr ""
|
||||
|
||||
msgid "This filament may not be completely dried."
|
||||
msgstr ""
|
||||
|
||||
msgid "This AMS is currently printing. To ensure print quality, the drying temperature cannot exceed the recommended drying temperature."
|
||||
msgstr ""
|
||||
|
||||
msgid "The temperature shall not exceed the filament's heat distortion temperature"
|
||||
msgstr ""
|
||||
|
||||
msgid "Minimum time value cannot be less than 1."
|
||||
msgstr ""
|
||||
|
||||
msgid "Maximum time value cannot be greater than 24."
|
||||
msgstr ""
|
||||
|
||||
msgid "Insufficient power"
|
||||
msgstr ""
|
||||
|
||||
msgid " Too many AMS drying simultaneously. Please plug in the power or stop other drying processes before starting."
|
||||
msgstr ""
|
||||
|
||||
msgid "AMS is busy"
|
||||
msgstr ""
|
||||
|
||||
msgid " AMS is calibrating | reading RFID | loading/unloading material, please wait."
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament in AMS outlet"
|
||||
msgstr ""
|
||||
|
||||
msgid " The high drying temperature may cause AMS blockage, please unload first."
|
||||
msgstr ""
|
||||
|
||||
msgid "Initiating AMS drying"
|
||||
msgstr ""
|
||||
|
||||
msgid "Not supported in 2D mode"
|
||||
msgstr ""
|
||||
|
||||
msgid "Task in progress"
|
||||
msgstr ""
|
||||
|
||||
msgid " The AMS might be in use during Task."
|
||||
msgstr ""
|
||||
|
||||
msgid " Firmware update in progress, please wait..."
|
||||
msgstr ""
|
||||
|
||||
msgid " Please plug in the power and then use the drying function."
|
||||
msgstr ""
|
||||
|
||||
msgid " The high drying temperature may cause AMS blockage. Please unload the filament manually before proceeding."
|
||||
msgstr ""
|
||||
|
||||
msgid "System is busy"
|
||||
msgstr ""
|
||||
|
||||
msgid " Initiating other drying processes, please wait a few seconds..."
|
||||
msgstr ""
|
||||
|
||||
msgid "For better drying results, remove the filament and allow it to rotate."
|
||||
msgstr ""
|
||||
|
||||
msgid "The AMS will automatically rotate the stored filament slots to enhance the drying performance."
|
||||
msgstr ""
|
||||
|
||||
msgid "Alternatively, you can dry the filament without removing it."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unknown filaments will be treated as PLA."
|
||||
msgstr ""
|
||||
|
||||
msgid "Please store the filament marked with an exclamation mark."
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament left in the feeder during drying may soften because the drying temperature exceeds the softening point of materials like PLA and TPU."
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking adapter connection"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking filament status"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking drying presets"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking filament location"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking air intake"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking air vent"
|
||||
msgstr ""
|
||||
|
||||
msgid "The filament may not be compatible with the current machine settings. Generic filament presets will be used."
|
||||
msgstr "Материал может быть несовместим с текущими настройками принтера. Будет использоваться базовый профиль материала."
|
||||
|
||||
@@ -21123,6 +21399,12 @@ msgstr ""
|
||||
"Предотвращение коробления материала\n"
|
||||
"Знаете ли вы, что при печати материалами, склонными к короблению, таких как ABS, повышение температуры подогреваемого стола может снизить эту вероятность?"
|
||||
|
||||
#~ msgid "°C"
|
||||
#~ msgstr "°C"
|
||||
|
||||
#~ msgid "%"
|
||||
#~ msgstr "%"
|
||||
|
||||
#~ msgid "Renders cast shadows on the plate in realistic view."
|
||||
#~ msgstr "Отрисовывать тени в режиме продвинутой графики."
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Orca Slicer\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-07-13 16:24-0300\n"
|
||||
"POT-Creation-Date: 2026-07-17 15:13-0300\n"
|
||||
"Language: sv\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -1955,6 +1955,17 @@ msgstr "Det är den senaste versionen."
|
||||
msgid "Info"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Plugin %s is no longer available."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Plugin %s access is unauthorized."
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading printer & filament profiles"
|
||||
msgstr ""
|
||||
|
||||
@@ -2069,6 +2080,18 @@ msgstr ""
|
||||
msgid "Resolve cloud sync conflict"
|
||||
msgstr ""
|
||||
|
||||
msgid "Syncing your account…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Migrating presets…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Fetching plugins…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading user presets…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Retrieving printer information, please try again later."
|
||||
msgstr ""
|
||||
|
||||
@@ -2187,6 +2210,21 @@ msgstr ""
|
||||
msgid "*"
|
||||
msgstr "*"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"Failed to open the Plugins dialog:\n"
|
||||
"%s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to open the Plugins dialog (unknown error)."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin Terminal"
|
||||
msgstr ""
|
||||
|
||||
msgid "Changing application language"
|
||||
msgstr "Byter språk"
|
||||
|
||||
@@ -4983,6 +5021,28 @@ msgstr "Ogiltligt format. Förväntat vector format: \"%1%\""
|
||||
msgid "N/A"
|
||||
msgstr ""
|
||||
|
||||
msgid "System agents"
|
||||
msgstr ""
|
||||
|
||||
msgid "No plugin selected"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Select plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Remove plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configure"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Configure (%d)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Pick"
|
||||
msgstr "Välj"
|
||||
|
||||
@@ -5148,9 +5208,6 @@ msgstr "Flödeshastighet"
|
||||
msgid "Fan speed"
|
||||
msgstr "Fläkt hastighet"
|
||||
|
||||
msgid "°C"
|
||||
msgstr "° C"
|
||||
|
||||
msgid "Time"
|
||||
msgstr "Tid"
|
||||
|
||||
@@ -7161,6 +7218,14 @@ msgctxt "Layers"
|
||||
msgid "Bottom"
|
||||
msgstr "Bottenlager"
|
||||
|
||||
msgid "Plugin Selection"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"No plugins capabilities available for this type.\n"
|
||||
"Enable or install some to use."
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable detection of build plate position"
|
||||
msgstr "Aktivera detektering av byggplattans position"
|
||||
|
||||
@@ -8058,6 +8123,40 @@ msgstr ""
|
||||
msgid "Synchronize AMS Filament Information"
|
||||
msgstr ""
|
||||
|
||||
msgid "OrcaCloud plugins required by the current preset are not installed:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Install Plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Local plugins required by the current preset are missing:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Find on OrcaCloud"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugins required by the current preset are not activated:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Activate Now"
|
||||
msgstr ""
|
||||
|
||||
msgid "The installed plugin does not provide the required capability — it may be outdated:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Preparing to install plugins..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Installing plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cancelling — finishing the current plugin..."
|
||||
msgstr ""
|
||||
|
||||
#, boost-format
|
||||
msgid "Installing %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plate Settings"
|
||||
msgstr "Inställningar för platta"
|
||||
|
||||
@@ -9098,6 +9197,9 @@ msgstr ""
|
||||
msgid "Your filament grouping method in the sliced file is not optimal."
|
||||
msgstr ""
|
||||
|
||||
msgid "To ensure print quality, the drying temperature will be lowered during printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto Bed Leveling"
|
||||
msgstr ""
|
||||
|
||||
@@ -9812,6 +9914,12 @@ msgstr ""
|
||||
msgid "Post-processing Scripts"
|
||||
msgstr "Skript för efterbehandling"
|
||||
|
||||
msgid "Slicing Pipeline Plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin Configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Notes"
|
||||
msgstr ""
|
||||
|
||||
@@ -10919,6 +11027,9 @@ msgstr ""
|
||||
msgid "Switch between Prepare/Preview"
|
||||
msgstr "Växla mellan Förbered/Förhandsgranska"
|
||||
|
||||
msgid "Open actions speed dial"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plater"
|
||||
msgstr "Plätering/Förgyllning"
|
||||
|
||||
@@ -11767,6 +11878,9 @@ msgstr "API nyckel"
|
||||
msgid "HTTP digest"
|
||||
msgstr "HTTP sammandrag"
|
||||
|
||||
msgid "Configuration for the plugin capabilities this preset uses, overriding the global Capabilities configuration. Stored as a raw JSON array and edited through the dialog behind the button, never typed in directly."
|
||||
msgstr ""
|
||||
|
||||
msgid "Avoid crossing walls"
|
||||
msgstr "Undvik att korsa väggar"
|
||||
|
||||
@@ -12639,6 +12753,24 @@ msgid ""
|
||||
"WARNING: Lowering this value may negatively affect bed adhesion."
|
||||
msgstr ""
|
||||
|
||||
msgid "Top surface fill order"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
|
||||
"Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
|
||||
"Default uses shortest-path ordering, which may run in either direction."
|
||||
msgstr ""
|
||||
|
||||
msgid "Bottom surface fill order"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
|
||||
"Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
|
||||
"Default uses shortest-path ordering, which may run in either direction."
|
||||
msgstr ""
|
||||
|
||||
msgid "Internal solid infill pattern"
|
||||
msgstr "Invändigt mönster för fyllning av solida ytor"
|
||||
|
||||
@@ -13798,9 +13930,6 @@ msgid ""
|
||||
"Set to 0 to deactivate."
|
||||
msgstr ""
|
||||
|
||||
msgid "%"
|
||||
msgstr "%"
|
||||
|
||||
msgid "Time cost"
|
||||
msgstr ""
|
||||
|
||||
@@ -14467,6 +14596,9 @@ msgid ""
|
||||
"RRF: X and Y values are equal."
|
||||
msgstr ""
|
||||
|
||||
msgid "Hz"
|
||||
msgstr "Hz"
|
||||
|
||||
msgid "Y"
|
||||
msgstr "Y"
|
||||
|
||||
@@ -14716,6 +14848,15 @@ msgstr ""
|
||||
msgid "This G-code is inserted when the extrusion role is changed. It runs after the machine and filament extrusion role G-code."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugins Used"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin capabilities referenced by this preset, stored as name;uuid;capability."
|
||||
msgstr ""
|
||||
|
||||
msgid "Python plugin(s) invoked at each slicing pipeline step to read and modify intermediate slicing data, including a final G-code post-processing step. Research/experimental."
|
||||
msgstr ""
|
||||
|
||||
msgid "Printer type"
|
||||
msgstr ""
|
||||
|
||||
@@ -14784,6 +14925,15 @@ msgstr "Retraktions mängd innan wipe"
|
||||
msgid "This is the length of fast retraction before a wipe, relative to retraction length."
|
||||
msgstr "Detta är längden av snabb retraktion före en wipe, i förhållande till retraktions längden"
|
||||
|
||||
msgid "Retract amount after wipe"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The length of fast retraction after wipe, relative to retraction length.\n"
|
||||
"The value will be clamped by 100% minus the retract amount before the wipe value."
|
||||
msgstr ""
|
||||
|
||||
# TODO: Review, changed by lang refactor. PR 14254
|
||||
msgid "Retract on layer change"
|
||||
msgstr "Retraktera vid lager byte"
|
||||
@@ -15756,16 +15906,6 @@ msgstr "Övre skalets tjocklek"
|
||||
msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers."
|
||||
msgstr "Antal solida övre lager ökas när tjockleken kalkyleras och övre skalet är tunnare än detta värde. Detta kan undvika att ha för tunt skal när lagerhöjden är liten. 0 betyder att den här inställningen är inaktiverad och tjockleken på det övre skalet bestäms av de övre skal lagerna"
|
||||
|
||||
msgid "Anisotropic surfaces"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Anisotropic patterns on the top and bottom surfaces.\n"
|
||||
"Co-directional printing mode will be applied. For certain patterns, omni-directional filling provides color dispersion when using multi-colored or silk plastics.\n"
|
||||
"This option disable the gap fill.\n"
|
||||
"This option can increase a printing time."
|
||||
msgstr ""
|
||||
|
||||
msgid "Separated infills"
|
||||
msgstr ""
|
||||
|
||||
@@ -17531,9 +17671,6 @@ msgstr ""
|
||||
msgid "Frequency settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hz"
|
||||
msgstr "Hz"
|
||||
|
||||
msgid "RepRap firmware uses the same frequency range for both axes."
|
||||
msgstr ""
|
||||
|
||||
@@ -19471,6 +19608,145 @@ msgstr ""
|
||||
msgid "Open File"
|
||||
msgstr ""
|
||||
|
||||
msgid "AMS Dryness Control"
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament Drying Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Stopping"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to dry temporarily due to ..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying Error"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please check the Assistant for troubleshooting"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please remove and store the filament (as shown)."
|
||||
msgstr ""
|
||||
|
||||
msgid "The AMS can rotate the filament which is properly stored, providing better drying results."
|
||||
msgstr ""
|
||||
|
||||
msgid "Rotate spool when drying"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "amsdrying"
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying-Heating"
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying-Dehumidifying"
|
||||
msgstr ""
|
||||
|
||||
msgid " maximum drying temperature is "
|
||||
msgstr ""
|
||||
|
||||
msgid " minimum drying temperature is "
|
||||
msgstr ""
|
||||
|
||||
msgid "This filament may not be completely dried."
|
||||
msgstr ""
|
||||
|
||||
msgid "This AMS is currently printing. To ensure print quality, the drying temperature cannot exceed the recommended drying temperature."
|
||||
msgstr ""
|
||||
|
||||
msgid "The temperature shall not exceed the filament's heat distortion temperature"
|
||||
msgstr ""
|
||||
|
||||
msgid "Minimum time value cannot be less than 1."
|
||||
msgstr ""
|
||||
|
||||
msgid "Maximum time value cannot be greater than 24."
|
||||
msgstr ""
|
||||
|
||||
msgid "Insufficient power"
|
||||
msgstr ""
|
||||
|
||||
msgid " Too many AMS drying simultaneously. Please plug in the power or stop other drying processes before starting."
|
||||
msgstr ""
|
||||
|
||||
msgid "AMS is busy"
|
||||
msgstr ""
|
||||
|
||||
msgid " AMS is calibrating | reading RFID | loading/unloading material, please wait."
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament in AMS outlet"
|
||||
msgstr ""
|
||||
|
||||
msgid " The high drying temperature may cause AMS blockage, please unload first."
|
||||
msgstr ""
|
||||
|
||||
msgid "Initiating AMS drying"
|
||||
msgstr ""
|
||||
|
||||
msgid "Not supported in 2D mode"
|
||||
msgstr ""
|
||||
|
||||
msgid "Task in progress"
|
||||
msgstr ""
|
||||
|
||||
msgid " The AMS might be in use during Task."
|
||||
msgstr ""
|
||||
|
||||
msgid " Firmware update in progress, please wait..."
|
||||
msgstr ""
|
||||
|
||||
msgid " Please plug in the power and then use the drying function."
|
||||
msgstr ""
|
||||
|
||||
msgid " The high drying temperature may cause AMS blockage. Please unload the filament manually before proceeding."
|
||||
msgstr ""
|
||||
|
||||
msgid "System is busy"
|
||||
msgstr ""
|
||||
|
||||
msgid " Initiating other drying processes, please wait a few seconds..."
|
||||
msgstr ""
|
||||
|
||||
msgid "For better drying results, remove the filament and allow it to rotate."
|
||||
msgstr ""
|
||||
|
||||
msgid "The AMS will automatically rotate the stored filament slots to enhance the drying performance."
|
||||
msgstr ""
|
||||
|
||||
msgid "Alternatively, you can dry the filament without removing it."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unknown filaments will be treated as PLA."
|
||||
msgstr ""
|
||||
|
||||
msgid "Please store the filament marked with an exclamation mark."
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament left in the feeder during drying may soften because the drying temperature exceeds the softening point of materials like PLA and TPU."
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking adapter connection"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking filament status"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking drying presets"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking filament location"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking air intake"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking air vent"
|
||||
msgstr ""
|
||||
|
||||
msgid "The filament may not be compatible with the current machine settings. Generic filament presets will be used."
|
||||
msgstr ""
|
||||
|
||||
@@ -19766,6 +20042,12 @@ msgstr ""
|
||||
"Undvik vridning\n"
|
||||
"Visste du att när du skriver ut material som är benägna att vrida, såsom ABS, kan en lämplig ökning av värmebäddens temperatur minska sannolikheten för vridning?"
|
||||
|
||||
#~ msgid "°C"
|
||||
#~ msgstr "° C"
|
||||
|
||||
#~ msgid "%"
|
||||
#~ msgstr "%"
|
||||
|
||||
#~ msgctxt "Sync_Nozzle_AMS"
|
||||
#~ msgid "Cancel"
|
||||
#~ msgstr "Avbryt"
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Orca Slicer\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-07-13 16:24-0300\n"
|
||||
"POT-Creation-Date: 2026-07-17 15:13-0300\n"
|
||||
"PO-Revision-Date: 2026-06-19 13:40+0700\n"
|
||||
"Last-Translator: Icezaza\n"
|
||||
"Language-Team: Thai\n"
|
||||
@@ -1962,6 +1962,17 @@ msgstr "นี่เป็นเวอร์ชันใหม่ล่าสุ
|
||||
msgid "Info"
|
||||
msgstr "ข้อมูล"
|
||||
|
||||
msgid "Loading Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Plugin %s is no longer available."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Plugin %s access is unauthorized."
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading printer & filament profiles"
|
||||
msgstr "กำลังโหลดโปรไฟล์เครื่องพิมพ์และฟิลาเมนต์"
|
||||
|
||||
@@ -2080,6 +2091,18 @@ msgstr ""
|
||||
msgid "Resolve cloud sync conflict"
|
||||
msgstr "แก้ไขความขัดแย้งการซิงค์คลาวด์"
|
||||
|
||||
msgid "Syncing your account…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Migrating presets…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Fetching plugins…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading user presets…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Retrieving printer information, please try again later."
|
||||
msgstr "กำลังดึงข้อมูลเครื่องพิมพ์ โปรดลองอีกครั้งในภายหลัง"
|
||||
|
||||
@@ -2210,6 +2233,21 @@ msgstr ""
|
||||
msgid "*"
|
||||
msgstr "*"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"Failed to open the Plugins dialog:\n"
|
||||
"%s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to open the Plugins dialog (unknown error)."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin Terminal"
|
||||
msgstr ""
|
||||
|
||||
msgid "Changing application language"
|
||||
msgstr "การเปลี่ยนภาษาของแอปพลิเคชัน"
|
||||
|
||||
@@ -4935,6 +4973,28 @@ msgstr "รูปแบบไม่ถูกต้อง รูปแบบเ
|
||||
msgid "N/A"
|
||||
msgstr "ไม่มี"
|
||||
|
||||
msgid "System agents"
|
||||
msgstr ""
|
||||
|
||||
msgid "No plugin selected"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Select plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Remove plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configure"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Configure (%d)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Pick"
|
||||
msgstr "เลือก"
|
||||
|
||||
@@ -5100,9 +5160,6 @@ msgstr "อัตราการไหล"
|
||||
msgid "Fan speed"
|
||||
msgstr "ความเร็วพัดลม"
|
||||
|
||||
msgid "°C"
|
||||
msgstr "°C"
|
||||
|
||||
msgid "Time"
|
||||
msgstr "เวลา"
|
||||
|
||||
@@ -7095,6 +7152,14 @@ msgctxt "Layers"
|
||||
msgid "Bottom"
|
||||
msgstr "ล่าง"
|
||||
|
||||
msgid "Plugin Selection"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"No plugins capabilities available for this type.\n"
|
||||
"Enable or install some to use."
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable detection of build plate position"
|
||||
msgstr "เปิดใช้งานการตรวจจับตำแหน่งฐานรองแท่นพิมพ์"
|
||||
|
||||
@@ -7970,6 +8035,40 @@ msgstr "หน้าอุปกรณ์"
|
||||
msgid "Synchronize AMS Filament Information"
|
||||
msgstr "ประสานข้อมูล AMS เส้นพลาสติก"
|
||||
|
||||
msgid "OrcaCloud plugins required by the current preset are not installed:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Install Plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Local plugins required by the current preset are missing:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Find on OrcaCloud"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugins required by the current preset are not activated:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Activate Now"
|
||||
msgstr ""
|
||||
|
||||
msgid "The installed plugin does not provide the required capability — it may be outdated:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Preparing to install plugins..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Installing plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cancelling — finishing the current plugin..."
|
||||
msgstr ""
|
||||
|
||||
#, boost-format
|
||||
msgid "Installing %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plate Settings"
|
||||
msgstr "การตั้งค่าฐานพิมพ์"
|
||||
|
||||
@@ -9028,6 +9127,9 @@ msgstr "หลากสีพร้อมภายนอก"
|
||||
msgid "Your filament grouping method in the sliced file is not optimal."
|
||||
msgstr "วิธีการจัดกลุ่มเส้นพลาสติกของคุณในไฟล์ที่แบ่งส่วนนั้นไม่เหมาะสมที่สุด"
|
||||
|
||||
msgid "To ensure print quality, the drying temperature will be lowered during printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto Bed Leveling"
|
||||
msgstr "ปรับระดับฐานพิมพ์อัตโนมัติ"
|
||||
|
||||
@@ -9745,6 +9847,12 @@ msgstr "เปลี่ยนบทบาทการอัดขึ้นรู
|
||||
msgid "Post-processing Scripts"
|
||||
msgstr "สคริปต์หลังการประมวลผล"
|
||||
|
||||
msgid "Slicing Pipeline Plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin Configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Notes"
|
||||
msgstr "หมายเหตุ"
|
||||
|
||||
@@ -10873,6 +10981,9 @@ msgstr "สลับการพิมพ์สำหรับวัตถุ/
|
||||
msgid "Switch between Prepare/Preview"
|
||||
msgstr "สลับระหว่างการเตรียม/ดูตัวอย่าง"
|
||||
|
||||
msgid "Open actions speed dial"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plater"
|
||||
msgstr "เพลเตอร์"
|
||||
|
||||
@@ -11703,6 +11814,9 @@ msgstr "คีย์เอพีไอ"
|
||||
msgid "HTTP digest"
|
||||
msgstr "HTTP ไดเจสต์"
|
||||
|
||||
msgid "Configuration for the plugin capabilities this preset uses, overriding the global Capabilities configuration. Stored as a raw JSON array and edited through the dialog behind the button, never typed in directly."
|
||||
msgstr ""
|
||||
|
||||
msgid "Avoid crossing walls"
|
||||
msgstr "หลีกเลี่ยงการข้ามผนัง"
|
||||
|
||||
@@ -12706,6 +12820,24 @@ msgstr ""
|
||||
"ความหนาแน่นของชั้นผิวด้านล่าง มีวัตถุประสงค์เพื่อความสวยงามหรือการใช้งาน ไม่ใช่เพื่อแก้ไขปัญหา เช่น การอัดขึ้นรูปมากเกินไป\n"
|
||||
"คำเตือน: การลดค่านี้อาจส่งผลเสียต่อการยึดเกาะของฐานพิมพ์"
|
||||
|
||||
msgid "Top surface fill order"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
|
||||
"Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
|
||||
"Default uses shortest-path ordering, which may run in either direction."
|
||||
msgstr ""
|
||||
|
||||
msgid "Bottom surface fill order"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
|
||||
"Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
|
||||
"Default uses shortest-path ordering, which may run in either direction."
|
||||
msgstr ""
|
||||
|
||||
msgid "Internal solid infill pattern"
|
||||
msgstr "รูปแบบไส้ในของแข็งภายใน"
|
||||
|
||||
@@ -13928,9 +14060,6 @@ msgstr ""
|
||||
"หากเฟิร์มแวร์ของคุณปิดใช้งานพัดลมที่ต่ำกว่าเกณฑ์อยู่แล้ว (เช่น [พัดลม] off_below ของ Klipper: 0.10 จะปิดพัดลมเมื่อใดก็ตามที่รอบการทำงานที่ได้รับคำสั่งต่ำกว่า 10%) ตัวเลือกนี้และเกณฑ์ของเฟิร์มแวร์ควรได้รับการตั้งค่าตามอุดมคติให้เป็นค่าเดียวกัน การจับคู่พวกมัน (เช่น off_below: 0.10 ใน Klipper และ 10% ที่นี่) รับประกันว่าตัวแบ่งส่วนข้อมูลจะไม่ปล่อยค่าที่ไม่ใช่ศูนย์ซึ่งเฟิร์มแวร์จะดรอปอย่างเงียบๆ และพัดลมจะไม่ได้รับค่าที่ต่ำกว่าค่าที่คุณรู้ว่าสามารถสปูลได้จริง\n"
|
||||
"ตั้งค่าเป็น 0 เพื่อปิดใช้งาน"
|
||||
|
||||
msgid "%"
|
||||
msgstr "%"
|
||||
|
||||
msgid "Time cost"
|
||||
msgstr "ต้นทุนเวลา"
|
||||
|
||||
@@ -14620,6 +14749,9 @@ msgstr ""
|
||||
"หากต้องการปิดใช้งานการสร้างอินพุต ให้ใช้ประเภทปิดใช้งาน\n"
|
||||
"RRF: ค่า X และ Y เท่ากัน"
|
||||
|
||||
msgid "Hz"
|
||||
msgstr "Hz"
|
||||
|
||||
msgid "Y"
|
||||
msgstr "Y"
|
||||
|
||||
@@ -14901,6 +15033,15 @@ msgstr "เปลี่ยนบทบาทการอัดขึ้นรู
|
||||
msgid "This G-code is inserted when the extrusion role is changed. It runs after the machine and filament extrusion role G-code."
|
||||
msgstr "G-code นี้จะถูกแทรกเมื่อบทบาทการอัดขึ้นรูปมีการเปลี่ยนแปลง มันทำงานหลังจากบทบาทการอัดขึ้นรูปของเครื่องจักรและการอัดขึ้นรูปเส้นพลาสติก G-code"
|
||||
|
||||
msgid "Plugins Used"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin capabilities referenced by this preset, stored as name;uuid;capability."
|
||||
msgstr ""
|
||||
|
||||
msgid "Python plugin(s) invoked at each slicing pipeline step to read and modify intermediate slicing data, including a final G-code post-processing step. Research/experimental."
|
||||
msgstr ""
|
||||
|
||||
msgid "Printer type"
|
||||
msgstr "ประเภทเครื่องพิมพ์"
|
||||
|
||||
@@ -14961,6 +15102,15 @@ msgstr "ถอนจำนวนก่อนเช็ด"
|
||||
msgid "This is the length of fast retraction before a wipe, relative to retraction length."
|
||||
msgstr "ความยาวของการดึงกลับอย่างรวดเร็วก่อนเช็ด สัมพันธ์กับความยาวการดึงกลับ"
|
||||
|
||||
msgid "Retract amount after wipe"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The length of fast retraction after wipe, relative to retraction length.\n"
|
||||
"The value will be clamped by 100% minus the retract amount before the wipe value."
|
||||
msgstr ""
|
||||
|
||||
msgid "Retract on layer change"
|
||||
msgstr "ถอนออกเมื่อเปลี่ยนเลเยอร์"
|
||||
|
||||
@@ -15936,16 +16086,6 @@ msgstr "ความหนาผนังด้านบน"
|
||||
msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers."
|
||||
msgstr "จำนวนชั้นทึบด้านบนจะเพิ่มขึ้นเมื่อสไลซ์หากความหนาที่คำนวณโดยชั้นเปลือกด้านบนบางกว่าค่านี้ วิธีนี้สามารถหลีกเลี่ยงไม่ให้เปลือกบางเกินไปเมื่อชั้นมีความสูงน้อย 0 หมายความว่าการตั้งค่านี้ถูกปิดใช้งาน และความหนาของเปลือกด้านบนถูกกำหนดโดยชั้นเปลือกด้านบนอย่างแน่นอน"
|
||||
|
||||
msgid "Anisotropic surfaces"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Anisotropic patterns on the top and bottom surfaces.\n"
|
||||
"Co-directional printing mode will be applied. For certain patterns, omni-directional filling provides color dispersion when using multi-colored or silk plastics.\n"
|
||||
"This option disable the gap fill.\n"
|
||||
"This option can increase a printing time."
|
||||
msgstr ""
|
||||
|
||||
msgid "Separated infills"
|
||||
msgstr ""
|
||||
|
||||
@@ -17744,9 +17884,6 @@ msgstr "เริ่ม / สิ้นสุด"
|
||||
msgid "Frequency settings"
|
||||
msgstr "การตั้งค่าความถี่"
|
||||
|
||||
msgid "Hz"
|
||||
msgstr "Hz"
|
||||
|
||||
msgid "RepRap firmware uses the same frequency range for both axes."
|
||||
msgstr "เฟิร์มแวร์ RepRap ใช้ช่วงความถี่เดียวกันสำหรับทั้งสองแกน"
|
||||
|
||||
@@ -19720,6 +19857,145 @@ msgstr "ดูตัวอย่างไฟล์บีบอัด"
|
||||
msgid "Open File"
|
||||
msgstr "เปิดไฟล์"
|
||||
|
||||
msgid "AMS Dryness Control"
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament Drying Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Stopping"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to dry temporarily due to ..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying Error"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please check the Assistant for troubleshooting"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please remove and store the filament (as shown)."
|
||||
msgstr ""
|
||||
|
||||
msgid "The AMS can rotate the filament which is properly stored, providing better drying results."
|
||||
msgstr ""
|
||||
|
||||
msgid "Rotate spool when drying"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "amsdrying"
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying-Heating"
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying-Dehumidifying"
|
||||
msgstr ""
|
||||
|
||||
msgid " maximum drying temperature is "
|
||||
msgstr ""
|
||||
|
||||
msgid " minimum drying temperature is "
|
||||
msgstr ""
|
||||
|
||||
msgid "This filament may not be completely dried."
|
||||
msgstr ""
|
||||
|
||||
msgid "This AMS is currently printing. To ensure print quality, the drying temperature cannot exceed the recommended drying temperature."
|
||||
msgstr ""
|
||||
|
||||
msgid "The temperature shall not exceed the filament's heat distortion temperature"
|
||||
msgstr ""
|
||||
|
||||
msgid "Minimum time value cannot be less than 1."
|
||||
msgstr ""
|
||||
|
||||
msgid "Maximum time value cannot be greater than 24."
|
||||
msgstr ""
|
||||
|
||||
msgid "Insufficient power"
|
||||
msgstr ""
|
||||
|
||||
msgid " Too many AMS drying simultaneously. Please plug in the power or stop other drying processes before starting."
|
||||
msgstr ""
|
||||
|
||||
msgid "AMS is busy"
|
||||
msgstr ""
|
||||
|
||||
msgid " AMS is calibrating | reading RFID | loading/unloading material, please wait."
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament in AMS outlet"
|
||||
msgstr ""
|
||||
|
||||
msgid " The high drying temperature may cause AMS blockage, please unload first."
|
||||
msgstr ""
|
||||
|
||||
msgid "Initiating AMS drying"
|
||||
msgstr ""
|
||||
|
||||
msgid "Not supported in 2D mode"
|
||||
msgstr ""
|
||||
|
||||
msgid "Task in progress"
|
||||
msgstr ""
|
||||
|
||||
msgid " The AMS might be in use during Task."
|
||||
msgstr ""
|
||||
|
||||
msgid " Firmware update in progress, please wait..."
|
||||
msgstr ""
|
||||
|
||||
msgid " Please plug in the power and then use the drying function."
|
||||
msgstr ""
|
||||
|
||||
msgid " The high drying temperature may cause AMS blockage. Please unload the filament manually before proceeding."
|
||||
msgstr ""
|
||||
|
||||
msgid "System is busy"
|
||||
msgstr ""
|
||||
|
||||
msgid " Initiating other drying processes, please wait a few seconds..."
|
||||
msgstr ""
|
||||
|
||||
msgid "For better drying results, remove the filament and allow it to rotate."
|
||||
msgstr ""
|
||||
|
||||
msgid "The AMS will automatically rotate the stored filament slots to enhance the drying performance."
|
||||
msgstr ""
|
||||
|
||||
msgid "Alternatively, you can dry the filament without removing it."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unknown filaments will be treated as PLA."
|
||||
msgstr ""
|
||||
|
||||
msgid "Please store the filament marked with an exclamation mark."
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament left in the feeder during drying may soften because the drying temperature exceeds the softening point of materials like PLA and TPU."
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking adapter connection"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking filament status"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking drying presets"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking filament location"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking air intake"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking air vent"
|
||||
msgstr ""
|
||||
|
||||
msgid "The filament may not be compatible with the current machine settings. Generic filament presets will be used."
|
||||
msgstr "เส้นพลาสติกอาจไม่เข้ากันกับการตั้งค่าเครื่องปัจจุบัน จะใช้การตั้งค่าฟิลาเมนต์ทั่วไป"
|
||||
|
||||
@@ -20035,6 +20311,12 @@ msgstr ""
|
||||
"หลีกเลี่ยงการบิดเบี้ยว\n"
|
||||
"คุณรู้หรือไม่ว่าเมื่อพิมพ์วัสดุที่มีแนวโน้มที่จะเกิดการบิดเบี้ยว เช่น ABS การเพิ่มอุณหภูมิฐานพิมพ์อย่างเหมาะสมสามารถลดความน่าจะเป็นของการบิดเบี้ยวได้"
|
||||
|
||||
#~ msgid "°C"
|
||||
#~ msgstr "°C"
|
||||
|
||||
#~ msgid "%"
|
||||
#~ msgstr "%"
|
||||
|
||||
#~ msgid "Renders cast shadows on the plate in realistic view."
|
||||
#~ msgstr "แสดงเงาแบบทอดบนเพลตในมุมมองแบบสมจริง"
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Orca Slicer\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-07-13 16:24-0300\n"
|
||||
"POT-Creation-Date: 2026-07-17 15:13-0300\n"
|
||||
"PO-Revision-Date: 2026-04-08 23:59+0300\n"
|
||||
"Last-Translator: GlauTech\n"
|
||||
"Language-Team: \n"
|
||||
@@ -1982,6 +1982,17 @@ msgstr "Bu en yeni versiyondur."
|
||||
msgid "Info"
|
||||
msgstr "Bilgi"
|
||||
|
||||
msgid "Loading Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Plugin %s is no longer available."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Plugin %s access is unauthorized."
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading printer & filament profiles"
|
||||
msgstr ""
|
||||
|
||||
@@ -2099,6 +2110,18 @@ msgstr ""
|
||||
msgid "Resolve cloud sync conflict"
|
||||
msgstr ""
|
||||
|
||||
msgid "Syncing your account…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Migrating presets…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Fetching plugins…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading user presets…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Retrieving printer information, please try again later."
|
||||
msgstr "Yazıcı bilgileri alınıyor, lütfen daha sonra tekrar deneyin."
|
||||
|
||||
@@ -2224,6 +2247,21 @@ msgstr ""
|
||||
msgid "*"
|
||||
msgstr "*"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"Failed to open the Plugins dialog:\n"
|
||||
"%s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to open the Plugins dialog (unknown error)."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin Terminal"
|
||||
msgstr ""
|
||||
|
||||
msgid "Changing application language"
|
||||
msgstr "Dil değiştiriliyor"
|
||||
|
||||
@@ -5049,6 +5087,28 @@ msgstr "Geçersiz format. Beklenen vektör formatı: \"%1%\""
|
||||
msgid "N/A"
|
||||
msgstr ""
|
||||
|
||||
msgid "System agents"
|
||||
msgstr ""
|
||||
|
||||
msgid "No plugin selected"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Select plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Remove plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configure"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Configure (%d)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Pick"
|
||||
msgstr "Seç"
|
||||
|
||||
@@ -5214,9 +5274,6 @@ msgstr "Akış hızı"
|
||||
msgid "Fan speed"
|
||||
msgstr "Fan hızı"
|
||||
|
||||
msgid "°C"
|
||||
msgstr "°C"
|
||||
|
||||
msgid "Time"
|
||||
msgstr "Zaman"
|
||||
|
||||
@@ -7245,6 +7302,14 @@ msgctxt "Layers"
|
||||
msgid "Bottom"
|
||||
msgstr "Alt"
|
||||
|
||||
msgid "Plugin Selection"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"No plugins capabilities available for this type.\n"
|
||||
"Enable or install some to use."
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable detection of build plate position"
|
||||
msgstr "Yapı plakası konumunun algılanmasını etkinleştir"
|
||||
|
||||
@@ -8149,6 +8214,40 @@ msgstr "Cihaz Sayfası"
|
||||
msgid "Synchronize AMS Filament Information"
|
||||
msgstr "AMS Filament Bilgilerini Senkronize Etme"
|
||||
|
||||
msgid "OrcaCloud plugins required by the current preset are not installed:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Install Plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Local plugins required by the current preset are missing:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Find on OrcaCloud"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugins required by the current preset are not activated:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Activate Now"
|
||||
msgstr ""
|
||||
|
||||
msgid "The installed plugin does not provide the required capability — it may be outdated:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Preparing to install plugins..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Installing plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cancelling — finishing the current plugin..."
|
||||
msgstr ""
|
||||
|
||||
#, boost-format
|
||||
msgid "Installing %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plate Settings"
|
||||
msgstr "Plaka Ayarları"
|
||||
|
||||
@@ -9207,6 +9306,9 @@ msgstr "Çok renkli harici"
|
||||
msgid "Your filament grouping method in the sliced file is not optimal."
|
||||
msgstr "Dilimlenmiş dosyadaki filaman gruplama yönteminiz optimal değil."
|
||||
|
||||
msgid "To ensure print quality, the drying temperature will be lowered during printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto Bed Leveling"
|
||||
msgstr "Otomatik Yatak Tesviyesi"
|
||||
|
||||
@@ -9937,6 +10039,12 @@ msgstr "Ekstrüzyon Rolü G-kodu Değiştirme"
|
||||
msgid "Post-processing Scripts"
|
||||
msgstr "İşlem Sonrası Komut Dosyaları"
|
||||
|
||||
msgid "Slicing Pipeline Plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin Configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Notes"
|
||||
msgstr "Notlar"
|
||||
|
||||
@@ -11066,6 +11174,9 @@ msgstr ""
|
||||
msgid "Switch between Prepare/Preview"
|
||||
msgstr "Hazırlama/Önizleme arasında geçiş yap"
|
||||
|
||||
msgid "Open actions speed dial"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plater"
|
||||
msgstr "Plakacı"
|
||||
|
||||
@@ -11926,6 +12037,9 @@ msgstr "API anahtarı"
|
||||
msgid "HTTP digest"
|
||||
msgstr "HTTP özeti"
|
||||
|
||||
msgid "Configuration for the plugin capabilities this preset uses, overriding the global Capabilities configuration. Stored as a raw JSON array and edited through the dialog behind the button, never typed in directly."
|
||||
msgstr ""
|
||||
|
||||
msgid "Avoid crossing walls"
|
||||
msgstr "Duvar geçişinden kaçın"
|
||||
|
||||
@@ -12899,6 +13013,24 @@ msgstr ""
|
||||
"Alt yüzey katmanının yoğunluğu. Estetik veya işlevsel amaçlar için tasarlanmıştır, aşırı ekstrüzyon gibi sorunları gidermek için değildir.\n"
|
||||
"UYARI: Bu değerin düşürülmesi, yatak yapışmasını olumsuz etkileyebilir."
|
||||
|
||||
msgid "Top surface fill order"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
|
||||
"Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
|
||||
"Default uses shortest-path ordering, which may run in either direction."
|
||||
msgstr ""
|
||||
|
||||
msgid "Bottom surface fill order"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
|
||||
"Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
|
||||
"Default uses shortest-path ordering, which may run in either direction."
|
||||
msgstr ""
|
||||
|
||||
msgid "Internal solid infill pattern"
|
||||
msgstr "İç katı dolgu deseni"
|
||||
|
||||
@@ -14129,9 +14261,6 @@ msgid ""
|
||||
"Set to 0 to deactivate."
|
||||
msgstr ""
|
||||
|
||||
msgid "%"
|
||||
msgstr "%"
|
||||
|
||||
msgid "Time cost"
|
||||
msgstr "Zaman maliyeti"
|
||||
|
||||
@@ -14818,6 +14947,9 @@ msgid ""
|
||||
"RRF: X and Y values are equal."
|
||||
msgstr ""
|
||||
|
||||
msgid "Hz"
|
||||
msgstr "Hz."
|
||||
|
||||
msgid "Y"
|
||||
msgstr "Y"
|
||||
|
||||
@@ -15091,6 +15223,15 @@ msgstr ""
|
||||
msgid "This G-code is inserted when the extrusion role is changed. It runs after the machine and filament extrusion role G-code."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugins Used"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin capabilities referenced by this preset, stored as name;uuid;capability."
|
||||
msgstr ""
|
||||
|
||||
msgid "Python plugin(s) invoked at each slicing pipeline step to read and modify intermediate slicing data, including a final G-code post-processing step. Research/experimental."
|
||||
msgstr ""
|
||||
|
||||
msgid "Printer type"
|
||||
msgstr "Yazıcı türü"
|
||||
|
||||
@@ -15159,6 +15300,15 @@ msgstr "Temizleme işlemi öncesi geri çekme miktarı"
|
||||
msgid "This is the length of fast retraction before a wipe, relative to retraction length."
|
||||
msgstr "Geri çekme uzunluğuna göre, temizlemeden önce hızlı geri çekilmenin uzunluğu."
|
||||
|
||||
msgid "Retract amount after wipe"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The length of fast retraction after wipe, relative to retraction length.\n"
|
||||
"The value will be clamped by 100% minus the retract amount before the wipe value."
|
||||
msgstr ""
|
||||
|
||||
# TODO: Review, changed by lang refactor. PR 14254
|
||||
msgid "Retract on layer change"
|
||||
msgstr "Katman değişiminde geri çek"
|
||||
@@ -16167,16 +16317,6 @@ msgstr "Üst katman kalınlığı"
|
||||
msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers."
|
||||
msgstr "Üst kabuk katmanları tarafından hesaplanan kalınlık bu değerden daha ince ise dilimleme sırasında üst katı katmanların sayısı artırılır. Bu, katman yüksekliği küçük olduğunda kabuğun çok ince olmasını önleyebilir. 0, bu ayarın devre dışı olduğu ve üst kabuğun kalınlığının kesinlikle üst kabuk katmanları tarafından belirlendiği anlamına gelir."
|
||||
|
||||
msgid "Anisotropic surfaces"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Anisotropic patterns on the top and bottom surfaces.\n"
|
||||
"Co-directional printing mode will be applied. For certain patterns, omni-directional filling provides color dispersion when using multi-colored or silk plastics.\n"
|
||||
"This option disable the gap fill.\n"
|
||||
"This option can increase a printing time."
|
||||
msgstr ""
|
||||
|
||||
msgid "Separated infills"
|
||||
msgstr ""
|
||||
|
||||
@@ -18007,9 +18147,6 @@ msgstr "Başlangıç / Bitiş"
|
||||
msgid "Frequency settings"
|
||||
msgstr "Frekans ayarları"
|
||||
|
||||
msgid "Hz"
|
||||
msgstr "Hz."
|
||||
|
||||
msgid "RepRap firmware uses the same frequency range for both axes."
|
||||
msgstr "RepRap ürün yazılımı her iki eksen için aynı frekans aralığını kullanır."
|
||||
|
||||
@@ -19999,6 +20136,145 @@ msgstr ""
|
||||
msgid "Open File"
|
||||
msgstr ""
|
||||
|
||||
msgid "AMS Dryness Control"
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament Drying Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Stopping"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to dry temporarily due to ..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying Error"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please check the Assistant for troubleshooting"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please remove and store the filament (as shown)."
|
||||
msgstr ""
|
||||
|
||||
msgid "The AMS can rotate the filament which is properly stored, providing better drying results."
|
||||
msgstr ""
|
||||
|
||||
msgid "Rotate spool when drying"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "amsdrying"
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying-Heating"
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying-Dehumidifying"
|
||||
msgstr ""
|
||||
|
||||
msgid " maximum drying temperature is "
|
||||
msgstr ""
|
||||
|
||||
msgid " minimum drying temperature is "
|
||||
msgstr ""
|
||||
|
||||
msgid "This filament may not be completely dried."
|
||||
msgstr ""
|
||||
|
||||
msgid "This AMS is currently printing. To ensure print quality, the drying temperature cannot exceed the recommended drying temperature."
|
||||
msgstr ""
|
||||
|
||||
msgid "The temperature shall not exceed the filament's heat distortion temperature"
|
||||
msgstr ""
|
||||
|
||||
msgid "Minimum time value cannot be less than 1."
|
||||
msgstr ""
|
||||
|
||||
msgid "Maximum time value cannot be greater than 24."
|
||||
msgstr ""
|
||||
|
||||
msgid "Insufficient power"
|
||||
msgstr ""
|
||||
|
||||
msgid " Too many AMS drying simultaneously. Please plug in the power or stop other drying processes before starting."
|
||||
msgstr ""
|
||||
|
||||
msgid "AMS is busy"
|
||||
msgstr ""
|
||||
|
||||
msgid " AMS is calibrating | reading RFID | loading/unloading material, please wait."
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament in AMS outlet"
|
||||
msgstr ""
|
||||
|
||||
msgid " The high drying temperature may cause AMS blockage, please unload first."
|
||||
msgstr ""
|
||||
|
||||
msgid "Initiating AMS drying"
|
||||
msgstr ""
|
||||
|
||||
msgid "Not supported in 2D mode"
|
||||
msgstr ""
|
||||
|
||||
msgid "Task in progress"
|
||||
msgstr ""
|
||||
|
||||
msgid " The AMS might be in use during Task."
|
||||
msgstr ""
|
||||
|
||||
msgid " Firmware update in progress, please wait..."
|
||||
msgstr ""
|
||||
|
||||
msgid " Please plug in the power and then use the drying function."
|
||||
msgstr ""
|
||||
|
||||
msgid " The high drying temperature may cause AMS blockage. Please unload the filament manually before proceeding."
|
||||
msgstr ""
|
||||
|
||||
msgid "System is busy"
|
||||
msgstr ""
|
||||
|
||||
msgid " Initiating other drying processes, please wait a few seconds..."
|
||||
msgstr ""
|
||||
|
||||
msgid "For better drying results, remove the filament and allow it to rotate."
|
||||
msgstr ""
|
||||
|
||||
msgid "The AMS will automatically rotate the stored filament slots to enhance the drying performance."
|
||||
msgstr ""
|
||||
|
||||
msgid "Alternatively, you can dry the filament without removing it."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unknown filaments will be treated as PLA."
|
||||
msgstr ""
|
||||
|
||||
msgid "Please store the filament marked with an exclamation mark."
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament left in the feeder during drying may soften because the drying temperature exceeds the softening point of materials like PLA and TPU."
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking adapter connection"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking filament status"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking drying presets"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking filament location"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking air intake"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking air vent"
|
||||
msgstr ""
|
||||
|
||||
msgid "The filament may not be compatible with the current machine settings. Generic filament presets will be used."
|
||||
msgstr "Filament mevcut makine ayarlarıyla uyumlu olmayabilir. Genel filament ön ayarları kullanılacaktır."
|
||||
|
||||
@@ -20321,6 +20597,12 @@ msgstr ""
|
||||
"Eğilmeyi önleyin\n"
|
||||
"ABS gibi bükülmeye yatkın malzemelere baskı yaparken, ısıtma yatağı sıcaklığının uygun şekilde arttırılmasının bükülme olasılığını azaltabileceğini biliyor muydunuz?"
|
||||
|
||||
#~ msgid "°C"
|
||||
#~ msgstr "°C"
|
||||
|
||||
#~ msgid "%"
|
||||
#~ msgstr "%"
|
||||
|
||||
#~ msgid "Continue to sync filaments"
|
||||
#~ msgstr "Filamentleri senkronize etmeye devam edin"
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: orcaslicerua\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-07-07 16:46-0300\n"
|
||||
"POT-Creation-Date: 2026-07-17 15:13-0300\n"
|
||||
"PO-Revision-Date: 2026-07-17 16:25+0300\n"
|
||||
"Last-Translator: Andrij Mizyk <andm1zyk@proton.me>\n"
|
||||
"Language-Team: Ukrainian\n"
|
||||
@@ -1992,6 +1992,17 @@ msgstr "Це найновіша версія."
|
||||
msgid "Info"
|
||||
msgstr "Інформація"
|
||||
|
||||
msgid "Loading Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Plugin %s is no longer available."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Plugin %s access is unauthorized."
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading printer & filament profiles"
|
||||
msgstr "Завантаження профілів принтера і філаменту"
|
||||
|
||||
@@ -2109,6 +2120,18 @@ msgstr ""
|
||||
msgid "Resolve cloud sync conflict"
|
||||
msgstr "Вирішити конфлікт синхронізації з хмари"
|
||||
|
||||
msgid "Syncing your account…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Migrating presets…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Fetching plugins…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading user presets…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Retrieving printer information, please try again later."
|
||||
msgstr "Отримання інформації про принтер, спробуйте ще раз пізніше."
|
||||
|
||||
@@ -2228,7 +2251,9 @@ msgstr "Не вдалося перемкнути Orca Slicer на мову %s."
|
||||
msgid ""
|
||||
"\n"
|
||||
"You may need to reconfigure the missing locales, likely by running the \"locale-gen\" and \"dpkg-reconfigure locales\" commands.\n"
|
||||
msgstr "\nВам потрібно переконфігурувати пропущені локалі, запустивши команди \"locale-gen\" або \"dpkg-reconfigure locales\".\n"
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Вам потрібно переконфігурувати пропущені локалі, запустивши команди \"locale-gen\" або \"dpkg-reconfigure locales\".\n"
|
||||
|
||||
msgid "Orca Slicer - Switching language failed"
|
||||
msgstr "Orca Slicer - Не вдале перемикання мови"
|
||||
@@ -2236,6 +2261,21 @@ msgstr "Orca Slicer - Не вдале перемикання мови"
|
||||
msgid "*"
|
||||
msgstr "*"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"Failed to open the Plugins dialog:\n"
|
||||
"%s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to open the Plugins dialog (unknown error)."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin Terminal"
|
||||
msgstr ""
|
||||
|
||||
msgid "Changing application language"
|
||||
msgstr "Зміна мови програми"
|
||||
|
||||
@@ -5064,6 +5104,28 @@ msgstr "Невірний формат. Очікуваний векторний
|
||||
msgid "N/A"
|
||||
msgstr "Н/Д"
|
||||
|
||||
msgid "System agents"
|
||||
msgstr ""
|
||||
|
||||
msgid "No plugin selected"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Select plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Remove plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configure"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Configure (%d)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Pick"
|
||||
msgstr "Обрати"
|
||||
|
||||
@@ -5229,9 +5291,6 @@ msgstr "Потік"
|
||||
msgid "Fan speed"
|
||||
msgstr "Швидкість вентилятора"
|
||||
|
||||
msgid "°C"
|
||||
msgstr "℃"
|
||||
|
||||
msgid "Time"
|
||||
msgstr "Час"
|
||||
|
||||
@@ -7287,6 +7346,14 @@ msgctxt "Layers"
|
||||
msgid "Bottom"
|
||||
msgstr "Низ"
|
||||
|
||||
msgid "Plugin Selection"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"No plugins capabilities available for this type.\n"
|
||||
"Enable or install some to use."
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable detection of build plate position"
|
||||
msgstr "Увімкнути визначення положення робочої пластини"
|
||||
|
||||
@@ -8194,6 +8261,40 @@ msgstr "Сторінка принтера"
|
||||
msgid "Synchronize AMS Filament Information"
|
||||
msgstr "Синхронізувати інформацію про філаменти з AMS"
|
||||
|
||||
msgid "OrcaCloud plugins required by the current preset are not installed:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Install Plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Local plugins required by the current preset are missing:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Find on OrcaCloud"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugins required by the current preset are not activated:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Activate Now"
|
||||
msgstr ""
|
||||
|
||||
msgid "The installed plugin does not provide the required capability — it may be outdated:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Preparing to install plugins..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Installing plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cancelling — finishing the current plugin..."
|
||||
msgstr ""
|
||||
|
||||
#, boost-format
|
||||
msgid "Installing %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plate Settings"
|
||||
msgstr "Параметри планшета"
|
||||
|
||||
@@ -9238,6 +9339,9 @@ msgstr ""
|
||||
msgid "Your filament grouping method in the sliced file is not optimal."
|
||||
msgstr ""
|
||||
|
||||
msgid "To ensure print quality, the drying temperature will be lowered during printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto Bed Leveling"
|
||||
msgstr "Авто-вирівнювання столу"
|
||||
|
||||
@@ -9958,6 +10062,12 @@ msgstr "Змінити роль екструзії G-код"
|
||||
msgid "Post-processing Scripts"
|
||||
msgstr "Сценарії постобробки"
|
||||
|
||||
msgid "Slicing Pipeline Plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin Configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Notes"
|
||||
msgstr "Примітки"
|
||||
|
||||
@@ -11094,6 +11204,9 @@ msgstr ""
|
||||
msgid "Switch between Prepare/Preview"
|
||||
msgstr "Переключення між Підготовка/Попередній перегляд"
|
||||
|
||||
msgid "Open actions speed dial"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plater"
|
||||
msgstr "Тарілка"
|
||||
|
||||
@@ -11955,6 +12068,9 @@ msgstr "Ключ API"
|
||||
msgid "HTTP digest"
|
||||
msgstr "HTTP-дайджест"
|
||||
|
||||
msgid "Configuration for the plugin capabilities this preset uses, overriding the global Capabilities configuration. Stored as a raw JSON array and edited through the dialog behind the button, never typed in directly."
|
||||
msgstr ""
|
||||
|
||||
msgid "Avoid crossing walls"
|
||||
msgstr "Уникати перетину стінок"
|
||||
|
||||
@@ -12156,7 +12272,7 @@ msgid ""
|
||||
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
|
||||
"Otherwise the provided angle will be used according to:\n"
|
||||
" - The absolute coordinates\n"
|
||||
" - The absolute coordinates + Model rotation: If Align direction to model is enabled\n"
|
||||
" - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
|
||||
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
|
||||
"\n"
|
||||
"Use 180° for zero absolute angle."
|
||||
@@ -12902,6 +13018,24 @@ msgid ""
|
||||
"WARNING: Lowering this value may negatively affect bed adhesion."
|
||||
msgstr ""
|
||||
|
||||
msgid "Top surface fill order"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
|
||||
"Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
|
||||
"Default uses shortest-path ordering, which may run in either direction."
|
||||
msgstr ""
|
||||
|
||||
msgid "Bottom surface fill order"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
|
||||
"Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
|
||||
"Default uses shortest-path ordering, which may run in either direction."
|
||||
msgstr ""
|
||||
|
||||
msgid "Internal solid infill pattern"
|
||||
msgstr "Шаблон внутрішнього суцільного заповнення"
|
||||
|
||||
@@ -14124,9 +14258,6 @@ msgid ""
|
||||
"Set to 0 to deactivate."
|
||||
msgstr ""
|
||||
|
||||
msgid "%"
|
||||
msgstr "%"
|
||||
|
||||
msgid "Time cost"
|
||||
msgstr "Вартість часу"
|
||||
|
||||
@@ -14814,6 +14945,9 @@ msgid ""
|
||||
"RRF: X and Y values are equal."
|
||||
msgstr ""
|
||||
|
||||
msgid "Hz"
|
||||
msgstr "Гц"
|
||||
|
||||
msgid "Y"
|
||||
msgstr "Y"
|
||||
|
||||
@@ -15089,6 +15223,15 @@ msgstr ""
|
||||
msgid "This G-code is inserted when the extrusion role is changed. It runs after the machine and filament extrusion role G-code."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugins Used"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin capabilities referenced by this preset, stored as name;uuid;capability."
|
||||
msgstr ""
|
||||
|
||||
msgid "Python plugin(s) invoked at each slicing pipeline step to read and modify intermediate slicing data, including a final G-code post-processing step. Research/experimental."
|
||||
msgstr ""
|
||||
|
||||
msgid "Printer type"
|
||||
msgstr "Тип принтера"
|
||||
|
||||
@@ -15157,6 +15300,15 @@ msgstr "Обсяг втягування перед протиранням"
|
||||
msgid "This is the length of fast retraction before a wipe, relative to retraction length."
|
||||
msgstr "Довжина швидкого втягування перед протиранням, відносно довжини втягування"
|
||||
|
||||
msgid "Retract amount after wipe"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The length of fast retraction after wipe, relative to retraction length.\n"
|
||||
"The value will be clamped by 100% minus the retract amount before the wipe value."
|
||||
msgstr ""
|
||||
|
||||
# TODO: Review, changed by lang refactor. PR 14254
|
||||
msgid "Retract on layer change"
|
||||
msgstr "Втягування при зміні шару"
|
||||
@@ -16166,16 +16318,6 @@ msgstr "Товщина верхньої оболонки"
|
||||
msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers."
|
||||
msgstr "Кількість верхніх суцільних шарів збільшується при розрізанні, якщо товщина, обчислена шарами верхньої оболонки, тонша за це значення. Це дозволяє уникнути занадто тонкої оболонки при невеликій висоті шару. 0 означає, що це налаштування вимкнено і товщина верхньої оболонки повністюобмежена верхніми шарами оболонки"
|
||||
|
||||
msgid "Anisotropic surfaces"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Anisotropic patterns on the top and bottom surfaces.\n"
|
||||
"Co-directional printing mode will be applied. For certain patterns, omni-directional filling provides color dispersion when using multi-colored or silk plastics.\n"
|
||||
"This option disable the gap fill.\n"
|
||||
"This option can increase a printing time."
|
||||
msgstr ""
|
||||
|
||||
msgid "Separated infills"
|
||||
msgstr ""
|
||||
|
||||
@@ -18001,9 +18143,6 @@ msgstr "Початок / Кінець"
|
||||
msgid "Frequency settings"
|
||||
msgstr "Налаштування частоти"
|
||||
|
||||
msgid "Hz"
|
||||
msgstr "Гц"
|
||||
|
||||
msgid "RepRap firmware uses the same frequency range for both axes."
|
||||
msgstr ""
|
||||
|
||||
@@ -18574,13 +18713,19 @@ msgid ""
|
||||
"\n"
|
||||
"\n"
|
||||
"Available nozzle profiles for this printer:"
|
||||
msgstr "\n\nДоступні профілі сопла для принтера:"
|
||||
msgstr ""
|
||||
"\n"
|
||||
"\n"
|
||||
"Доступні профілі сопла для принтера:"
|
||||
|
||||
msgid ""
|
||||
"\n"
|
||||
"\n"
|
||||
"Choose YES to switch existing preset:"
|
||||
msgstr "\n\nОберіть ТАК, щоб перемкнутися на існуючий пресет:"
|
||||
msgstr ""
|
||||
"\n"
|
||||
"\n"
|
||||
"Оберіть ТАК, щоб перемкнутися на існуючий пресет:"
|
||||
|
||||
msgid "Printer Created Successfully"
|
||||
msgstr "Створення принтера успішно завершено"
|
||||
@@ -19974,6 +20119,145 @@ msgstr "Перегляд архіву"
|
||||
msgid "Open File"
|
||||
msgstr "Відкрити файл"
|
||||
|
||||
msgid "AMS Dryness Control"
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament Drying Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Stopping"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to dry temporarily due to ..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying Error"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please check the Assistant for troubleshooting"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please remove and store the filament (as shown)."
|
||||
msgstr ""
|
||||
|
||||
msgid "The AMS can rotate the filament which is properly stored, providing better drying results."
|
||||
msgstr ""
|
||||
|
||||
msgid "Rotate spool when drying"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "amsdrying"
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying-Heating"
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying-Dehumidifying"
|
||||
msgstr ""
|
||||
|
||||
msgid " maximum drying temperature is "
|
||||
msgstr ""
|
||||
|
||||
msgid " minimum drying temperature is "
|
||||
msgstr ""
|
||||
|
||||
msgid "This filament may not be completely dried."
|
||||
msgstr ""
|
||||
|
||||
msgid "This AMS is currently printing. To ensure print quality, the drying temperature cannot exceed the recommended drying temperature."
|
||||
msgstr ""
|
||||
|
||||
msgid "The temperature shall not exceed the filament's heat distortion temperature"
|
||||
msgstr ""
|
||||
|
||||
msgid "Minimum time value cannot be less than 1."
|
||||
msgstr ""
|
||||
|
||||
msgid "Maximum time value cannot be greater than 24."
|
||||
msgstr ""
|
||||
|
||||
msgid "Insufficient power"
|
||||
msgstr ""
|
||||
|
||||
msgid " Too many AMS drying simultaneously. Please plug in the power or stop other drying processes before starting."
|
||||
msgstr ""
|
||||
|
||||
msgid "AMS is busy"
|
||||
msgstr ""
|
||||
|
||||
msgid " AMS is calibrating | reading RFID | loading/unloading material, please wait."
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament in AMS outlet"
|
||||
msgstr ""
|
||||
|
||||
msgid " The high drying temperature may cause AMS blockage, please unload first."
|
||||
msgstr ""
|
||||
|
||||
msgid "Initiating AMS drying"
|
||||
msgstr ""
|
||||
|
||||
msgid "Not supported in 2D mode"
|
||||
msgstr ""
|
||||
|
||||
msgid "Task in progress"
|
||||
msgstr ""
|
||||
|
||||
msgid " The AMS might be in use during Task."
|
||||
msgstr ""
|
||||
|
||||
msgid " Firmware update in progress, please wait..."
|
||||
msgstr ""
|
||||
|
||||
msgid " Please plug in the power and then use the drying function."
|
||||
msgstr ""
|
||||
|
||||
msgid " The high drying temperature may cause AMS blockage. Please unload the filament manually before proceeding."
|
||||
msgstr ""
|
||||
|
||||
msgid "System is busy"
|
||||
msgstr ""
|
||||
|
||||
msgid " Initiating other drying processes, please wait a few seconds..."
|
||||
msgstr ""
|
||||
|
||||
msgid "For better drying results, remove the filament and allow it to rotate."
|
||||
msgstr ""
|
||||
|
||||
msgid "The AMS will automatically rotate the stored filament slots to enhance the drying performance."
|
||||
msgstr ""
|
||||
|
||||
msgid "Alternatively, you can dry the filament without removing it."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unknown filaments will be treated as PLA."
|
||||
msgstr ""
|
||||
|
||||
msgid "Please store the filament marked with an exclamation mark."
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament left in the feeder during drying may soften because the drying temperature exceeds the softening point of materials like PLA and TPU."
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking adapter connection"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking filament status"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking drying presets"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking filament location"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking air intake"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking air vent"
|
||||
msgstr ""
|
||||
|
||||
msgid "The filament may not be compatible with the current machine settings. Generic filament presets will be used."
|
||||
msgstr "Цей філамент може бути несумісним з поточними налаштуваннями машини. Будуть використані пресети Generic філамента"
|
||||
|
||||
@@ -20296,6 +20580,12 @@ msgstr ""
|
||||
"Уникнення деформації\n"
|
||||
"Чи знаєте ви, що при друку матеріалами, схильними до деформації, такими як ABS, відповідне підвищення температури гарячого ліжка може зменшити ймовірність деформації?"
|
||||
|
||||
#~ msgid "°C"
|
||||
#~ msgstr "℃"
|
||||
|
||||
#~ msgid "%"
|
||||
#~ msgstr "%"
|
||||
|
||||
#~ msgctxt "Sync_Nozzle_AMS"
|
||||
#~ msgid "Cancel"
|
||||
#~ msgstr "Скасувати"
|
||||
|
||||
@@ -3,7 +3,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Orca Slicer\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-07-13 16:24-0300\n"
|
||||
"POT-Creation-Date: 2026-07-17 15:13-0300\n"
|
||||
"PO-Revision-Date: 2025-10-02 17:43+0700\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: hainguyen.ts13@gmail.com\n"
|
||||
@@ -1982,6 +1982,17 @@ msgstr "Đây là phiên bản mới nhất."
|
||||
msgid "Info"
|
||||
msgstr "Thông tin"
|
||||
|
||||
msgid "Loading Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Plugin %s is no longer available."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Plugin %s access is unauthorized."
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading printer & filament profiles"
|
||||
msgstr ""
|
||||
|
||||
@@ -2099,6 +2110,18 @@ msgstr ""
|
||||
msgid "Resolve cloud sync conflict"
|
||||
msgstr ""
|
||||
|
||||
msgid "Syncing your account…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Migrating presets…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Fetching plugins…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading user presets…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Retrieving printer information, please try again later."
|
||||
msgstr ""
|
||||
|
||||
@@ -2217,6 +2240,21 @@ msgstr ""
|
||||
msgid "*"
|
||||
msgstr "*"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"Failed to open the Plugins dialog:\n"
|
||||
"%s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to open the Plugins dialog (unknown error)."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin Terminal"
|
||||
msgstr ""
|
||||
|
||||
msgid "Changing application language"
|
||||
msgstr "Đang thay đổi ngôn ngữ ứng dụng"
|
||||
|
||||
@@ -5023,6 +5061,28 @@ msgstr "Định dạng không hợp lệ. Mong đợi định dạng vector: \"%
|
||||
msgid "N/A"
|
||||
msgstr ""
|
||||
|
||||
msgid "System agents"
|
||||
msgstr ""
|
||||
|
||||
msgid "No plugin selected"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Select plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Remove plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configure"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Configure (%d)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Pick"
|
||||
msgstr "Chọn"
|
||||
|
||||
@@ -5188,9 +5248,6 @@ msgstr ""
|
||||
msgid "Fan speed"
|
||||
msgstr "Tốc độ quạt"
|
||||
|
||||
msgid "°C"
|
||||
msgstr "°C"
|
||||
|
||||
msgid "Time"
|
||||
msgstr "Thời gian"
|
||||
|
||||
@@ -7211,6 +7268,14 @@ msgctxt "Layers"
|
||||
msgid "Bottom"
|
||||
msgstr "Dưới"
|
||||
|
||||
msgid "Plugin Selection"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"No plugins capabilities available for this type.\n"
|
||||
"Enable or install some to use."
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable detection of build plate position"
|
||||
msgstr "Bật phát hiện vị trí bàn in"
|
||||
|
||||
@@ -8113,6 +8178,40 @@ msgstr ""
|
||||
msgid "Synchronize AMS Filament Information"
|
||||
msgstr ""
|
||||
|
||||
msgid "OrcaCloud plugins required by the current preset are not installed:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Install Plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Local plugins required by the current preset are missing:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Find on OrcaCloud"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugins required by the current preset are not activated:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Activate Now"
|
||||
msgstr ""
|
||||
|
||||
msgid "The installed plugin does not provide the required capability — it may be outdated:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Preparing to install plugins..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Installing plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cancelling — finishing the current plugin..."
|
||||
msgstr ""
|
||||
|
||||
#, boost-format
|
||||
msgid "Installing %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plate Settings"
|
||||
msgstr "Cài đặt bản"
|
||||
|
||||
@@ -9154,6 +9253,9 @@ msgstr ""
|
||||
msgid "Your filament grouping method in the sliced file is not optimal."
|
||||
msgstr ""
|
||||
|
||||
msgid "To ensure print quality, the drying temperature will be lowered during printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto Bed Leveling"
|
||||
msgstr ""
|
||||
|
||||
@@ -9873,6 +9975,12 @@ msgstr "G-code thay đổi vai trò đùn"
|
||||
msgid "Post-processing Scripts"
|
||||
msgstr "Script hậu xử lý"
|
||||
|
||||
msgid "Slicing Pipeline Plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin Configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Notes"
|
||||
msgstr "Ghi chú"
|
||||
|
||||
@@ -10989,6 +11097,9 @@ msgstr ""
|
||||
msgid "Switch between Prepare/Preview"
|
||||
msgstr "Chuyển đổi giữa Chuẩn bị/Xem trước"
|
||||
|
||||
msgid "Open actions speed dial"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plater"
|
||||
msgstr "Bàn in"
|
||||
|
||||
@@ -11849,6 +11960,9 @@ msgstr "Khóa API"
|
||||
msgid "HTTP digest"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configuration for the plugin capabilities this preset uses, overriding the global Capabilities configuration. Stored as a raw JSON array and edited through the dialog behind the button, never typed in directly."
|
||||
msgstr ""
|
||||
|
||||
msgid "Avoid crossing walls"
|
||||
msgstr "Tránh đi qua thành"
|
||||
|
||||
@@ -12795,6 +12909,24 @@ msgstr ""
|
||||
"Mật độ lớp bề mặt dưới. Dành cho mục đích thẩm mỹ hoặc chức năng , không phải để sửa các vấn đề như đùn dư.\n"
|
||||
"CẢNH BÁO: Giảm giá trị này có thể ảnh hưởng tiêu cực đến độ bám dính bàn in."
|
||||
|
||||
msgid "Top surface fill order"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
|
||||
"Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
|
||||
"Default uses shortest-path ordering, which may run in either direction."
|
||||
msgstr ""
|
||||
|
||||
msgid "Bottom surface fill order"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
|
||||
"Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
|
||||
"Default uses shortest-path ordering, which may run in either direction."
|
||||
msgstr ""
|
||||
|
||||
msgid "Internal solid infill pattern"
|
||||
msgstr "Mẫu infill đặc bên trong"
|
||||
|
||||
@@ -14021,9 +14153,6 @@ msgid ""
|
||||
"Set to 0 to deactivate."
|
||||
msgstr ""
|
||||
|
||||
msgid "%"
|
||||
msgstr "%"
|
||||
|
||||
msgid "Time cost"
|
||||
msgstr "Chi phí thời gian"
|
||||
|
||||
@@ -14709,6 +14838,9 @@ msgid ""
|
||||
"RRF: X and Y values are equal."
|
||||
msgstr ""
|
||||
|
||||
msgid "Hz"
|
||||
msgstr "Hz"
|
||||
|
||||
msgid "Y"
|
||||
msgstr "Y"
|
||||
|
||||
@@ -14983,6 +15115,15 @@ msgstr ""
|
||||
msgid "This G-code is inserted when the extrusion role is changed. It runs after the machine and filament extrusion role G-code."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugins Used"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin capabilities referenced by this preset, stored as name;uuid;capability."
|
||||
msgstr ""
|
||||
|
||||
msgid "Python plugin(s) invoked at each slicing pipeline step to read and modify intermediate slicing data, including a final G-code post-processing step. Research/experimental."
|
||||
msgstr ""
|
||||
|
||||
msgid "Printer type"
|
||||
msgstr "Loại máy in"
|
||||
|
||||
@@ -15051,6 +15192,15 @@ msgstr "Lượng rút trước khi lau"
|
||||
msgid "This is the length of fast retraction before a wipe, relative to retraction length."
|
||||
msgstr "Độ dài của rút nhanh trước khi lau, tương đối với độ dài rút."
|
||||
|
||||
msgid "Retract amount after wipe"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The length of fast retraction after wipe, relative to retraction length.\n"
|
||||
"The value will be clamped by 100% minus the retract amount before the wipe value."
|
||||
msgstr ""
|
||||
|
||||
# TODO: Review, changed by lang refactor. PR 14254
|
||||
msgid "Retract on layer change"
|
||||
msgstr "Rút khi thay đổi lớp"
|
||||
@@ -16055,16 +16205,6 @@ msgstr "Độ dày vỏ trên"
|
||||
msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers."
|
||||
msgstr "Số lượng lớp đặc trên được tăng lên khi slice nếu độ dày được tính bởi lớp vỏ trên mỏng hơn giá trị này. Điều này có thể tránh vỏ quá mỏng khi chiều cao lớp nhỏ. 0 có nghĩa là cài đặt này bị tắt và độ dày vỏ trên được xác định tuyệt đối bởi lớp vỏ trên."
|
||||
|
||||
msgid "Anisotropic surfaces"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Anisotropic patterns on the top and bottom surfaces.\n"
|
||||
"Co-directional printing mode will be applied. For certain patterns, omni-directional filling provides color dispersion when using multi-colored or silk plastics.\n"
|
||||
"This option disable the gap fill.\n"
|
||||
"This option can increase a printing time."
|
||||
msgstr ""
|
||||
|
||||
msgid "Separated infills"
|
||||
msgstr ""
|
||||
|
||||
@@ -17894,9 +18034,6 @@ msgstr "Bắt đầu / Kết thúc"
|
||||
msgid "Frequency settings"
|
||||
msgstr "Cài đặt tần số"
|
||||
|
||||
msgid "Hz"
|
||||
msgstr "Hz"
|
||||
|
||||
msgid "RepRap firmware uses the same frequency range for both axes."
|
||||
msgstr ""
|
||||
|
||||
@@ -19864,6 +20001,145 @@ msgstr ""
|
||||
msgid "Open File"
|
||||
msgstr ""
|
||||
|
||||
msgid "AMS Dryness Control"
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament Drying Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Stopping"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to dry temporarily due to ..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying Error"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please check the Assistant for troubleshooting"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please remove and store the filament (as shown)."
|
||||
msgstr ""
|
||||
|
||||
msgid "The AMS can rotate the filament which is properly stored, providing better drying results."
|
||||
msgstr ""
|
||||
|
||||
msgid "Rotate spool when drying"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "amsdrying"
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying-Heating"
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying-Dehumidifying"
|
||||
msgstr ""
|
||||
|
||||
msgid " maximum drying temperature is "
|
||||
msgstr ""
|
||||
|
||||
msgid " minimum drying temperature is "
|
||||
msgstr ""
|
||||
|
||||
msgid "This filament may not be completely dried."
|
||||
msgstr ""
|
||||
|
||||
msgid "This AMS is currently printing. To ensure print quality, the drying temperature cannot exceed the recommended drying temperature."
|
||||
msgstr ""
|
||||
|
||||
msgid "The temperature shall not exceed the filament's heat distortion temperature"
|
||||
msgstr ""
|
||||
|
||||
msgid "Minimum time value cannot be less than 1."
|
||||
msgstr ""
|
||||
|
||||
msgid "Maximum time value cannot be greater than 24."
|
||||
msgstr ""
|
||||
|
||||
msgid "Insufficient power"
|
||||
msgstr ""
|
||||
|
||||
msgid " Too many AMS drying simultaneously. Please plug in the power or stop other drying processes before starting."
|
||||
msgstr ""
|
||||
|
||||
msgid "AMS is busy"
|
||||
msgstr ""
|
||||
|
||||
msgid " AMS is calibrating | reading RFID | loading/unloading material, please wait."
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament in AMS outlet"
|
||||
msgstr ""
|
||||
|
||||
msgid " The high drying temperature may cause AMS blockage, please unload first."
|
||||
msgstr ""
|
||||
|
||||
msgid "Initiating AMS drying"
|
||||
msgstr ""
|
||||
|
||||
msgid "Not supported in 2D mode"
|
||||
msgstr ""
|
||||
|
||||
msgid "Task in progress"
|
||||
msgstr ""
|
||||
|
||||
msgid " The AMS might be in use during Task."
|
||||
msgstr ""
|
||||
|
||||
msgid " Firmware update in progress, please wait..."
|
||||
msgstr ""
|
||||
|
||||
msgid " Please plug in the power and then use the drying function."
|
||||
msgstr ""
|
||||
|
||||
msgid " The high drying temperature may cause AMS blockage. Please unload the filament manually before proceeding."
|
||||
msgstr ""
|
||||
|
||||
msgid "System is busy"
|
||||
msgstr ""
|
||||
|
||||
msgid " Initiating other drying processes, please wait a few seconds..."
|
||||
msgstr ""
|
||||
|
||||
msgid "For better drying results, remove the filament and allow it to rotate."
|
||||
msgstr ""
|
||||
|
||||
msgid "The AMS will automatically rotate the stored filament slots to enhance the drying performance."
|
||||
msgstr ""
|
||||
|
||||
msgid "Alternatively, you can dry the filament without removing it."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unknown filaments will be treated as PLA."
|
||||
msgstr ""
|
||||
|
||||
msgid "Please store the filament marked with an exclamation mark."
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament left in the feeder during drying may soften because the drying temperature exceeds the softening point of materials like PLA and TPU."
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking adapter connection"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking filament status"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking drying presets"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking filament location"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking air intake"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking air vent"
|
||||
msgstr ""
|
||||
|
||||
msgid "The filament may not be compatible with the current machine settings. Generic filament presets will be used."
|
||||
msgstr ""
|
||||
|
||||
@@ -20186,6 +20462,12 @@ msgstr ""
|
||||
"Tránh cong vênh\n"
|
||||
"Bạn có biết rằng khi in vật liệu dễ cong vênh như ABS, tăng nhiệt độ bàn nóng một cách thích hợp có thể giảm xác suất cong vênh không?"
|
||||
|
||||
#~ msgid "°C"
|
||||
#~ msgstr "°C"
|
||||
|
||||
#~ msgid "%"
|
||||
#~ msgstr "%"
|
||||
|
||||
#~ msgctxt "Sync_Nozzle_AMS"
|
||||
#~ msgid "Cancel"
|
||||
#~ msgstr "Hủy"
|
||||
|
||||
@@ -6,7 +6,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Slic3rPE\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-07-13 16:24-0300\n"
|
||||
"POT-Creation-Date: 2026-07-17 15:13-0300\n"
|
||||
"PO-Revision-Date: 2026-06-11 12:37-0300\n"
|
||||
"Last-Translator: Handle <mail@bysb.net>\n"
|
||||
"Language-Team: \n"
|
||||
@@ -1980,6 +1980,17 @@ msgstr "已经是最新版本。"
|
||||
msgid "Info"
|
||||
msgstr "信息"
|
||||
|
||||
msgid "Loading Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Plugin %s is no longer available."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Plugin %s access is unauthorized."
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading printer & filament profiles"
|
||||
msgstr "正在加载打印机和耗材配置文件"
|
||||
|
||||
@@ -2099,6 +2110,18 @@ msgstr ""
|
||||
msgid "Resolve cloud sync conflict"
|
||||
msgstr "解决云同步冲突"
|
||||
|
||||
msgid "Syncing your account…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Migrating presets…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Fetching plugins…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading user presets…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Retrieving printer information, please try again later."
|
||||
msgstr "正在获取打印机信息,请稍后重试。"
|
||||
|
||||
@@ -2229,6 +2252,21 @@ msgstr ""
|
||||
msgid "*"
|
||||
msgstr "*"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"Failed to open the Plugins dialog:\n"
|
||||
"%s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to open the Plugins dialog (unknown error)."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin Terminal"
|
||||
msgstr ""
|
||||
|
||||
msgid "Changing application language"
|
||||
msgstr "正在为应用程序切换语言"
|
||||
|
||||
@@ -5036,6 +5074,28 @@ msgstr "无效格式,应该是\"%1%\"这种数组格式"
|
||||
msgid "N/A"
|
||||
msgstr "不适用"
|
||||
|
||||
msgid "System agents"
|
||||
msgstr ""
|
||||
|
||||
msgid "No plugin selected"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Select plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Remove plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configure"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Configure (%d)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Pick"
|
||||
msgstr "选择"
|
||||
|
||||
@@ -5201,9 +5261,6 @@ msgstr "流量"
|
||||
msgid "Fan speed"
|
||||
msgstr "风扇速度"
|
||||
|
||||
msgid "°C"
|
||||
msgstr "°C"
|
||||
|
||||
msgid "Time"
|
||||
msgstr "时间"
|
||||
|
||||
@@ -7225,6 +7282,14 @@ msgctxt "Layers"
|
||||
msgid "Bottom"
|
||||
msgstr "底部"
|
||||
|
||||
msgid "Plugin Selection"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"No plugins capabilities available for this type.\n"
|
||||
"Enable or install some to use."
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable detection of build plate position"
|
||||
msgstr "启用打印板位置检测"
|
||||
|
||||
@@ -8123,6 +8188,40 @@ msgstr "设备页面"
|
||||
msgid "Synchronize AMS Filament Information"
|
||||
msgstr "同步 AMS 耗材丝信息"
|
||||
|
||||
msgid "OrcaCloud plugins required by the current preset are not installed:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Install Plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Local plugins required by the current preset are missing:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Find on OrcaCloud"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugins required by the current preset are not activated:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Activate Now"
|
||||
msgstr ""
|
||||
|
||||
msgid "The installed plugin does not provide the required capability — it may be outdated:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Preparing to install plugins..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Installing plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cancelling — finishing the current plugin..."
|
||||
msgstr ""
|
||||
|
||||
#, boost-format
|
||||
msgid "Installing %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plate Settings"
|
||||
msgstr "盘参数设置"
|
||||
|
||||
@@ -9190,6 +9289,9 @@ msgstr "多色外置"
|
||||
msgid "Your filament grouping method in the sliced file is not optimal."
|
||||
msgstr "您在切片文件中的耗材丝分组方法不是最佳的。"
|
||||
|
||||
msgid "To ensure print quality, the drying temperature will be lowered during printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto Bed Leveling"
|
||||
msgstr "自动床调平"
|
||||
|
||||
@@ -9920,6 +10022,12 @@ msgstr "挤出类型更换G-code"
|
||||
msgid "Post-processing Scripts"
|
||||
msgstr "后处理脚本"
|
||||
|
||||
msgid "Slicing Pipeline Plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin Configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Notes"
|
||||
msgstr "注释"
|
||||
|
||||
@@ -11070,6 +11178,9 @@ msgstr "切换对象/零件的可打印状态"
|
||||
msgid "Switch between Prepare/Preview"
|
||||
msgstr "准备/预览之间的切换"
|
||||
|
||||
msgid "Open actions speed dial"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plater"
|
||||
msgstr "准备"
|
||||
|
||||
@@ -11937,6 +12048,9 @@ msgstr "API秘钥"
|
||||
msgid "HTTP digest"
|
||||
msgstr "HTTP摘要"
|
||||
|
||||
msgid "Configuration for the plugin capabilities this preset uses, overriding the global Capabilities configuration. Stored as a raw JSON array and edited through the dialog behind the button, never typed in directly."
|
||||
msgstr ""
|
||||
|
||||
msgid "Avoid crossing walls"
|
||||
msgstr "避免跨越外墙"
|
||||
|
||||
@@ -12940,6 +13054,24 @@ msgstr ""
|
||||
"此功能是为了美观或功能性目的,而是为了解决过量挤出等问题。\n"
|
||||
"警告:降低此值会对热床粘接力产生负面影响。"
|
||||
|
||||
msgid "Top surface fill order"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
|
||||
"Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
|
||||
"Default uses shortest-path ordering, which may run in either direction."
|
||||
msgstr ""
|
||||
|
||||
msgid "Bottom surface fill order"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
|
||||
"Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
|
||||
"Default uses shortest-path ordering, which may run in either direction."
|
||||
msgstr ""
|
||||
|
||||
msgid "Internal solid infill pattern"
|
||||
msgstr "内部实心填充图案"
|
||||
|
||||
@@ -14204,9 +14336,6 @@ msgstr ""
|
||||
"如果您的固件已经在低于某阈值时禁用风扇(例如 Klipper 的 [fan] off_below: 0.10 会在指令占空比低于 10% 时关闭风扇),那么此选项与固件阈值最好设置为相同的值。使二者匹配(例如 Klipper 中 off_below: 0.10、此处为 10%)可确保切片软件绝不会发出会被固件悄然丢弃的非零值,且风扇绝不会收到低于其实际可启动转速的值。\n"
|
||||
"设置为 0 以停用。"
|
||||
|
||||
msgid "%"
|
||||
msgstr "%"
|
||||
|
||||
msgid "Time cost"
|
||||
msgstr "耗时"
|
||||
|
||||
@@ -14905,6 +15034,9 @@ msgstr ""
|
||||
"要禁用输入整形,请使用“禁用”类型。\n"
|
||||
"RRF:X 和 Y 的值相等。"
|
||||
|
||||
msgid "Hz"
|
||||
msgstr "赫兹"
|
||||
|
||||
msgid "Y"
|
||||
msgstr "Y"
|
||||
|
||||
@@ -15188,6 +15320,15 @@ msgstr "挤出类型更换 G-code(工艺)"
|
||||
msgid "This G-code is inserted when the extrusion role is changed. It runs after the machine and filament extrusion role G-code."
|
||||
msgstr "当挤出类型发生变化时插入此 G-code。它在机器和耗材的挤出类型更换 G-code 之后运行。"
|
||||
|
||||
msgid "Plugins Used"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin capabilities referenced by this preset, stored as name;uuid;capability."
|
||||
msgstr ""
|
||||
|
||||
msgid "Python plugin(s) invoked at each slicing pipeline step to read and modify intermediate slicing data, including a final G-code post-processing step. Research/experimental."
|
||||
msgstr ""
|
||||
|
||||
msgid "Printer type"
|
||||
msgstr "打印机类型"
|
||||
|
||||
@@ -15256,6 +15397,15 @@ msgstr "擦拭前的回抽量"
|
||||
msgid "This is the length of fast retraction before a wipe, relative to retraction length."
|
||||
msgstr "擦拭之前的回抽长度,用总回抽长度的百分比表示。"
|
||||
|
||||
msgid "Retract amount after wipe"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The length of fast retraction after wipe, relative to retraction length.\n"
|
||||
"The value will be clamped by 100% minus the retract amount before the wipe value."
|
||||
msgstr ""
|
||||
|
||||
# TODO: Review, changed by lang refactor. PR 14254
|
||||
msgid "Retract on layer change"
|
||||
msgstr "换层时回抽"
|
||||
@@ -16269,16 +16419,6 @@ msgstr "顶部壳体厚度"
|
||||
msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers."
|
||||
msgstr "如果由顶部壳体层数算出的厚度小于这个数值,那么切片时将自动增加顶部壳体层数。这能够避免当层高很小时,顶部壳体过薄。0 表示关闭这个设置,同时顶部壳体的厚度完全由顶部壳体层数决定"
|
||||
|
||||
msgid "Anisotropic surfaces"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Anisotropic patterns on the top and bottom surfaces.\n"
|
||||
"Co-directional printing mode will be applied. For certain patterns, omni-directional filling provides color dispersion when using multi-colored or silk plastics.\n"
|
||||
"This option disable the gap fill.\n"
|
||||
"This option can increase a printing time."
|
||||
msgstr ""
|
||||
|
||||
msgid "Separated infills"
|
||||
msgstr ""
|
||||
|
||||
@@ -18112,9 +18252,6 @@ msgstr "开始 / 结束"
|
||||
msgid "Frequency settings"
|
||||
msgstr "频率设置"
|
||||
|
||||
msgid "Hz"
|
||||
msgstr "赫兹"
|
||||
|
||||
msgid "RepRap firmware uses the same frequency range for both axes."
|
||||
msgstr "RepRap 固件将对两个轴使用相同的频率范围。"
|
||||
|
||||
@@ -20103,6 +20240,145 @@ msgstr "存档预览"
|
||||
msgid "Open File"
|
||||
msgstr "打开文件"
|
||||
|
||||
msgid "AMS Dryness Control"
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament Drying Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Stopping"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to dry temporarily due to ..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying Error"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please check the Assistant for troubleshooting"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please remove and store the filament (as shown)."
|
||||
msgstr ""
|
||||
|
||||
msgid "The AMS can rotate the filament which is properly stored, providing better drying results."
|
||||
msgstr ""
|
||||
|
||||
msgid "Rotate spool when drying"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "amsdrying"
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying-Heating"
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying-Dehumidifying"
|
||||
msgstr ""
|
||||
|
||||
msgid " maximum drying temperature is "
|
||||
msgstr ""
|
||||
|
||||
msgid " minimum drying temperature is "
|
||||
msgstr ""
|
||||
|
||||
msgid "This filament may not be completely dried."
|
||||
msgstr ""
|
||||
|
||||
msgid "This AMS is currently printing. To ensure print quality, the drying temperature cannot exceed the recommended drying temperature."
|
||||
msgstr ""
|
||||
|
||||
msgid "The temperature shall not exceed the filament's heat distortion temperature"
|
||||
msgstr ""
|
||||
|
||||
msgid "Minimum time value cannot be less than 1."
|
||||
msgstr ""
|
||||
|
||||
msgid "Maximum time value cannot be greater than 24."
|
||||
msgstr ""
|
||||
|
||||
msgid "Insufficient power"
|
||||
msgstr ""
|
||||
|
||||
msgid " Too many AMS drying simultaneously. Please plug in the power or stop other drying processes before starting."
|
||||
msgstr ""
|
||||
|
||||
msgid "AMS is busy"
|
||||
msgstr ""
|
||||
|
||||
msgid " AMS is calibrating | reading RFID | loading/unloading material, please wait."
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament in AMS outlet"
|
||||
msgstr ""
|
||||
|
||||
msgid " The high drying temperature may cause AMS blockage, please unload first."
|
||||
msgstr ""
|
||||
|
||||
msgid "Initiating AMS drying"
|
||||
msgstr ""
|
||||
|
||||
msgid "Not supported in 2D mode"
|
||||
msgstr ""
|
||||
|
||||
msgid "Task in progress"
|
||||
msgstr ""
|
||||
|
||||
msgid " The AMS might be in use during Task."
|
||||
msgstr ""
|
||||
|
||||
msgid " Firmware update in progress, please wait..."
|
||||
msgstr ""
|
||||
|
||||
msgid " Please plug in the power and then use the drying function."
|
||||
msgstr ""
|
||||
|
||||
msgid " The high drying temperature may cause AMS blockage. Please unload the filament manually before proceeding."
|
||||
msgstr ""
|
||||
|
||||
msgid "System is busy"
|
||||
msgstr ""
|
||||
|
||||
msgid " Initiating other drying processes, please wait a few seconds..."
|
||||
msgstr ""
|
||||
|
||||
msgid "For better drying results, remove the filament and allow it to rotate."
|
||||
msgstr ""
|
||||
|
||||
msgid "The AMS will automatically rotate the stored filament slots to enhance the drying performance."
|
||||
msgstr ""
|
||||
|
||||
msgid "Alternatively, you can dry the filament without removing it."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unknown filaments will be treated as PLA."
|
||||
msgstr ""
|
||||
|
||||
msgid "Please store the filament marked with an exclamation mark."
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament left in the feeder during drying may soften because the drying temperature exceeds the softening point of materials like PLA and TPU."
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking adapter connection"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking filament status"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking drying presets"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking filament location"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking air intake"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking air vent"
|
||||
msgstr ""
|
||||
|
||||
msgid "The filament may not be compatible with the current machine settings. Generic filament presets will be used."
|
||||
msgstr "此耗材可能于当前设备设置不兼容,将使用通用耗材预设。"
|
||||
|
||||
@@ -20427,6 +20703,12 @@ msgstr ""
|
||||
"避免翘曲\n"
|
||||
"您知道吗?打印ABS这类易翘曲材料时,适当提高热床温度可以降低翘曲的概率。"
|
||||
|
||||
#~ msgid "°C"
|
||||
#~ msgstr "°C"
|
||||
|
||||
#~ msgid "%"
|
||||
#~ msgstr "%"
|
||||
|
||||
#~ msgid "Renders cast shadows on the plate in realistic view."
|
||||
#~ msgstr "在写实渲染中渲染投射到打印板上的阴影。"
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Orca Slicer\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-07-13 16:24-0300\n"
|
||||
"POT-Creation-Date: 2026-07-17 15:13-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"
|
||||
@@ -1982,6 +1982,17 @@ msgstr "已經是最新版本。"
|
||||
msgid "Info"
|
||||
msgstr "資訊"
|
||||
|
||||
msgid "Loading Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Plugin %s is no longer available."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Plugin %s access is unauthorized."
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading printer & filament profiles"
|
||||
msgstr "載入列印設備與線材設定檔"
|
||||
|
||||
@@ -2101,6 +2112,18 @@ msgstr ""
|
||||
msgid "Resolve cloud sync conflict"
|
||||
msgstr "解決雲端同步衝突"
|
||||
|
||||
msgid "Syncing your account…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Migrating presets…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Fetching plugins…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading user presets…"
|
||||
msgstr ""
|
||||
|
||||
msgid "Retrieving printer information, please try again later."
|
||||
msgstr "正在取得列印設備資訊,請稍後再試。"
|
||||
|
||||
@@ -2231,6 +2254,21 @@ msgstr ""
|
||||
msgid "*"
|
||||
msgstr "*"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"Failed to open the Plugins dialog:\n"
|
||||
"%s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to open the Plugins dialog (unknown error)."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin Terminal"
|
||||
msgstr ""
|
||||
|
||||
msgid "Changing application language"
|
||||
msgstr "正在為應用程式切換語言"
|
||||
|
||||
@@ -5078,6 +5116,28 @@ msgstr "無效格式,應該是「%1%」這種格式"
|
||||
msgid "N/A"
|
||||
msgstr "不適用"
|
||||
|
||||
msgid "System agents"
|
||||
msgstr ""
|
||||
|
||||
msgid "No plugin selected"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Select plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Remove plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configure"
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid "Configure (%d)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Pick"
|
||||
msgstr "選取"
|
||||
|
||||
@@ -5243,9 +5303,6 @@ msgstr "流量"
|
||||
msgid "Fan speed"
|
||||
msgstr "風扇速度"
|
||||
|
||||
msgid "°C"
|
||||
msgstr "°C"
|
||||
|
||||
msgid "Time"
|
||||
msgstr "時間"
|
||||
|
||||
@@ -7277,6 +7334,14 @@ msgctxt "Layers"
|
||||
msgid "Bottom"
|
||||
msgstr "底部"
|
||||
|
||||
msgid "Plugin Selection"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"No plugins capabilities available for this type.\n"
|
||||
"Enable or install some to use."
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable detection of build plate position"
|
||||
msgstr "啟用列印板位置偵測"
|
||||
|
||||
@@ -8178,6 +8243,40 @@ msgstr "設備頁面"
|
||||
msgid "Synchronize AMS Filament Information"
|
||||
msgstr "同步 AMS 線材資訊"
|
||||
|
||||
msgid "OrcaCloud plugins required by the current preset are not installed:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Install Plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Local plugins required by the current preset are missing:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Find on OrcaCloud"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugins required by the current preset are not activated:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Activate Now"
|
||||
msgstr ""
|
||||
|
||||
msgid "The installed plugin does not provide the required capability — it may be outdated:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Preparing to install plugins..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Installing plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cancelling — finishing the current plugin..."
|
||||
msgstr ""
|
||||
|
||||
#, boost-format
|
||||
msgid "Installing %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Plate Settings"
|
||||
msgstr "列印板參數設定"
|
||||
|
||||
@@ -9252,6 +9351,9 @@ msgstr "使用外部料盤進行多色列印"
|
||||
msgid "Your filament grouping method in the sliced file is not optimal."
|
||||
msgstr "切片檔案中的線材分組方式不是最佳選擇。"
|
||||
|
||||
msgid "To ensure print quality, the drying temperature will be lowered during printing."
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto Bed Leveling"
|
||||
msgstr "自動熱床調平"
|
||||
|
||||
@@ -9982,6 +10084,12 @@ msgstr "變更擠出機任務的 G-code"
|
||||
msgid "Post-processing Scripts"
|
||||
msgstr "後處理腳本"
|
||||
|
||||
msgid "Slicing Pipeline Plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin Configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Notes"
|
||||
msgstr "備註"
|
||||
|
||||
@@ -11131,6 +11239,9 @@ msgstr "切換物件/零件的可列印屬性"
|
||||
msgid "Switch between Prepare/Preview"
|
||||
msgstr "在準備/預覽模式之中切換"
|
||||
|
||||
msgid "Open actions speed dial"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plater"
|
||||
msgstr "準備"
|
||||
|
||||
@@ -11998,6 +12109,9 @@ msgstr "API 金鑰"
|
||||
msgid "HTTP digest"
|
||||
msgstr "HTTP 摘要"
|
||||
|
||||
msgid "Configuration for the plugin capabilities this preset uses, overriding the global Capabilities configuration. Stored as a raw JSON array and edited through the dialog behind the button, never typed in directly."
|
||||
msgstr ""
|
||||
|
||||
msgid "Avoid crossing walls"
|
||||
msgstr "避免跨越外牆"
|
||||
|
||||
@@ -13006,6 +13120,24 @@ msgstr ""
|
||||
"底面層的密度。此功能旨在實現美觀或功能需求,而非修正過擠等問題。\n"
|
||||
"警告:降低此數值可能會對熱床附著力產生負面影響"
|
||||
|
||||
msgid "Top surface fill order"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
|
||||
"Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
|
||||
"Default uses shortest-path ordering, which may run in either direction."
|
||||
msgstr ""
|
||||
|
||||
msgid "Bottom surface fill order"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
|
||||
"Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
|
||||
"Default uses shortest-path ordering, which may run in either direction."
|
||||
msgstr ""
|
||||
|
||||
msgid "Internal solid infill pattern"
|
||||
msgstr "內部實心填充圖案"
|
||||
|
||||
@@ -14255,9 +14387,6 @@ msgstr ""
|
||||
"如果您的韌體已經在低於某個閾值時停用風扇(例如 Klipper 的 [fan] off_below: 0.10 會在指令工作週期低於 10% 時關閉風扇),則此選項與韌體閾值最好設定為相同的值。讓兩者相符(例如 Klipper 中的 off_below: 0.10 與此處的 10%)可確保切片軟體永遠不會發出韌體會默默捨棄的非零值,且風扇永遠不會收到低於您已知它實際能啟動轉動的值。\n"
|
||||
"設定為 0 以停用。"
|
||||
|
||||
msgid "%"
|
||||
msgstr "%"
|
||||
|
||||
msgid "Time cost"
|
||||
msgstr "時間成本"
|
||||
|
||||
@@ -14960,6 +15089,9 @@ msgstr ""
|
||||
"若要停用輸入整形,請使用 Disable 類型。\n"
|
||||
"RRF:X 與 Y 值相等。"
|
||||
|
||||
msgid "Hz"
|
||||
msgstr "赫茲"
|
||||
|
||||
msgid "Y"
|
||||
msgstr "Y"
|
||||
|
||||
@@ -15249,6 +15381,15 @@ msgstr "變更擠出模式 G-code(列印參數)"
|
||||
msgid "This G-code is inserted when the extrusion role is changed. It runs after the machine and filament extrusion role G-code."
|
||||
msgstr "此 G-code 會在擠出模式變更時插入。它會在機器和線材擠出模式 G-code 之後執行。"
|
||||
|
||||
msgid "Plugins Used"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugin capabilities referenced by this preset, stored as name;uuid;capability."
|
||||
msgstr ""
|
||||
|
||||
msgid "Python plugin(s) invoked at each slicing pipeline step to read and modify intermediate slicing data, including a final G-code post-processing step. Research/experimental."
|
||||
msgstr ""
|
||||
|
||||
msgid "Printer type"
|
||||
msgstr "列印設備類型"
|
||||
|
||||
@@ -15317,6 +15458,15 @@ msgstr "擦拭前的回抽量"
|
||||
msgid "This is the length of fast retraction before a wipe, relative to retraction length."
|
||||
msgstr "擦拭之前的回抽長度,用總回抽長度的百分比表示"
|
||||
|
||||
msgid "Retract amount after wipe"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The length of fast retraction after wipe, relative to retraction length.\n"
|
||||
"The value will be clamped by 100% minus the retract amount before the wipe value."
|
||||
msgstr ""
|
||||
|
||||
# TODO: Review, changed by lang refactor. PR 14254
|
||||
msgid "Retract on layer change"
|
||||
msgstr "換層時回抽"
|
||||
@@ -16317,16 +16467,6 @@ msgstr "頂部外殼厚度"
|
||||
msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers."
|
||||
msgstr "當切片時,如果通過頂部殼層計算的厚度小於設定值,將自動增加頂部實心層的數量,以避免層高較小時頂部殼層過薄。若設為 0,則停用此功能,頂部殼層厚度完全由設定的頂部殼層數決定"
|
||||
|
||||
msgid "Anisotropic surfaces"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Anisotropic patterns on the top and bottom surfaces.\n"
|
||||
"Co-directional printing mode will be applied. For certain patterns, omni-directional filling provides color dispersion when using multi-colored or silk plastics.\n"
|
||||
"This option disable the gap fill.\n"
|
||||
"This option can increase a printing time."
|
||||
msgstr ""
|
||||
|
||||
msgid "Separated infills"
|
||||
msgstr ""
|
||||
|
||||
@@ -18156,9 +18296,6 @@ msgstr "開始 / 結束"
|
||||
msgid "Frequency settings"
|
||||
msgstr "頻率設定"
|
||||
|
||||
msgid "Hz"
|
||||
msgstr "赫茲"
|
||||
|
||||
msgid "RepRap firmware uses the same frequency range for both axes."
|
||||
msgstr "RepRap 韌體對兩個軸使用相同的頻率範圍。"
|
||||
|
||||
@@ -20153,6 +20290,145 @@ msgstr "封存預覽"
|
||||
msgid "Open File"
|
||||
msgstr "開啟檔案"
|
||||
|
||||
msgid "AMS Dryness Control"
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament Drying Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Stopping"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to dry temporarily due to ..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying Error"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please check the Assistant for troubleshooting"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please remove and store the filament (as shown)."
|
||||
msgstr ""
|
||||
|
||||
msgid "The AMS can rotate the filament which is properly stored, providing better drying results."
|
||||
msgstr ""
|
||||
|
||||
msgid "Rotate spool when drying"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "amsdrying"
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying-Heating"
|
||||
msgstr ""
|
||||
|
||||
msgid "Drying-Dehumidifying"
|
||||
msgstr ""
|
||||
|
||||
msgid " maximum drying temperature is "
|
||||
msgstr ""
|
||||
|
||||
msgid " minimum drying temperature is "
|
||||
msgstr ""
|
||||
|
||||
msgid "This filament may not be completely dried."
|
||||
msgstr ""
|
||||
|
||||
msgid "This AMS is currently printing. To ensure print quality, the drying temperature cannot exceed the recommended drying temperature."
|
||||
msgstr ""
|
||||
|
||||
msgid "The temperature shall not exceed the filament's heat distortion temperature"
|
||||
msgstr ""
|
||||
|
||||
msgid "Minimum time value cannot be less than 1."
|
||||
msgstr ""
|
||||
|
||||
msgid "Maximum time value cannot be greater than 24."
|
||||
msgstr ""
|
||||
|
||||
msgid "Insufficient power"
|
||||
msgstr ""
|
||||
|
||||
msgid " Too many AMS drying simultaneously. Please plug in the power or stop other drying processes before starting."
|
||||
msgstr ""
|
||||
|
||||
msgid "AMS is busy"
|
||||
msgstr ""
|
||||
|
||||
msgid " AMS is calibrating | reading RFID | loading/unloading material, please wait."
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament in AMS outlet"
|
||||
msgstr ""
|
||||
|
||||
msgid " The high drying temperature may cause AMS blockage, please unload first."
|
||||
msgstr ""
|
||||
|
||||
msgid "Initiating AMS drying"
|
||||
msgstr ""
|
||||
|
||||
msgid "Not supported in 2D mode"
|
||||
msgstr ""
|
||||
|
||||
msgid "Task in progress"
|
||||
msgstr ""
|
||||
|
||||
msgid " The AMS might be in use during Task."
|
||||
msgstr ""
|
||||
|
||||
msgid " Firmware update in progress, please wait..."
|
||||
msgstr ""
|
||||
|
||||
msgid " Please plug in the power and then use the drying function."
|
||||
msgstr ""
|
||||
|
||||
msgid " The high drying temperature may cause AMS blockage. Please unload the filament manually before proceeding."
|
||||
msgstr ""
|
||||
|
||||
msgid "System is busy"
|
||||
msgstr ""
|
||||
|
||||
msgid " Initiating other drying processes, please wait a few seconds..."
|
||||
msgstr ""
|
||||
|
||||
msgid "For better drying results, remove the filament and allow it to rotate."
|
||||
msgstr ""
|
||||
|
||||
msgid "The AMS will automatically rotate the stored filament slots to enhance the drying performance."
|
||||
msgstr ""
|
||||
|
||||
msgid "Alternatively, you can dry the filament without removing it."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unknown filaments will be treated as PLA."
|
||||
msgstr ""
|
||||
|
||||
msgid "Please store the filament marked with an exclamation mark."
|
||||
msgstr ""
|
||||
|
||||
msgid "Filament left in the feeder during drying may soften because the drying temperature exceeds the softening point of materials like PLA and TPU."
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking adapter connection"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking filament status"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking drying presets"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking filament location"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking air intake"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting: Checking air vent"
|
||||
msgstr ""
|
||||
|
||||
msgid "The filament may not be compatible with the current machine settings. Generic filament presets will be used."
|
||||
msgstr "線材可能與目前的列印設備設定不相容,將使用一般線材預設。"
|
||||
|
||||
@@ -20498,6 +20774,12 @@ msgstr ""
|
||||
"您知道嗎?當列印容易翹曲的材料(如 ABS)時,適當提高熱床溫度\n"
|
||||
"可以降低翹曲的機率。"
|
||||
|
||||
#~ msgid "°C"
|
||||
#~ msgstr "°C"
|
||||
|
||||
#~ msgid "%"
|
||||
#~ msgstr "%"
|
||||
|
||||
#~ msgid "Renders cast shadows on the plate in realistic view."
|
||||
#~ msgstr "在擬真檢視中於列印板上算繪投射陰影。"
|
||||
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
<svg width="117" height="88" viewBox="0 0 117 88" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_dev_hms_diag_loading)">
|
||||
<ellipse cx="58.5" cy="48.2667" rx="32.175" ry="32.2667" fill="#F2F2F2" stroke="#DBDBDB"/>
|
||||
<rect x="35.175" y="24.8662" width="46.65" height="46.8" rx="5" fill="#F7F7F7" stroke="#EBEBEB" stroke-width="6"/>
|
||||
<path d="M43.875 57.0665L52.4779 46.7998L62.1562 57.0665H43.875Z" fill="#DBDBDB"/>
|
||||
<path d="M51.1875 57.0671L62.8875 42.4004L76.05 57.0671H51.1875Z" fill="#EBEBEB"/>
|
||||
<ellipse cx="49.3595" cy="39.0998" rx="3.29063" ry="3.3" fill="#DBDBDB"/>
|
||||
<rect x="32.175" y="21.8662" width="52.65" height="52.8" rx="8" stroke="#DBDBDB"/>
|
||||
<ellipse cx="17.55" cy="68.7995" rx="3.65625" ry="3.66667" fill="#EBEBEB"/>
|
||||
<ellipse cx="24.1313" cy="28.4666" rx="2.19375" ry="2.2" fill="#EBEBEB"/>
|
||||
<ellipse cx="100.912" cy="35.0662" rx="2.19375" ry="2.2" fill="#EBEBEB"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_dev_hms_diag_loading">
|
||||
<rect width="117" height="88" fill="white"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.0 KiB |
@@ -1,3 +0,0 @@
|
||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M7.88802 4.48958C8.16145 4.76302 8.53124 4.91667 8.91927 4.91667H13C13.2292 4.91667 13.4167 5.10417 13.4167 5.33333V6.16667H2.58333V3.66667C2.58333 3.4375 2.77083 3.25 2.99999 3.25H6.47656C6.58593 3.25 6.6927 3.29427 6.77083 3.3724L7.88802 4.48958ZM2.58333 7.41667H13.4167V12C13.4167 12.2292 13.2292 12.4167 13 12.4167H2.99999C2.77083 12.4167 2.58333 12.2292 2.58333 12V7.41667ZM8.77343 3.60677L7.65364 2.48698C7.34114 2.17448 6.91666 2 6.47395 2H2.99999C2.08072 2 1.33333 2.7474 1.33333 3.66667V12C1.33333 12.9193 2.08072 13.6667 2.99999 13.6667H13C13.9193 13.6667 14.6667 12.9193 14.6667 12V5.33333C14.6667 4.41406 13.9193 3.66667 13 3.66667H8.91927C8.86458 3.66667 8.80989 3.64583 8.77083 3.60677H8.77343Z" fill="#009688"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 839 B |
@@ -1,3 +0,0 @@
|
||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M7.88802 4.48958C8.16145 4.76302 8.53124 4.91667 8.91927 4.91667H13C13.2292 4.91667 13.4167 5.10417 13.4167 5.33333V6.16667H2.58333V3.66667C2.58333 3.4375 2.77083 3.25 2.99999 3.25H6.47656C6.58593 3.25 6.6927 3.29427 6.77083 3.3724L7.88802 4.48958ZM2.58333 7.41667H13.4167V12C13.4167 12.2292 13.2292 12.4167 13 12.4167H2.99999C2.77083 12.4167 2.58333 12.2292 2.58333 12V7.41667ZM8.77343 3.60677L7.65364 2.48698C7.34114 2.17448 6.91666 2 6.47395 2H2.99999C2.08072 2 1.33333 2.7474 1.33333 3.66667V12C1.33333 12.9193 2.08072 13.6667 2.99999 13.6667H13C13.9193 13.6667 14.6667 12.9193 14.6667 12V5.33333C14.6667 4.41406 13.9193 3.66667 13 3.66667H8.91927C8.86458 3.66667 8.80989 3.64583 8.77083 3.60677H8.77343Z" fill="#6B6B6B"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 839 B |
@@ -1,3 +0,0 @@
|
||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M7.88802 4.48958C8.16145 4.76302 8.53124 4.91667 8.91927 4.91667H13C13.2292 4.91667 13.4167 5.10417 13.4167 5.33333V6.16667H2.58333V3.66667C2.58333 3.4375 2.77083 3.25 2.99999 3.25H6.47656C6.58593 3.25 6.6927 3.29427 6.77083 3.3724L7.88802 4.48958ZM2.58333 7.41667H13.4167V12C13.4167 12.2292 13.2292 12.4167 13 12.4167H2.99999C2.77083 12.4167 2.58333 12.2292 2.58333 12V7.41667ZM8.77343 3.60677L7.65364 2.48698C7.34114 2.17448 6.91666 2 6.47395 2H2.99999C2.08072 2 1.33333 2.7474 1.33333 3.66667V12C1.33333 12.9193 2.08072 13.6667 2.99999 13.6667H13C13.9193 13.6667 14.6667 12.9193 14.6667 12V5.33333C14.6667 4.41406 13.9193 3.66667 13 3.66667H8.91927C8.86458 3.66667 8.80989 3.64583 8.77083 3.60677H8.77343Z" fill="#262E30"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 839 B |
@@ -75,8 +75,7 @@
|
||||
"support_extrusion_cali": false,
|
||||
"support_user_preset": false,
|
||||
"support_refresh_nozzle": true,
|
||||
"support_ams_ext_mix_print": true,
|
||||
"support_print_check_firmware_for_tpu_left": true
|
||||
"support_ams_ext_mix_print": true
|
||||
},
|
||||
"model_id": "O1D",
|
||||
"support_wrapping_detection": true,
|
||||
|
||||
@@ -75,8 +75,7 @@
|
||||
"support_extrusion_cali": false,
|
||||
"support_user_preset": false,
|
||||
"support_refresh_nozzle": true,
|
||||
"support_ams_ext_mix_print": true,
|
||||
"support_print_check_firmware_for_tpu_left": true
|
||||
"support_ams_ext_mix_print": true
|
||||
},
|
||||
"model_id": "O1E",
|
||||
"auto_pa_cali_thumbnail_image": "fd_calibration_auto_multi_extruders",
|
||||
|
||||
@@ -23,7 +23,6 @@ set(SLIC3R_GUI_SOURCES
|
||||
GUI/AboutDialog.cpp
|
||||
GUI/AboutDialog.hpp
|
||||
GUI/AmsMappingPopup.cpp
|
||||
GUI/AmsMappingPopupUpdate.cpp
|
||||
GUI/AmsMappingPopup.hpp
|
||||
GUI/AMSMaterialsSetting.cpp
|
||||
GUI/AMSMaterialsSetting.hpp
|
||||
|
||||
@@ -42,7 +42,7 @@ static std::string get_humidity_level_img_path(int humidity_percent)
|
||||
}
|
||||
|
||||
if (wxGetApp().dark_mode()) {
|
||||
return "hum_level" + std::to_string(hum_level) + "_no_num_dark"; // Orca: use the dark-mode humidity glyph in dark mode
|
||||
return "hum_level" + std::to_string(hum_level) + "_no_num_dark";
|
||||
} else {
|
||||
return "hum_level" + std::to_string(hum_level) + "_no_num_light";
|
||||
}
|
||||
@@ -86,7 +86,7 @@ FilamentItemPanel::FilamentItemPanel(wxWindow* parent, const wxString& text, con
|
||||
: wxPanel(parent, id)
|
||||
, m_icon_name(icon_name)
|
||||
{
|
||||
SetBackgroundColour(wxColour("#F0F0F1")); // Orca: light-gray panel scheme (#F0F0F1 replaces REF #F7F7F7)
|
||||
SetBackgroundColour(wxColour("#F0F0F1")); // Light gray background
|
||||
SetMinSize(wxSize(FromDIP(64), FromDIP(106))); // Width: 64, Height: 106
|
||||
SetSize(wxSize(FromDIP(64), FromDIP(106))); // Fixed size
|
||||
|
||||
@@ -977,7 +977,7 @@ void AMSDryCtrWin::create()
|
||||
// set title icon
|
||||
SetBackgroundColour(StateColor::darkModeColorFor(*wxWHITE));
|
||||
this->SetDoubleBuffered(true);
|
||||
std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); // Orca: app title icon
|
||||
std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str();
|
||||
SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO));
|
||||
|
||||
SetSize(wxSize(FromDIP(700), FromDIP(500)));
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
#include "slic3r/GUI/wxExtensions.hpp"
|
||||
#include "slic3r/GUI/DeviceCore/DevFilaSystem.h"
|
||||
#include "slic3r/GUI/I18N.hpp" // Orca: explicit _L() catalog include
|
||||
#include "slic3r/GUI/I18N.hpp"
|
||||
|
||||
#include <chrono>
|
||||
#include <optional>
|
||||
|
||||
@@ -296,8 +296,11 @@ void AMSMaterialsSetting::create_panel_kn(wxWindow* parent)
|
||||
m_ratio_text->SetForegroundColour(wxColour(50, 58, 61));
|
||||
m_ratio_text->SetFont(Label::Head_14);
|
||||
|
||||
// Orca: link to the Orca Slicer pressure-advance wiki (region-agnostic).
|
||||
wxString link_url = "https://www.orcaslicer.com/wiki/pressure_advance_calib";
|
||||
std::string language = wxGetApp().app_config->get("language");
|
||||
wxString region = "en";
|
||||
if (language.find("zh") == 0)
|
||||
region = "zh";
|
||||
wxString link_url = wxString::Format("https://wiki.bambulab.com/%s/software/bambu-studio/calibration_pa", region);
|
||||
m_wiki_ctrl = new HyperLink(parent, _L("Wiki Guide"), link_url);
|
||||
cali_title_sizer->Add(m_ratio_text, 0, wxALIGN_CENTER_VERTICAL);
|
||||
cali_title_sizer->Add(m_wiki_ctrl, 0, wxALIGN_CENTER_VERTICAL);
|
||||
@@ -446,19 +449,9 @@ void AMSMaterialsSetting::update_filament_editing(bool is_printing)
|
||||
m_tip_readonly->Wrap(FromDIP(380));
|
||||
m_tip_readonly->Show(is_printing);
|
||||
}
|
||||
|
||||
if (m_view_only) { // Orca: view-only (2D laser/cut) — lock every edit control and hide apply/reset
|
||||
m_comboBox_filament->Enable(false);
|
||||
m_comboBox_cali_result->Enable(false);
|
||||
m_input_k_val->Enable(false);
|
||||
m_input_n_val->Enable(false);
|
||||
m_button_confirm->Hide();
|
||||
m_button_reset->Hide();
|
||||
}
|
||||
}
|
||||
|
||||
void AMSMaterialsSetting::on_select_reset(wxCommandEvent& event) {
|
||||
if (m_view_only) return; // Orca: view-only never commits
|
||||
MessageDialog msg_dlg(nullptr, _L("Are you sure you want to clear the filament information?"), wxEmptyString, wxICON_WARNING | wxOK | wxCANCEL);
|
||||
auto result = msg_dlg.ShowModal();
|
||||
if (result != wxID_OK)
|
||||
@@ -626,8 +619,6 @@ void AMSMaterialsSetting::on_select_ok(wxCommandEvent &event)
|
||||
if (!obj)
|
||||
return;
|
||||
|
||||
if (m_view_only) return; // Orca: view-only never commits
|
||||
|
||||
//get filament id
|
||||
ams_filament_id = "";
|
||||
ams_setting_id = "";
|
||||
@@ -839,7 +830,6 @@ void AMSMaterialsSetting::on_picker_color(wxCommandEvent& event)
|
||||
|
||||
void AMSMaterialsSetting::on_clr_picker(wxMouseEvent &event)
|
||||
{
|
||||
if (m_view_only) return; // Orca: view-only disables color editing
|
||||
if(!m_is_third)
|
||||
return;
|
||||
|
||||
|
||||
@@ -124,9 +124,6 @@ public:
|
||||
std::string ams_setting_id;
|
||||
|
||||
bool m_is_third;
|
||||
// Orca: view-only mode (laser/cut). When set, the dialog is inspectable but every
|
||||
// editing control is disabled and no command is sent.
|
||||
bool m_view_only = false;
|
||||
wxString m_brand_filament;
|
||||
wxString m_brand_sn;
|
||||
wxString m_brand_tmp;
|
||||
@@ -186,7 +183,6 @@ protected:
|
||||
|
||||
int m_pa_cali_select_id = 0;
|
||||
|
||||
// Orca: native wxComboBox on macOS (the custom ComboBox mis-renders the filament dropdown there)
|
||||
#ifdef __APPLE__
|
||||
wxComboBox *m_comboBox_filament;
|
||||
#else
|
||||
|
||||
@@ -272,7 +272,7 @@ void AMSSetting::create()
|
||||
m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(10));
|
||||
m_sizer_main->Add(m_static_ams_settings, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(24));
|
||||
m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(10));
|
||||
m_sizer_main->Add(m_panel_body, 1, wxBOTTOM | wxLEFT | wxRIGHT | wxEXPAND, FromDIP(24)); // Orca: wxBOTTOM (REF uses the wxEdge enum by mistake)
|
||||
m_sizer_main->Add(m_panel_body, 1, wxBottom | wxLEFT | wxRIGHT | wxEXPAND, FromDIP(24));
|
||||
|
||||
this->SetSizer(m_sizer_main);
|
||||
this->Layout();
|
||||
@@ -644,7 +644,7 @@ void AMSSettingTypePanel::Update(const MachineObject* obj)
|
||||
}
|
||||
|
||||
if (ptr->IsSwitching()) {
|
||||
int display_percent = obj->get_upgrade_percent(); // Orca: read upgrade progress via the kept MachineObject accessor
|
||||
int display_percent = obj->get_upgrade_percent();
|
||||
if (display_percent == 100 || display_percent == 0) {
|
||||
display_percent = 1;// special case, sometimes it's switching but percent is 0 or 100
|
||||
}
|
||||
@@ -735,7 +735,6 @@ void AMSSettingTypePanel::OnAmsTypeChanged(wxCommandEvent& event)
|
||||
event.Skip();
|
||||
}
|
||||
|
||||
// Orca: AMSSettingArrangeAMSOrder impl kept compiled-out (feature intentionally not shipped).
|
||||
#if 0 /*used option*/
|
||||
AMSSettingArrangeAMSOrder::AMSSettingArrangeAMSOrder(wxWindow* parent)
|
||||
: wxPanel(parent)
|
||||
|
||||
@@ -129,7 +129,6 @@ private:
|
||||
AnimaIcon* m_switching_icon;
|
||||
};
|
||||
|
||||
// Orca: the firmware AMS-reorder ("Arrange AMS Order") panel is intentionally not shipped.
|
||||
#if 0
|
||||
class AMSSettingArrangeAMSOrder : public wxPanel
|
||||
{
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -34,28 +34,23 @@
|
||||
#include "Widgets/CheckBox.hpp"
|
||||
#include "Widgets/ComboBox.hpp"
|
||||
#include "Widgets/ScrolledWindow.hpp"
|
||||
#include "Widgets/SwitchButton.hpp" // Orca: SwitchBoard (m_nozzle_btn_panel); not transitively available here
|
||||
#include "Widgets/SwitchButton.hpp"
|
||||
#include "Widgets/PopupWindow.hpp"
|
||||
#include <wx/simplebook.h>
|
||||
#include <wx/hashmap.h>
|
||||
|
||||
#include "slic3r/GUI/DeviceCore/DevUtil.h"
|
||||
|
||||
#include <optional>
|
||||
|
||||
#define MAPPING_ITEM_INVALID_REMAIN -1
|
||||
|
||||
// Previous definitions
|
||||
namespace Slic3r
|
||||
{
|
||||
class DevNozzleRack;
|
||||
namespace GUI
|
||||
{
|
||||
class wgtDeviceNozzleRackSelect;
|
||||
class wgtMsgPanel;
|
||||
};
|
||||
};
|
||||
|
||||
namespace Slic3r {
|
||||
namespace GUI {
|
||||
class DevNozzleRack;
|
||||
namespace GUI { class wgtDeviceNozzleRackSelect; }
|
||||
}
|
||||
|
||||
namespace Slic3r { namespace GUI {
|
||||
|
||||
|
||||
#define AMS_TOTAL_COUNT 4
|
||||
@@ -69,8 +64,7 @@ enum TrayType {
|
||||
enum ShowType {
|
||||
LEFT, // only show left ams and left ext
|
||||
RIGHT, //only show right ams and right ext
|
||||
LEFT_AND_RIGHT, //show left and right ams at the same time
|
||||
LEFT_AND_RIGHT_DYNAMIC //show all left and right at one panel when use_dynamic_switch
|
||||
LEFT_AND_RIGHT //show left and right ams at the same time
|
||||
};
|
||||
|
||||
struct TrayData
|
||||
@@ -91,59 +85,26 @@ struct TrayData
|
||||
class MaterialItem: public wxPanel
|
||||
{
|
||||
protected:
|
||||
int m_text_pos_x = 0;
|
||||
int m_text_pos_y = -1;
|
||||
bool m_dropdown_allow_painted = true;
|
||||
wxString m_mapping_text;
|
||||
|
||||
public:
|
||||
// Orca: filament_id defaults to empty so the existing 3-arg callers keep compiling;
|
||||
// m_filament_id is otherwise unused here.
|
||||
MaterialItem(wxWindow *parent, wxColour mcolour, wxString mname, std::string filament_id = std::string());
|
||||
MaterialItem(wxWindow *parent, wxColour mcolour, wxString mname);
|
||||
~MaterialItem();
|
||||
|
||||
void allow_paint_dropdown(bool flag);
|
||||
|
||||
void set_ams_text(const wxString& txt);
|
||||
void set_ams_info(wxColour col, wxString txt,
|
||||
int ctype = 0, std::vector<wxColour> cols = std::vector<wxColour>(),
|
||||
bool record_back_info = false);
|
||||
|
||||
void set_material_cols(int ctype, const std::vector<wxColour>& cols);
|
||||
|
||||
void reset_ams_info();
|
||||
virtual void reset_valid_info();
|
||||
|
||||
void set_nozzle_info(const wxString& mapped_nozzle_str);
|
||||
|
||||
void disable();
|
||||
void enable();
|
||||
void on_normal();
|
||||
void on_selected();
|
||||
void on_warning();
|
||||
|
||||
bool is_selected() const { return m_selected;}
|
||||
bool is_warning() const { return m_warning;}
|
||||
|
||||
void msw_rescale();
|
||||
|
||||
protected:
|
||||
void messure_size();
|
||||
|
||||
public:
|
||||
std::string m_filament_id;
|
||||
|
||||
wxPanel* m_main_panel;
|
||||
wxColour m_material_coloul;
|
||||
int m_material_ctype = 0;
|
||||
std::vector<wxColour> m_material_cols;
|
||||
wxString m_material_name;
|
||||
wxString m_mapped_nozzle_str;
|
||||
|
||||
//info
|
||||
wxColour m_ams_coloul;
|
||||
wxString m_ams_name;
|
||||
// Physical nozzle(s) the print-dispatch mapping assigned to this filament (e.g. "R1", "L R").
|
||||
// Empty on printers without a nozzle rack or filament switcher; when set, the card grows a row.
|
||||
wxString m_mapped_nozzle_str;
|
||||
int m_ams_ctype = 0;
|
||||
std::vector<wxColour> m_ams_cols = std::vector<wxColour>();
|
||||
|
||||
//reset
|
||||
wxColour m_back_ams_coloul;
|
||||
wxString m_back_ams_name;
|
||||
@@ -163,17 +124,32 @@ public:
|
||||
bool m_match {true};
|
||||
bool m_enable {true};
|
||||
|
||||
void msw_rescale();
|
||||
void allow_paint_dropdown(bool flag);
|
||||
void set_ams_info(wxColour col, wxString txt, int ctype=0, std::vector<wxColour> cols= std::vector<wxColour>(),bool record_back_info = false);
|
||||
void reset_ams_info();
|
||||
// Set the mapped-nozzle label ("R1", "L R", ...); grows/shrinks the card as the row appears/clears.
|
||||
void set_nozzle_info(const wxString& mapped_nozzle_str);
|
||||
// Size the card: base swatch height, plus one row when a nozzle label is present.
|
||||
void messure_size();
|
||||
|
||||
void disable();
|
||||
void enable();
|
||||
void on_normal();
|
||||
void on_selected();
|
||||
void on_warning();
|
||||
|
||||
void paintEvent(wxPaintEvent &evt);
|
||||
virtual void render(wxDC &dc);
|
||||
void match(bool mat);
|
||||
virtual void doRender(wxDC &dc);
|
||||
virtual void reset_valid_info();
|
||||
};
|
||||
|
||||
class MaterialSyncItem : public MaterialItem
|
||||
{
|
||||
public:
|
||||
// Orca: filament_id defaults to empty for existing 3-arg callers (see MaterialItem).
|
||||
MaterialSyncItem(wxWindow *parent, wxColour mcolour, wxString mname, std::string filament_id = std::string());
|
||||
MaterialSyncItem(wxWindow *parent, wxColour mcolour, wxString mname);
|
||||
~MaterialSyncItem();
|
||||
int get_real_offset();
|
||||
void render(wxDC &dc) override;
|
||||
@@ -205,7 +181,7 @@ public:
|
||||
public:
|
||||
void update_data(TrayData data);
|
||||
void send_event(int fliament_id);
|
||||
void set_data(const wxString& tag_name, wxColour colour, wxString name, bool remain_detect, TrayData data, bool unmatch = false, std::optional<wxString> tooltip_opt = std::nullopt);
|
||||
void set_data(const wxString& tag_name, wxColour colour, wxString name, bool remain_detect, TrayData data, bool unmatch = false);
|
||||
void set_checked(bool checked);
|
||||
void set_tray_index(wxString t_index) { m_tray_index = t_index; };
|
||||
|
||||
@@ -246,38 +222,13 @@ protected:
|
||||
void doRender(wxDC& dc);
|
||||
};
|
||||
|
||||
class DevIconLabel : public wxPanel
|
||||
{
|
||||
public:
|
||||
DevIconLabel(wxWindow* parent, const wxString& icon, const wxString& label);
|
||||
|
||||
public:
|
||||
void SetAllBackgroundColor(const wxColour& color);
|
||||
|
||||
Label* GetLabelItem() const { return m_label; }
|
||||
void SetLabel(const wxString& label);
|
||||
void SetIcon(const wxString& icon);
|
||||
|
||||
void Rescale();
|
||||
|
||||
private:
|
||||
void CreateGui();
|
||||
|
||||
private:
|
||||
Label* m_label{ nullptr };
|
||||
wxString m_icon_str;
|
||||
wxStaticBitmap* m_icon{ nullptr };
|
||||
};
|
||||
|
||||
class AmsMapingPopup : public PopupWindow
|
||||
{
|
||||
bool m_use_in_sync_dialog = false;
|
||||
bool m_ams_remain_detect_flag = false;
|
||||
bool m_ext_mapping_filatype_check = true;
|
||||
wxStaticText* m_title_text{ nullptr };
|
||||
|
||||
wgtDeviceNozzleRackSelect *m_rack_nozzle_select{nullptr};
|
||||
DevIconLabel* m_flush_warning_panel;
|
||||
|
||||
public:
|
||||
AmsMapingPopup(wxWindow *parent,bool use_in_sync_dialog = false);
|
||||
~AmsMapingPopup() {};
|
||||
@@ -293,11 +244,11 @@ public:
|
||||
bool m_has_unmatch_filament {false};
|
||||
int m_current_filament_id;
|
||||
ShowType m_show_type{ShowType::RIGHT};
|
||||
// Orca: set from update() — true when a Filament Track Switch is installed, which makes the
|
||||
// external-spool slots un-pickable (false on any printer without a switch, so behavior is unchanged).
|
||||
bool m_fila_switch_installed{false};
|
||||
std::string m_tag_material;
|
||||
wxScrolledWindow *m_scrolled_window{nullptr};
|
||||
wxBoxSizer *m_sizer_main{nullptr};
|
||||
wxBoxSizer *m_sizer_main_h{nullptr};
|
||||
wxBoxSizer *m_sizer_ams_v{nullptr};
|
||||
wxBoxSizer *m_sizer_ams{nullptr};
|
||||
wxBoxSizer *m_sizer_ams_left{nullptr};
|
||||
wxBoxSizer *m_sizer_ams_right{nullptr};
|
||||
@@ -311,27 +262,26 @@ public:
|
||||
MappingItem* m_right_extra_slot{nullptr};
|
||||
|
||||
wxPanel * m_left_marea_panel{nullptr};
|
||||
wxPanel* m_right_marea_panel{ nullptr }; // used as right if both left and right sides shown. used as single panel if only one side shown.
|
||||
wxPanel * m_right_marea_panel{nullptr};
|
||||
wxPanel * m_left_first_text_panel{nullptr};
|
||||
wxPanel * m_right_first_text_panel{nullptr};
|
||||
wgtMsgPanel* m_ams_tips_msg_panel{nullptr};
|
||||
wxPanel * m_split_line_panel{nullptr};
|
||||
wxBoxSizer * m_left_split_ams_sizer{nullptr};
|
||||
wxBoxSizer * m_right_split_ams_sizer{nullptr};
|
||||
wxBoxSizer * m_right_split_ext_sizer{ nullptr };
|
||||
Label * m_left_tips{nullptr};
|
||||
Label * m_right_tips{nullptr};
|
||||
|
||||
ScalableButton* m_reset_btn{nullptr};
|
||||
wxString m_single_tip_text;
|
||||
wxString m_left_tip_text;
|
||||
wxString m_right_tip_text;
|
||||
wxString m_ams_tips_panel_text;
|
||||
wxBoxSizer* m_sizer_split_ams_left;
|
||||
wxBoxSizer* m_sizer_split_ams_right;
|
||||
bool m_mapping_from_multi_machines {false};
|
||||
|
||||
bool get_use_in_sync_dialog() { return m_use_in_sync_dialog; }
|
||||
// Rack nozzle manual-pick (rack printers only; hidden by default via Show(false)).
|
||||
wgtDeviceNozzleRackSelect* m_rack_nozzle_select{nullptr};
|
||||
Label* m_flush_warning_panel{nullptr}; // Orca: uses a plain Label for the flush warning
|
||||
std::weak_ptr<DevNozzleRack> m_rack;
|
||||
|
||||
void set_sizer_title(wxBoxSizer *sizer, wxString text);
|
||||
wxBoxSizer* create_split_sizer(wxWindow* parent, wxString text);
|
||||
void set_send_win(wxWindow* win) {send_win = win;};
|
||||
@@ -339,6 +289,8 @@ public:
|
||||
void set_tag_texture(std::string texture);
|
||||
void update(MachineObject* obj, const std::vector<FilamentInfo>& ams_mapping_result, bool use_dynamic_switch = false, std::optional<PrintFromType> print_type = std::nullopt);
|
||||
void update_rack_select(MachineObject* obj, bool use_dynamic_switch, std::optional<PrintFromType> print_type);
|
||||
void update_flush_waste(MachineObject* obj);
|
||||
void update_title(MachineObject* obj);
|
||||
void update_items_check_state(const std::vector<FilamentInfo>& ams_mapping_result);
|
||||
void update_ams_data_multi_machines();
|
||||
void add_ams_mapping(std::vector<TrayData> tray_data, bool remain_detect_flag, wxWindow *container, wxBoxSizer *sizer);
|
||||
@@ -352,24 +304,15 @@ public:
|
||||
void paintEvent(wxPaintEvent &evt);
|
||||
void set_parent_item(MaterialItem* item) {m_parent_item = item;};
|
||||
void set_show_type(ShowType type) { m_show_type = type; };
|
||||
// Orca: kept as a no-op for SelectMachine — its only caller passes false, which
|
||||
// equals the update path's default (all slots shown).
|
||||
void set_only_show_ext_spool(bool /*flag*/) {}
|
||||
// Orca: dropped by the reference but still consumed by SelectMachine.
|
||||
std::vector<TrayData> parse_ams_mapping(const std::map<std::string, DevAms*, NumericStrCompare>& amsList);
|
||||
|
||||
#ifdef __APPLE__
|
||||
void on_mouse_move(wxMouseEvent &evt);
|
||||
wxPopupWindow * m_tip_popup{nullptr};
|
||||
Label* m_tip_label{nullptr};
|
||||
#endif
|
||||
|
||||
using ResetCallback = std::function<void(const std::string&)>;
|
||||
void reset_ams_info();
|
||||
void set_reset_callback(ResetCallback callback);
|
||||
void show_reset_button();
|
||||
void set_material_index_str(std::string str) { m_material_index = str; }
|
||||
const std::string &get_material_index_str() { return m_material_index; }
|
||||
void set_only_show_ext_spool(bool flag);
|
||||
|
||||
public:
|
||||
void msw_rescale();
|
||||
@@ -377,20 +320,11 @@ public:
|
||||
void EnableExtMappingFilaTypeCheck(bool to_check = true) { m_ext_mapping_filatype_check = to_check;} ;
|
||||
|
||||
private:
|
||||
// update
|
||||
void update_title(MachineObject* obj);
|
||||
void update_ams_tips(MachineObject* obj);
|
||||
void update_mapping_items(MachineObject* obj, const std::vector<FilamentInfo>& ams_mapping_result, bool use_dynamic_switch);
|
||||
|
||||
// events
|
||||
void OnNozzleMappingSelected(wxCommandEvent& evt);
|
||||
void update_flush_waste(MachineObject* obj);
|
||||
|
||||
private:
|
||||
std::weak_ptr<DevNozzleRack> m_rack;
|
||||
|
||||
ResetCallback m_reset_callback{nullptr};
|
||||
std::string m_material_index;
|
||||
bool m_only_show_ext_spool{false};
|
||||
};
|
||||
|
||||
class AmsMapingTipPopup : public PopupWindow
|
||||
|
||||
@@ -1,708 +0,0 @@
|
||||
/*****************************************************************//**
|
||||
* \file AmsMappingPopupUpdate.cpp
|
||||
* \brief do update for AmsMappingPopup
|
||||
* \note moved from AmsMappingPopup.cpp to here to reduce the code size of AmsMappingPopup.cpp
|
||||
*
|
||||
* \author xin.zhang
|
||||
* \date February 2026
|
||||
*********************************************************************/
|
||||
#include "AmsMappingPopup.hpp"
|
||||
#include "I18N.hpp"
|
||||
#include "DeviceCore/DevConfigUtil.h"
|
||||
|
||||
#include "libslic3r/Utils.hpp"
|
||||
#include "slic3r/Utils/WxFontUtils.hpp"
|
||||
#include "GUI.hpp"
|
||||
#include "GUI_App.hpp"
|
||||
#include "GUI_Preview.hpp"
|
||||
#include "MainFrame.hpp"
|
||||
#include "format.hpp"
|
||||
#include "Widgets/ProgressDialog.hpp"
|
||||
#include "Widgets/RoundedRectangle.hpp"
|
||||
#include "Widgets/StaticBox.hpp"
|
||||
|
||||
#include <wx/progdlg.h>
|
||||
#include <wx/clipbrd.h>
|
||||
#include <wx/dcgraph.h>
|
||||
#include <wx/graphics.h>
|
||||
#include <miniz.h>
|
||||
#include <algorithm>
|
||||
#include <optional>
|
||||
#include "Plater.hpp"
|
||||
#include "BitmapCache.hpp"
|
||||
|
||||
#include "DeviceCore/DevFilaSystem.h"
|
||||
#include "DeviceCore/DevFilaSwitch.h"
|
||||
#include "DeviceCore/DevMappingNozzle.h"
|
||||
#include "DeviceCore/DevNozzleRack.h" // Orca: full type for GetNozzleSystem()->GetNozzleRack()->IsSupported()
|
||||
|
||||
#include "DeviceTab/wgtDeviceNozzleSelect.h"
|
||||
#include "DeviceTab/wgtMsgPanel.h"
|
||||
|
||||
namespace Slic3r::GUI {
|
||||
|
||||
|
||||
static void _add_containers(const AmsMapingPopup* win,
|
||||
std::list<MappingContainer*>& one_slot_containers,
|
||||
const std::vector<MappingContainer*>& four_slots_containers,
|
||||
wxBoxSizer* target_sizer)
|
||||
{
|
||||
for (auto container : four_slots_containers) { target_sizer->Add(container, 0, wxTOP, win->FromDIP(5)); }
|
||||
|
||||
while (!one_slot_containers.empty()) {
|
||||
wxBoxSizer* sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
for (int i = 0; i < 3; i++) {
|
||||
if (one_slot_containers.empty()) { break; }
|
||||
|
||||
sizer->Add(one_slot_containers.front(), 0, wxLEFT, (i == 0) ? 0 : win->FromDIP(5));
|
||||
one_slot_containers.pop_front();
|
||||
}
|
||||
|
||||
target_sizer->Add(sizer, 0, wxTOP, win->FromDIP(5));
|
||||
}
|
||||
}
|
||||
|
||||
void AmsMapingPopup::update(MachineObject* obj,
|
||||
const std::vector<FilamentInfo>& ams_mapping_result,
|
||||
bool use_dynamic_switch,
|
||||
std::optional<PrintFromType> print_type)
|
||||
{
|
||||
if (!obj) { return; } // Orca: guard before use (REF logs before its null check)
|
||||
|
||||
BOOST_LOG_TRIVIAL(info) << "ams_mapping total count " << obj->GetFilaSystem()->GetAmsCount();
|
||||
|
||||
for (auto& ams_container : m_amsmapping_container_list) {
|
||||
ams_container->Destroy();
|
||||
}
|
||||
|
||||
m_amsmapping_container_list.clear();
|
||||
m_amsmapping_container_sizer_list.clear();
|
||||
m_mapping_item_list.clear();
|
||||
|
||||
/*title*/
|
||||
update_title(obj);
|
||||
|
||||
/*ams mapping*/
|
||||
update_ams_tips(obj);
|
||||
update_mapping_items(obj, ams_mapping_result, use_dynamic_switch);
|
||||
|
||||
/*rack*/
|
||||
update_rack_select(obj, use_dynamic_switch, print_type);
|
||||
update_flush_waste(obj);
|
||||
|
||||
if (wxGetApp().dark_mode() && m_reset_btn->GetName() != "erase_dark") {
|
||||
m_reset_btn->SetName("erase_dark");
|
||||
m_reset_btn->SetBitmap(ScalableBitmap(m_right_first_text_panel, "erase_dark", 14).bmp());
|
||||
} else if (!wxGetApp().dark_mode() && m_reset_btn->GetName() != "erase") {
|
||||
m_reset_btn->SetName("erase");
|
||||
m_reset_btn->SetBitmap(ScalableBitmap(m_right_first_text_panel, "erase", 14).bmp());
|
||||
}
|
||||
|
||||
size_t extruder_num = obj->GetExtderSystem()->GetTotalExtderCount();
|
||||
if (extruder_num == 1) {
|
||||
m_left_marea_panel->Hide();
|
||||
m_left_extra_slot->Hide();
|
||||
m_split_line_panel->Hide();
|
||||
m_right_marea_panel->Show();
|
||||
m_right_marea_panel->Enable(true);
|
||||
m_right_extra_slot->Show();
|
||||
m_right_extra_slot->Enable(true);
|
||||
m_right_split_ext_sizer->Show(true);
|
||||
set_sizer_title(m_right_split_ams_sizer, _L("AMS"));
|
||||
} else if (extruder_num > 1) {
|
||||
if (m_show_type == ShowType::LEFT_AND_RIGHT_DYNAMIC) {
|
||||
m_left_marea_panel->Show(false);
|
||||
m_left_extra_slot->Show(false);
|
||||
m_right_extra_slot->Show(false);
|
||||
m_left_split_ams_sizer->Show(false);
|
||||
m_right_split_ams_sizer->Show(false);
|
||||
m_right_split_ext_sizer->Show(false);
|
||||
m_split_line_panel->Hide();
|
||||
|
||||
m_right_marea_panel->Show();
|
||||
m_right_marea_panel->Enable(true);
|
||||
} else {
|
||||
|
||||
m_left_marea_panel->Show();
|
||||
m_left_extra_slot->Show();
|
||||
m_split_line_panel->Show();
|
||||
m_right_marea_panel->Show();
|
||||
m_right_extra_slot->Show();
|
||||
m_right_split_ext_sizer->Show(true);
|
||||
m_left_tips->SetLabel(m_left_tip_text);
|
||||
m_right_tips->SetLabel(m_right_tip_text);
|
||||
set_sizer_title(m_left_split_ams_sizer, _L("Left AMS"));
|
||||
set_sizer_title(m_right_split_ams_sizer, _L("Right AMS"));
|
||||
if (m_show_type == ShowType::LEFT) {
|
||||
m_left_marea_panel->Enable(true);
|
||||
m_left_extra_slot->Enable(true);
|
||||
m_right_marea_panel->Enable(false);
|
||||
m_right_extra_slot->Enable(false);
|
||||
if (m_use_in_sync_dialog) {
|
||||
m_left_tips->SetLabel(m_single_tip_text);
|
||||
m_right_tips->SetLabel("");
|
||||
}
|
||||
} else if (m_show_type == ShowType::RIGHT) {
|
||||
m_left_marea_panel->Enable(false);
|
||||
m_left_extra_slot->Enable(false);
|
||||
m_right_marea_panel->Enable(true);
|
||||
m_right_extra_slot->Enable(true);
|
||||
if (m_use_in_sync_dialog) {
|
||||
// m_right_tips->SetLabel(m_single_tip_text);
|
||||
m_left_tips->SetLabel("");
|
||||
}
|
||||
} else if (m_show_type == ShowType::LEFT_AND_RIGHT) {
|
||||
m_left_marea_panel->Enable(true);
|
||||
m_left_extra_slot->Enable(true);
|
||||
m_right_marea_panel->Enable(true);
|
||||
m_right_extra_slot->Enable(true);
|
||||
if (m_use_in_sync_dialog) {
|
||||
m_left_tips->SetLabel(m_single_tip_text);
|
||||
m_right_tips->SetLabel("");
|
||||
}
|
||||
} else if (m_show_type == ShowType::LEFT_AND_RIGHT_DYNAMIC) {
|
||||
m_left_marea_panel->Show(false);
|
||||
m_left_extra_slot->Show(false);
|
||||
m_right_extra_slot->Show(false);
|
||||
m_left_split_ams_sizer->Show(false);
|
||||
m_right_split_ams_sizer->Show(false);
|
||||
m_right_split_ext_sizer->Show(false);
|
||||
m_split_line_panel->Hide();
|
||||
|
||||
m_right_marea_panel->Show();
|
||||
m_right_marea_panel->Enable(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Layout();
|
||||
Fit();
|
||||
Refresh();
|
||||
}
|
||||
|
||||
// Orca: the kept fila model has no tray-level ams_type; the owning AMS type is passed in
|
||||
// (DevAms::GetAmsType() for AMS trays, DevAmsType::EXT_SPOOL for the virtual/ext slots).
|
||||
static std::optional<TrayData> sGetTrayData(DevAmsTray* tray,
|
||||
const std::string& ams_id_str,
|
||||
DevAmsType ams_type)
|
||||
{
|
||||
int ams_id = 0;
|
||||
int tray_id = 0;
|
||||
try {
|
||||
ams_id = std::stoi(ams_id_str);
|
||||
tray_id = atoi(tray->id.c_str());
|
||||
} catch (const std::exception& e) {
|
||||
BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ":[error] invalid ams_id or tray_id: " << e.what();
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
TrayData td;
|
||||
td.ams_id = ams_id;
|
||||
if (ams_type != DevAmsType::EXT_SPOOL) {
|
||||
td.slot_id = tray_id;
|
||||
} else {
|
||||
td.slot_id = 0;
|
||||
}
|
||||
|
||||
if (ams_type == DevAmsType::AMS ||
|
||||
ams_type == DevAmsType::AMS_LITE ||
|
||||
ams_type == DevAmsType::N3F) {
|
||||
td.id = ams_id * 4 + tray_id;
|
||||
} else if (ams_type == DevAmsType::N3S) {
|
||||
td.id = ams_id + tray_id;
|
||||
} else if(ams_type == DevAmsType::EXT_SPOOL){
|
||||
td.id = tray_id;
|
||||
}
|
||||
|
||||
if (ams_type != EXT_SPOOL && !tray->is_exists) {
|
||||
td.type = EMPTY;
|
||||
} else {
|
||||
if (!tray->is_tray_info_ready()) {
|
||||
td.type = THIRD;
|
||||
} else {
|
||||
td.type = NORMAL;
|
||||
td.remain = tray->remain;
|
||||
td.colour = DevAmsTray::decode_color(tray->color);
|
||||
td.name = tray->get_display_filament_type();
|
||||
td.filament_type = tray->get_filament_type();
|
||||
td.ctype = tray->ctype;
|
||||
for (const auto& col : tray->cols) {
|
||||
td.material_cols.push_back(DevAmsTray::decode_color(col));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return td;
|
||||
}
|
||||
|
||||
void AmsMapingPopup::update_mapping_items(MachineObject* obj, const std::vector<FilamentInfo>& ams_mapping_result, bool use_dynamic_switch)
|
||||
{
|
||||
std::list<MappingContainer*> left_one_slot_containers;
|
||||
std::list<MappingContainer*> right_one_slot_containers;
|
||||
std::vector<MappingContainer*> left_four_slots_containers;
|
||||
std::vector<MappingContainer*> right_four_slot_containers;
|
||||
|
||||
const auto& ams_list = obj->GetFilaSystem()->GetAmsList();
|
||||
for (auto ams_iter = ams_list.begin(); ams_iter != ams_list.end(); ams_iter++) {
|
||||
const auto& extruder_set = ams_iter->second->GetBindedExtruderSet();
|
||||
if (extruder_set.size() <= 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
wxPanel* target_panel = nullptr;
|
||||
if (m_show_type == ShowType::LEFT_AND_RIGHT_DYNAMIC) {
|
||||
target_panel = m_right_marea_panel;
|
||||
} else {
|
||||
int extruder_id = *extruder_set.begin();
|
||||
if (extruder_id == MAIN_EXTRUDER_ID) {
|
||||
target_panel = m_right_marea_panel;
|
||||
} else if (extruder_id == DEPUTY_EXTRUDER_ID) {
|
||||
target_panel = m_left_marea_panel;
|
||||
}
|
||||
}
|
||||
|
||||
if (!target_panel) {
|
||||
continue;
|
||||
}
|
||||
|
||||
auto sizer_mapping_list = new wxBoxSizer(wxHORIZONTAL);
|
||||
auto ams_mapping_item_container = new MappingContainer(target_panel, ams_iter->second->GetDisplayName(), ams_iter->second->GetSlotCount());
|
||||
ams_mapping_item_container->SetName(target_panel->GetName());
|
||||
ams_mapping_item_container->SetSizer(sizer_mapping_list);
|
||||
ams_mapping_item_container->Layout();
|
||||
|
||||
BOOST_LOG_TRIVIAL(trace) << "ams_mapping ams id " << ams_iter->first.c_str();
|
||||
|
||||
DevAms* ams_group = ams_iter->second;
|
||||
auto ams_type = ams_group->GetAmsType();
|
||||
std::vector<TrayData> tray_datas;
|
||||
std::map<std::string, DevAmsTray*>::const_iterator tray_iter;
|
||||
for (tray_iter = ams_group->GetTrays().cbegin(); tray_iter != ams_group->GetTrays().cend(); tray_iter++) {
|
||||
const auto& td_opt = sGetTrayData(tray_iter->second, ams_group->GetAmsId(), ams_type);
|
||||
if (td_opt.has_value()) {
|
||||
tray_datas.push_back(td_opt.value());
|
||||
}
|
||||
}
|
||||
|
||||
ams_mapping_item_container->Show();
|
||||
add_ams_mapping(tray_datas, obj->GetFilaSystem()->IsDetectRemainEnabled(), ams_mapping_item_container, sizer_mapping_list);
|
||||
m_amsmapping_container_sizer_list.push_back(sizer_mapping_list);
|
||||
m_amsmapping_container_list.push_back(ams_mapping_item_container);
|
||||
|
||||
if (target_panel == m_right_marea_panel) {
|
||||
if (ams_mapping_item_container->get_slots_num() == 1) {
|
||||
right_one_slot_containers.push_back(ams_mapping_item_container);
|
||||
} else {
|
||||
right_four_slot_containers.push_back(ams_mapping_item_container);
|
||||
}
|
||||
} else if (target_panel == m_left_marea_panel) {
|
||||
if (ams_mapping_item_container->get_slots_num() == 1) {
|
||||
left_one_slot_containers.push_back(ams_mapping_item_container);
|
||||
} else {
|
||||
left_four_slots_containers.push_back(ams_mapping_item_container);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = obj->vt_slot.size() - 1; i >= 0; i--) {
|
||||
DevAmsTray* tray_data = &obj->vt_slot[i];
|
||||
const auto& td_opt = sGetTrayData(tray_data, tray_data->id, DevAmsType::EXT_SPOOL);
|
||||
if (!td_opt.has_value()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (m_show_type == ShowType::LEFT_AND_RIGHT_DYNAMIC) {
|
||||
auto sizer_mapping_list = new wxBoxSizer(wxHORIZONTAL);
|
||||
const auto& shown_name = td_opt->ams_id == VIRTUAL_TRAY_MAIN_ID ? "Ext-R" : "Ext-L";
|
||||
auto ams_mapping_item_container = new MappingContainer(m_right_marea_panel, shown_name, 1);
|
||||
ams_mapping_item_container->SetName(m_right_marea_panel->GetName());
|
||||
ams_mapping_item_container->SetSizer(sizer_mapping_list);
|
||||
ams_mapping_item_container->Layout();
|
||||
|
||||
std::vector<TrayData> tray_datas;
|
||||
tray_datas.push_back(td_opt.value());
|
||||
add_ams_mapping(tray_datas, false, ams_mapping_item_container, sizer_mapping_list);
|
||||
m_amsmapping_container_sizer_list.push_back(sizer_mapping_list);
|
||||
m_amsmapping_container_list.push_back(ams_mapping_item_container);
|
||||
right_one_slot_containers.push_back(ams_mapping_item_container);
|
||||
} else {
|
||||
if (td_opt->ams_id == VIRTUAL_TRAY_MAIN_ID) {
|
||||
m_right_extra_slot->send_win = send_win;
|
||||
add_ext_ams_mapping(td_opt.value(), m_right_extra_slot);
|
||||
} else if (td_opt->ams_id == VIRTUAL_TRAY_DEPUTY_ID) {
|
||||
m_left_extra_slot->send_win = send_win;
|
||||
add_ext_ams_mapping(td_opt.value(), m_left_extra_slot);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
_add_containers(this, left_one_slot_containers, left_four_slots_containers, m_sizer_ams_basket_left);
|
||||
_add_containers(this, right_one_slot_containers, right_four_slot_containers, m_sizer_ams_basket_right);
|
||||
if (m_show_type != ShowType::LEFT_AND_RIGHT_DYNAMIC){
|
||||
m_left_split_ams_sizer->Show(!left_one_slot_containers.empty() || !left_four_slots_containers.empty());
|
||||
m_right_split_ams_sizer->Show(!right_one_slot_containers.empty() || !right_four_slot_containers.empty());
|
||||
} else {
|
||||
m_left_split_ams_sizer->Show(false);
|
||||
m_right_split_ams_sizer->Show(false);
|
||||
}
|
||||
|
||||
update_items_check_state(ams_mapping_result);
|
||||
}
|
||||
|
||||
void AmsMapingPopup::update_ams_data_multi_machines()
|
||||
{
|
||||
m_mapping_from_multi_machines = true;
|
||||
|
||||
std::vector<TrayData> tray_datas;
|
||||
for (int i = 0; i < 4; ++i) {
|
||||
TrayData td;
|
||||
td.id = i;
|
||||
td.type = EMPTY;
|
||||
td.colour = wxColour(166, 169, 170);
|
||||
td.name = "";
|
||||
td.filament_type = "";
|
||||
td.ctype = 0;
|
||||
tray_datas.push_back(td);
|
||||
}
|
||||
|
||||
for (auto& ams_container : m_amsmapping_container_list) {
|
||||
ams_container->Destroy();
|
||||
}
|
||||
|
||||
m_amsmapping_container_list.clear();
|
||||
m_amsmapping_container_sizer_list.clear();
|
||||
m_mapping_item_list.clear();
|
||||
|
||||
if (wxGetApp().dark_mode() && m_reset_btn->GetName() != "erase_dark") {
|
||||
m_reset_btn->SetName("erase_dark");
|
||||
m_reset_btn->SetBitmap(ScalableBitmap(m_right_first_text_panel, "erase_dark", 14).bmp());
|
||||
} else if (!wxGetApp().dark_mode() && m_reset_btn->GetName() != "erase") {
|
||||
m_reset_btn->SetName("erase");
|
||||
m_reset_btn->SetBitmap(ScalableBitmap(m_right_first_text_panel, "erase", 14).bmp());
|
||||
}
|
||||
|
||||
size_t nozzle_nums = 1;
|
||||
m_show_type = ShowType::RIGHT;
|
||||
|
||||
m_left_marea_panel->Hide();
|
||||
m_left_extra_slot->Hide();
|
||||
// m_left_marea_panel->Show();
|
||||
m_right_marea_panel->Show();
|
||||
set_sizer_title(m_right_split_ams_sizer, _L("AMS"));
|
||||
// m_right_tips->SetLabel(m_single_tip_text);
|
||||
m_right_extra_slot->Hide();
|
||||
m_left_extra_slot->Hide();
|
||||
|
||||
|
||||
|
||||
/*ams*/
|
||||
bool has_left_ams = false, has_right_ams = false;
|
||||
std::list<MappingContainer*> left_one_slot_containers;
|
||||
std::list<MappingContainer*> right_one_slot_containers;
|
||||
std::vector<MappingContainer*> left_four_slots_containers;
|
||||
std::vector<MappingContainer*> right_four_slot_containers;
|
||||
for (int i = 0; i < 1; i++) {
|
||||
int ams_indx = 0;
|
||||
int ams_type = 1;
|
||||
int nozzle_id = 0;
|
||||
|
||||
if (ams_type >= 1 || ams_type <= 3) { // 1:ams 2:ams-lite 3:n3f
|
||||
|
||||
auto sizer_mapping_list = new wxBoxSizer(wxHORIZONTAL);
|
||||
auto ams_mapping_item_container = new MappingContainer(nozzle_id == 0 ? m_right_marea_panel : m_left_marea_panel, "AMS-1", 4);
|
||||
ams_mapping_item_container->SetName(nozzle_id == 0 ? m_right_marea_panel->GetName() : m_left_marea_panel->GetName());
|
||||
ams_mapping_item_container->SetSizer(sizer_mapping_list);
|
||||
ams_mapping_item_container->Layout();
|
||||
|
||||
m_has_unmatch_filament = false;
|
||||
ams_mapping_item_container->Show();
|
||||
add_ams_mapping(tray_datas, false, ams_mapping_item_container, sizer_mapping_list);
|
||||
m_amsmapping_container_sizer_list.push_back(sizer_mapping_list);
|
||||
m_amsmapping_container_list.push_back(ams_mapping_item_container);
|
||||
|
||||
if (nozzle_id == 0) {
|
||||
has_right_ams = true;
|
||||
if (ams_mapping_item_container->get_slots_num() == 1) {
|
||||
right_one_slot_containers.push_back(ams_mapping_item_container);
|
||||
} else {
|
||||
right_four_slot_containers.push_back(ams_mapping_item_container);
|
||||
}
|
||||
} else if (nozzle_id == 1) {
|
||||
has_left_ams = true;
|
||||
if (ams_mapping_item_container->get_slots_num() == 1) {
|
||||
left_one_slot_containers.push_back(ams_mapping_item_container);
|
||||
} else {
|
||||
left_four_slots_containers.push_back(ams_mapping_item_container);
|
||||
}
|
||||
}
|
||||
} else if (ams_type == 4) { // 4:n3s
|
||||
}
|
||||
}
|
||||
|
||||
_add_containers(this, left_one_slot_containers, left_four_slots_containers, m_sizer_ams_basket_left);
|
||||
_add_containers(this, right_one_slot_containers, right_four_slot_containers, m_sizer_ams_basket_right);
|
||||
m_left_split_ams_sizer->Show(has_left_ams);
|
||||
m_right_split_ams_sizer->Show(has_right_ams);
|
||||
//update_items_check_state(ams_mapping_result);
|
||||
|
||||
Layout();
|
||||
Fit();
|
||||
}
|
||||
|
||||
|
||||
void AmsMapingPopup::update_title(MachineObject* obj)
|
||||
{
|
||||
const auto& full_config = wxGetApp().preset_bundle->full_config();
|
||||
size_t nozzle_nums = full_config.option<ConfigOptionFloatsNullable>("nozzle_diameter")->values.size();
|
||||
if (nozzle_nums > 1) {
|
||||
m_split_line_panel->Show();
|
||||
if (m_show_type == ShowType::LEFT) {
|
||||
wxString nozzle_name = obj ? _L(DevPrinterConfigUtil::get_toolhead_display_name(
|
||||
obj->printer_type, DEPUTY_EXTRUDER_ID, ToolHeadComponent::Nozzle, ToolHeadNameCase::LowerCase)) : _L("left nozzle");
|
||||
m_title_text->SetLabelText(wxString::Format(_L("Please select the filament installed on the %s."), nozzle_name));
|
||||
return;
|
||||
} else if (m_show_type == ShowType::RIGHT) {
|
||||
wxString nozzle_name = obj ? _L(DevPrinterConfigUtil::get_toolhead_display_name(
|
||||
obj->printer_type, MAIN_EXTRUDER_ID, ToolHeadComponent::Nozzle, ToolHeadNameCase::LowerCase)) : _L("right nozzle");
|
||||
m_title_text->SetLabelText(wxString::Format(_L("Please select the filament installed on the %s."), nozzle_name));
|
||||
return;
|
||||
} else if (m_show_type == ShowType::LEFT_AND_RIGHT_DYNAMIC) {
|
||||
m_title_text->SetLabelText(_L("Please select the filament."));
|
||||
return;
|
||||
}
|
||||
} else if (nozzle_nums == 1) {
|
||||
m_split_line_panel->Hide();
|
||||
}
|
||||
|
||||
m_title_text->SetLabelText(_L("Nozzle"));
|
||||
}
|
||||
|
||||
|
||||
void AmsMapingPopup::update_ams_tips(MachineObject* obj)
|
||||
{
|
||||
const auto& full_config = wxGetApp().preset_bundle->full_config();
|
||||
size_t nozzle_nums = full_config.option<ConfigOptionFloatsNullable>("nozzle_diameter")->values.size();
|
||||
if (m_ams_tips_msg_panel) {
|
||||
m_ams_tips_msg_panel->Clear();
|
||||
if (nozzle_nums == 2 && m_show_type != ShowType::LEFT_AND_RIGHT) {
|
||||
m_ams_tips_msg_panel->AddMessage(_L("To learn about the filaments matching rules."),
|
||||
"#FF6F00", ""); // Orca: dropped vendor help link
|
||||
}
|
||||
|
||||
if (obj && obj->GetFilaSwitch()->IsInstalled()) {
|
||||
const auto& msg = _L("External spools is not supported since Filament Track Switch has been installed. If you want to use external spool, please uninstall it.");
|
||||
m_ams_tips_msg_panel->AddMessage(msg, "#FF6F00", "");
|
||||
}
|
||||
|
||||
m_ams_tips_msg_panel->Layout();
|
||||
m_ams_tips_msg_panel->Fit();
|
||||
m_ams_tips_msg_panel->Show(m_ams_tips_msg_panel->GetMessageCount() > 0);
|
||||
}
|
||||
}
|
||||
|
||||
void AmsMapingPopup::update_rack_select(MachineObject* obj, bool use_dynamic_switch, std::optional<PrintFromType> print_from_type)
|
||||
{
|
||||
// Orca: MachineObject has no GetNozzleRack() convenience; route through the nozzle system instead.
|
||||
m_rack = obj ? obj->GetNozzleSystem()->GetNozzleRack() : nullptr;
|
||||
|
||||
bool show_rack_select_area = false;
|
||||
if (!m_mapping_from_multi_machines && !m_use_in_sync_dialog &&
|
||||
obj && obj->GetNozzleSystem()->GetNozzleRack()->IsSupported() &&
|
||||
print_from_type.has_value() && print_from_type.value() == PrintFromType::FROM_NORMAL) {
|
||||
const auto& nozzle_pos_vec = obj->get_nozzle_mapping_result()->GetMappedNozzlePosVecByFilaId(m_current_filament_id);
|
||||
m_rack_nozzle_select->UpdatSelectedNozzles(obj->GetNozzleSystem()->GetNozzleRack(), nozzle_pos_vec, use_dynamic_switch, print_from_type);
|
||||
show_rack_select_area = true;
|
||||
}
|
||||
|
||||
if (show_rack_select_area != m_rack_nozzle_select->IsShown()) {
|
||||
m_right_tip_text = show_rack_select_area ? _L("Select Filament && Hotends") : _L("Select Filament");
|
||||
m_right_tips->SetLabel(m_right_tip_text);
|
||||
m_rack_nozzle_select->Show(show_rack_select_area);
|
||||
Layout();
|
||||
Fit();
|
||||
}
|
||||
}
|
||||
|
||||
void AmsMapingPopup::update_items_check_state(const std::vector<FilamentInfo>& ams_mapping_result)
|
||||
{
|
||||
/*update check states*/
|
||||
if (m_parent_item) {
|
||||
auto update_item_check_state = [&ams_mapping_result, this](MappingItem* item) {
|
||||
if (item) {
|
||||
for (const auto& mapping_res : ams_mapping_result) {
|
||||
if (mapping_res.id == this->m_current_filament_id) {
|
||||
if (mapping_res.ams_id == std::to_string(item->m_ams_id) &&
|
||||
mapping_res.slot_id == std::to_string(item->m_slot_id)) {
|
||||
item->set_checked(true);
|
||||
} else {
|
||||
item->set_checked(false);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
item->set_checked(false);
|
||||
}
|
||||
};
|
||||
|
||||
update_item_check_state(m_left_extra_slot);
|
||||
update_item_check_state(m_right_extra_slot);
|
||||
for (auto mapping_item : m_mapping_item_list) {
|
||||
update_item_check_state(mapping_item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void AmsMapingPopup::add_ams_mapping(std::vector<TrayData> tray_data,
|
||||
bool remain_detect_flag,
|
||||
wxWindow* container,
|
||||
wxBoxSizer* sizer)
|
||||
{
|
||||
sizer->Add(0, 0, 0, wxLEFT, FromDIP(6));
|
||||
|
||||
for (auto i = 0; i < tray_data.size(); i++) {
|
||||
|
||||
// set button
|
||||
MappingItem* m_mapping_item = new MappingItem(container);
|
||||
m_mapping_item->send_win = send_win;
|
||||
m_mapping_item->m_ams_id = tray_data[i].ams_id;
|
||||
m_mapping_item->m_slot_id = tray_data[i].slot_id;
|
||||
// Orca: transition_tridid here has no total-extruder-count overload; label the virtual (ext)
|
||||
// slots Ext-R / Ext-L inline in the two-nozzle left+right views (matches that overload's result).
|
||||
if ((m_show_type == ShowType::LEFT_AND_RIGHT || m_show_type == ShowType::LEFT_AND_RIGHT_DYNAMIC)
|
||||
&& (tray_data[i].id == VIRTUAL_TRAY_MAIN_ID || tray_data[i].id == VIRTUAL_TRAY_DEPUTY_ID)) {
|
||||
m_mapping_item->set_tray_index(tray_data[i].id == VIRTUAL_TRAY_MAIN_ID ? wxString("Ext-R") : wxString("Ext-L"));
|
||||
} else {
|
||||
m_mapping_item->set_tray_index(wxGetApp().transition_tridid(tray_data[i].id));
|
||||
}
|
||||
|
||||
m_mapping_item->SetSize(wxSize(FromDIP(48), FromDIP(60)));
|
||||
m_mapping_item->SetMinSize(wxSize(FromDIP(48), FromDIP(60)));
|
||||
m_mapping_item->SetMaxSize(wxSize(FromDIP(48), FromDIP(60)));
|
||||
|
||||
// traversal if can pick the item or not
|
||||
bool can_pick_the_item = true;
|
||||
std::optional<wxString> item_tooltip_msg;
|
||||
// check filament area
|
||||
if (m_use_in_sync_dialog) {
|
||||
if (can_pick_the_item) {
|
||||
if (m_show_type == ShowType::LEFT_AND_RIGHT_DYNAMIC) {
|
||||
can_pick_the_item = !devPrinterUtil::IsVirtualSlot(m_mapping_item->m_ams_id);
|
||||
if (!can_pick_the_item) {
|
||||
item_tooltip_msg = _L(
|
||||
"External spools is not supported since Filament Track Switch has been installed. If you want to use external spool, please uninstall it.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (can_pick_the_item) {
|
||||
// LEFT_AND_RIGHT — the fallback when a filament has no entry in the
|
||||
// nozzle map — keeps both panels pickable.
|
||||
auto parent = container->GetParent();
|
||||
if (parent == m_left_marea_panel) {
|
||||
can_pick_the_item = (m_show_type == ShowType::LEFT || m_show_type == ShowType::LEFT_AND_RIGHT);
|
||||
} else if (parent == m_right_marea_panel) {
|
||||
if (m_show_type == ShowType::LEFT_AND_RIGHT_DYNAMIC) {
|
||||
can_pick_the_item = !devPrinterUtil::IsVirtualSlot(m_mapping_item->m_ams_id);
|
||||
if (!can_pick_the_item) {
|
||||
item_tooltip_msg = _L(
|
||||
"External spools is not supported since Filament Track Switch has been installed. If you want to use external spool, please uninstall it.");
|
||||
}
|
||||
} else if (m_show_type != ShowType::RIGHT && m_show_type != ShowType::LEFT_AND_RIGHT) {
|
||||
can_pick_the_item = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// check filament type
|
||||
if (can_pick_the_item) {
|
||||
if (tray_data[i].type == NORMAL && !is_match_material(tray_data[i].filament_type)){
|
||||
can_pick_the_item = false;
|
||||
} else if(tray_data[i].type == EMPTY){
|
||||
// Mapping to an empty slot is only allowed from the multi-machine send page,
|
||||
// which maps onto EMPTY placeholder trays.
|
||||
can_pick_the_item = m_mapping_from_multi_machines;
|
||||
}
|
||||
}
|
||||
|
||||
wxColour display_color;
|
||||
if (can_pick_the_item) {
|
||||
display_color = tray_data[i].type == NORMAL ? tray_data[i].colour : wxColour(0xCE, 0xCE, 0xCE);
|
||||
} else {
|
||||
display_color = wxColour(0xEE, 0xEE, 0xEE);
|
||||
}
|
||||
|
||||
wxString display_name;
|
||||
if (tray_data[i].type == THIRD) {
|
||||
display_name = "?";
|
||||
} else if (tray_data[i].type == EMPTY) {
|
||||
display_name = "-";
|
||||
} else {
|
||||
display_name = tray_data[i].name;
|
||||
}
|
||||
|
||||
m_mapping_item->set_data(m_tag_material, display_color, display_name, remain_detect_flag, tray_data[i], !can_pick_the_item, item_tooltip_msg);
|
||||
m_mapping_item->Bind(wxEVT_LEFT_DOWN, [this, can_pick_the_item, m_mapping_item](wxMouseEvent& e) {
|
||||
if (can_pick_the_item) {
|
||||
m_mapping_item->send_event(m_current_filament_id);
|
||||
Dismiss();
|
||||
}
|
||||
});
|
||||
|
||||
sizer->Add(0, 0, 0, wxRIGHT, FromDIP(6));
|
||||
sizer->Add(m_mapping_item, 0, wxTOP, FromDIP(1));
|
||||
m_mapping_item_list.push_back(m_mapping_item);
|
||||
}
|
||||
}
|
||||
|
||||
void AmsMapingPopup::add_ext_ams_mapping(TrayData tray_data, MappingItem* item)
|
||||
{
|
||||
#ifdef __APPLE__
|
||||
m_mapping_item_list.push_back(item);
|
||||
#endif
|
||||
// set button
|
||||
if (tray_data.type == NORMAL) {
|
||||
if (is_match_material(tray_data.filament_type)) {
|
||||
item->set_data(m_tag_material, tray_data.colour, tray_data.name, false, tray_data);
|
||||
} else {
|
||||
item->set_data(m_tag_material, m_ext_mapping_filatype_check ? wxColour(0xEE, 0xEE, 0xEE) : tray_data.colour, tray_data.name, false, tray_data, true);
|
||||
m_has_unmatch_filament = true;
|
||||
}
|
||||
|
||||
item->Bind(wxEVT_LEFT_DOWN, [this, tray_data, item](wxMouseEvent& e) {
|
||||
if (!item->GetParent() || !item->GetParent()->IsEnabled()) return;
|
||||
if (m_ext_mapping_filatype_check && !is_match_material(tray_data.filament_type)) return;
|
||||
item->send_event(m_current_filament_id);
|
||||
Dismiss();
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
// temp
|
||||
if (tray_data.type == EMPTY) {
|
||||
item->set_data(m_tag_material, wxColour(0xCE, 0xCE, 0xCE), "-", false, tray_data);
|
||||
item->Bind(wxEVT_LEFT_DOWN, [this, tray_data, item](wxMouseEvent& e) {
|
||||
if (!item->GetParent() || !item->GetParent()->IsEnabled()) return;
|
||||
item->send_event(m_current_filament_id);
|
||||
Dismiss();
|
||||
});
|
||||
}
|
||||
|
||||
// third party
|
||||
if (tray_data.type == THIRD) {
|
||||
item->set_data(m_tag_material, tray_data.colour, "?", false, tray_data);
|
||||
//item->set_data(wxColour(0xCE, 0xCE, 0xCE), "?", tray_data);
|
||||
item->Bind(wxEVT_LEFT_DOWN, [this, tray_data, item](wxMouseEvent& e) {
|
||||
if (!item->GetParent() || !item->GetParent()->IsEnabled()) return;
|
||||
item->send_event(m_current_filament_id);
|
||||
Dismiss();
|
||||
});
|
||||
}
|
||||
|
||||
item->set_tray_index("Ext");
|
||||
}
|
||||
|
||||
} // namespace Slic3r::GUI
|
||||
@@ -813,7 +813,7 @@ PingCodeBindDialog::~PingCodeBindDialog() {
|
||||
|
||||
m_simplebook->SetSelection(0);
|
||||
auto m_bind_job = std::make_unique<BindJob>(
|
||||
m_machine_info->get_dev_id(), m_machine_info->get_dev_ip(), m_machine_info->get_show_printer_type(), m_machine_info->bind_sec_link, m_machine_info->bind_ssdp_version);
|
||||
m_machine_info->get_dev_id(), m_machine_info->get_dev_ip(), m_machine_info->bind_sec_link, m_machine_info->bind_ssdp_version);
|
||||
|
||||
if (m_machine_info && (m_machine_info->get_printer_series() == PrinterSeries::SERIES_X1)) {
|
||||
m_bind_job->set_improved(false);
|
||||
|
||||
@@ -102,7 +102,7 @@ CameraPopup::CameraPopup(wxWindow *parent)
|
||||
top_sizer->Add(0, 0, wxALL, 0);
|
||||
}
|
||||
|
||||
// Orca: custom IP camera source — lets the user point Live Video at any camera URL (Orca feature; not in the reference)
|
||||
// custom IP camera
|
||||
m_custom_camera_input_confirm = new Button(m_panel, _L("Enable"));
|
||||
m_custom_camera_input_confirm->SetBackgroundColor(wxColour(38, 166, 154));
|
||||
m_custom_camera_input_confirm->SetBorderColor(wxColour(38, 166, 154));
|
||||
@@ -132,7 +132,7 @@ CameraPopup::CameraPopup(wxWindow *parent)
|
||||
top_sizer->Add(m_custom_camera_input_confirm, 1, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxALL, FromDIP(5));
|
||||
main_sizer->Add(top_sizer, 0, wxALL, FromDIP(10));
|
||||
|
||||
auto url = wxString(L"https://www.orcaslicer.com/wiki/"); // Orca: neutral wiki link (vendor URL removed)
|
||||
auto url = wxString::Format(L"https://wiki.bambulab.com/%s/software/bambu-studio/virtual-camera", L"en");
|
||||
auto text = _L("Show \"Live Video\" guide page.");
|
||||
|
||||
wxBoxSizer* link_sizer = new wxBoxSizer(wxVERTICAL);
|
||||
@@ -479,7 +479,7 @@ void CameraPopup::OnLeftUp(wxMouseEvent &event)
|
||||
//hyper link
|
||||
auto h_rect = vcamera_guide_link->ClientToScreen(wxPoint(0, 0));
|
||||
if (mouse_pos.x > h_rect.x && mouse_pos.y > h_rect.y && mouse_pos.x < (h_rect.x + vcamera_guide_link->GetSize().x) && mouse_pos.y < (h_rect.y + vcamera_guide_link->GetSize().y)) {
|
||||
auto url = wxString(L"https://www.orcaslicer.com/wiki/"); // Orca: neutral wiki link (vendor URL removed)
|
||||
auto url = wxString::Format(L"https://wiki.bambulab.com/%s/software/bambu-studio/virtual-camera", L"en");
|
||||
wxLaunchDefaultBrowser(url);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -60,19 +60,6 @@ list(APPEND SLIC3R_GUI_SOURCES
|
||||
GUI/DeviceCore/DevUtil.cpp
|
||||
GUI/DeviceCore/DevUtilBackend.h
|
||||
GUI/DeviceCore/DevUtilBackend.cpp
|
||||
GUI/DeviceCore/DevAxis.h
|
||||
GUI/DeviceCore/DevAxis.cpp
|
||||
GUI/DeviceCore/DevAxisCtrl.cpp
|
||||
GUI/DeviceCore/DevCalib.h
|
||||
GUI/DeviceCore/DevCalib.cpp
|
||||
GUI/DeviceCore/DevChamber.h
|
||||
GUI/DeviceCore/DevChamber.cpp
|
||||
GUI/DeviceCore/DevChamberCtrl.cpp
|
||||
GUI/DeviceCore/DevStatus.h
|
||||
GUI/DeviceCore/DevStatus.cpp
|
||||
GUI/DeviceCore/DevUpgrade.h
|
||||
GUI/DeviceCore/DevUpgrade.cpp
|
||||
GUI/DeviceCore/DevUpgradeCtrl.cpp
|
||||
|
||||
)
|
||||
set(SLIC3R_GUI_SOURCES ${SLIC3R_GUI_SOURCES} PARENT_SCOPE)
|
||||
@@ -1,25 +0,0 @@
|
||||
#include "DevAxis.h"
|
||||
#include "DevUtil.h"
|
||||
|
||||
#include "slic3r/GUI/DeviceManager.hpp"
|
||||
|
||||
namespace Slic3r
|
||||
{
|
||||
|
||||
void DevAxis::ParseAxis(const json& print_json)
|
||||
{
|
||||
DevJsonValParser::ParseVal(print_json, "home_flag", m_home_flag);
|
||||
|
||||
if (print_json.contains("fun")) {
|
||||
const std::string& fun = print_json["fun"].get<std::string>();
|
||||
m_is_support_mqtt_homing = DevUtil::get_flag_bits(fun, 32);
|
||||
m_is_support_mqtt_axis_ctrl = DevUtil::get_flag_bits(fun, 38);
|
||||
}
|
||||
}
|
||||
|
||||
bool DevAxis::IsArchCoreXY() const
|
||||
{
|
||||
return m_owner->get_printer_arch() == PrinterArch::ARCH_CORE_XY;
|
||||
}
|
||||
|
||||
} // namespace Slic3r
|
||||
@@ -1,39 +0,0 @@
|
||||
#pragma once
|
||||
#include <nlohmann/json.hpp>
|
||||
#include "slic3r/Utils/json_diff.hpp"
|
||||
|
||||
namespace Slic3r {
|
||||
|
||||
class MachineObject;
|
||||
|
||||
class DevAxis
|
||||
{
|
||||
public:
|
||||
static std::shared_ptr<DevAxis> Create(MachineObject *obj) { return std::shared_ptr<DevAxis>( new DevAxis(obj)); }
|
||||
virtual ~DevAxis() = default;
|
||||
|
||||
public:
|
||||
bool IsAxisAtHomeX() const { return m_home_flag == 0 ? true : (m_home_flag & 1) == 1; }
|
||||
bool IsAxisAtHomeY() const { return m_home_flag == 0 ? true : ((m_home_flag >> 1) & 1) == 1; }
|
||||
bool IsAxisAtHomeZ() const { return m_home_flag == 0 ? true : ((m_home_flag >> 2) & 1) == 1; }
|
||||
|
||||
bool IsArchCoreXY() const;
|
||||
|
||||
public:
|
||||
void ParseAxis(const json &print_json);
|
||||
|
||||
int Ctrl_GoHome();
|
||||
int Ctrl_Axis(std::string axis, double unit = 1.0f, double input_val = 1.0f, int speed = 3000); // xyz e
|
||||
|
||||
protected:
|
||||
DevAxis(MachineObject *obj) noexcept : m_owner(obj) {}
|
||||
|
||||
private:
|
||||
MachineObject *m_owner = nullptr;
|
||||
|
||||
int m_home_flag = 0; // bit0:X, bit1:Y, bit2:Z
|
||||
bool m_is_support_mqtt_axis_ctrl = false;
|
||||
bool m_is_support_mqtt_homing = false;
|
||||
};
|
||||
|
||||
} // namespace Slic3r
|
||||
@@ -1,60 +0,0 @@
|
||||
#include "DevAxis.h"
|
||||
|
||||
#include "slic3r/GUI/DeviceManager.hpp"
|
||||
#include "slic3r/Utils/NetworkAgent.hpp"
|
||||
|
||||
namespace Slic3r
|
||||
{
|
||||
|
||||
int DevAxis::Ctrl_GoHome()
|
||||
{
|
||||
if (m_is_support_mqtt_homing) {
|
||||
json j;
|
||||
j["print"]["command"] = "back_to_center";
|
||||
j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++);
|
||||
return m_owner->publish_json(j);
|
||||
}
|
||||
|
||||
// gcode command
|
||||
return m_owner->is_in_printing() ? m_owner->publish_gcode("G28 X\n") : m_owner->publish_gcode("G28 \n");
|
||||
}
|
||||
|
||||
int DevAxis::Ctrl_Axis(std::string axis, double unit, double input_val, int speed)
|
||||
{
|
||||
if (m_is_support_mqtt_axis_ctrl) {
|
||||
int dir = input_val > 0 ? 1 : -1;
|
||||
if (!IsArchCoreXY()) {
|
||||
if (axis.compare("Y") == 0 || axis.compare("Z") == 0) {
|
||||
dir = -dir;
|
||||
}
|
||||
}
|
||||
json j;
|
||||
j["print"]["command"] = "xyz_ctrl";
|
||||
j["print"]["axis"] = axis;
|
||||
j["print"]["dir"] = dir;
|
||||
j["print"]["mode"] = (std::abs(input_val) >= 10) ? 1 : 0;
|
||||
j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++);
|
||||
return m_owner->publish_json(j);
|
||||
}
|
||||
|
||||
double value = input_val;
|
||||
if (!IsArchCoreXY()) {
|
||||
if (axis.compare("Y") == 0 || axis.compare("Z") == 0) {
|
||||
value = -1.0 * input_val;
|
||||
}
|
||||
}
|
||||
|
||||
char cmd[256];
|
||||
if (axis.compare("X") == 0 || axis.compare("Y") == 0 || axis.compare("Z") == 0) {
|
||||
sprintf(cmd, "M211 S \nM211 X1 Y1 Z1\nM1002 push_ref_mode\nG91 \nG1 %s%0.1f F%d\nM1002 pop_ref_mode\nM211 R\n", axis.c_str(), value * unit, speed);
|
||||
} else if (axis.compare("E") == 0) {
|
||||
sprintf(cmd, "M83 \nG0 %s%0.1f F%d\n", axis.c_str(), value * unit, speed);
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Orca: strip analytics telemetry (matches MachineObject::command_axis_control)
|
||||
return m_owner->publish_gcode(cmd);
|
||||
}
|
||||
|
||||
} // namespace Slic3r
|
||||
@@ -1,337 +0,0 @@
|
||||
#include <boost/log/trivial.hpp>
|
||||
#include "slic3r/GUI/GUI_App.hpp"
|
||||
|
||||
#include "slic3r/GUI/UserNotification.hpp"
|
||||
#include "libslic3r/PrintConfig.hpp"
|
||||
|
||||
#include <wx/dir.h>
|
||||
#include "fast_float/fast_float.h"
|
||||
|
||||
#include "DevCalib.h"
|
||||
#include "DevDefs.h"
|
||||
#include "DevFilaSystem.h"
|
||||
#include "DevConfig.h"
|
||||
|
||||
namespace Slic3r {
|
||||
|
||||
static float string_to_float(const std::string &str_value)
|
||||
{
|
||||
float value = 0.0;
|
||||
fast_float::from_chars(str_value.c_str(), str_value.c_str() + str_value.size(), value);
|
||||
return value;
|
||||
}
|
||||
|
||||
static NozzleVolumeType convert_to_nozzle_type(const std::string &str)
|
||||
{
|
||||
if (str.size() < 8) {
|
||||
assert(false && "invalid nozzle info");
|
||||
return NozzleVolumeType::nvtStandard;
|
||||
}
|
||||
|
||||
if (str[1] == 'S')
|
||||
return NozzleVolumeType::nvtStandard;
|
||||
else if (str[1] == 'H')
|
||||
return NozzleVolumeType::nvtHighFlow;
|
||||
else if (str[1] == 'U')
|
||||
return NozzleVolumeType::nvtTPUHighFlow;
|
||||
// Orca: no nvtE3DHighFlow in Orca's NozzleVolumeType; map 'B' to Standard
|
||||
else
|
||||
return NozzleVolumeType::nvtStandard;
|
||||
}
|
||||
|
||||
static float get_number_flexible(const json& j, const std::string& key, float def = 0.0f)
|
||||
{
|
||||
if (!j.contains(key)) return def;
|
||||
|
||||
const auto& v = j[key];
|
||||
|
||||
if (v.is_number_float()) return v.get<float>();
|
||||
if (v.is_number_integer()) return static_cast<float>(v.get<int>());
|
||||
if (v.is_string()) return string_to_float(v.get<std::string>());
|
||||
|
||||
return def;
|
||||
}
|
||||
|
||||
void from_json(const json& j, PACalibResult& cali) {
|
||||
cali.extruder_id = j.value("extruder_id", 0);
|
||||
cali.nozzle_volume_type = convert_to_nozzle_type(j.value("nozzle_id", "HS00-0.4"));
|
||||
cali.tray_id = j.value("tray_id",0);
|
||||
cali.ams_id = j.value("ams_id",0);
|
||||
cali.slot_id = j.value("slot_id",0);
|
||||
cali.cali_idx = j.value("cali_idx",-1);
|
||||
cali.nozzle_pos_id = j.value("nozzle_pos",-1);
|
||||
cali.nozzle_diameter = get_number_flexible(j, "nozzle_diameter", 0.4f);
|
||||
cali.nozzle_sn = j.value("nozzle_sn","");
|
||||
cali.filament_id = j.value("filament_id","");
|
||||
cali.setting_id = j.value("setting_id","");
|
||||
cali.name = j.value("name","");
|
||||
cali.k_value = get_number_flexible(j, "k_value", 0.0f);
|
||||
cali.n_coef = get_number_flexible(j, "n_coef", 0.0f);
|
||||
cali.confidence = j.value("confidence", 0);
|
||||
}
|
||||
|
||||
void from_json(const json& j, FlowRatioCalibResult& cali)
|
||||
{
|
||||
cali.tray_id = j.value("tray_id", 0);
|
||||
cali.nozzle_diameter = string_to_float(j.value("nozzle_diameter", ""));
|
||||
cali.filament_id = j.value("filament_id", "");
|
||||
cali.setting_id = j.value("setting_id", "");
|
||||
cali.flow_ratio = string_to_float(j.value("flow_ratio", ""));
|
||||
cali.confidence = j.value("confidence", 0);
|
||||
}
|
||||
|
||||
void DevCalib::ParseCalibVersion(const json& j, DevCalib* system)
|
||||
{
|
||||
if(system) system->m_calib_version = j.value("cali_version", -1);
|
||||
}
|
||||
|
||||
bool DevCalib::IsVersionExpired() const
|
||||
{
|
||||
if (m_last_calib_version.has_value())
|
||||
return m_last_calib_version.value() != m_calib_version;
|
||||
else
|
||||
return true;
|
||||
}
|
||||
|
||||
void DevCalib::ParseSupportNewAutoCalib(int flag, DevCalib* system)
|
||||
{
|
||||
if(system) system->m_support_new_auto_cali = flag;
|
||||
}
|
||||
|
||||
void DevCalib::RequestPAResult()
|
||||
{
|
||||
m_pa_results_status = CalibStatus::REQUEST;
|
||||
}
|
||||
|
||||
void DevCalib::ResetPAResult()
|
||||
{
|
||||
m_pa_calib_results.clear();
|
||||
m_pa_results_status = CalibStatus::IDLE;
|
||||
}
|
||||
|
||||
int DevCalib::RequestPAHistory(const PACalibExtruderInfo &calib_info)
|
||||
{
|
||||
m_pa_calib_tab.clear();
|
||||
m_pa_table_status = CalibStatus::REQUEST;
|
||||
|
||||
return GetOwner()->command_get_pa_calibration_tab(calib_info);
|
||||
}
|
||||
|
||||
void DevCalib::ResetPAHistory()
|
||||
{
|
||||
m_pa_calib_tab.clear();
|
||||
m_pa_table_status = CalibStatus::IDLE;
|
||||
}
|
||||
|
||||
void DevCalib::RequestFlowRateResult()
|
||||
{
|
||||
m_flow_results_status = CalibStatus::REQUEST;
|
||||
}
|
||||
|
||||
void DevCalib::ResetFlowRateResult()
|
||||
{
|
||||
m_flow_ratio_results.clear();
|
||||
m_flow_results_status = CalibStatus::IDLE;
|
||||
}
|
||||
|
||||
void calib_fail_message(MachineObject* obj, std::string cali_mode, std::string reason){
|
||||
wxString info;
|
||||
if (reason == "invalid nozzle_diameter" || reason == "nozzle_diameter is not supported") {
|
||||
info = _L("This calibration does not support the currently selected nozzle diameter");
|
||||
} else if (reason == "invalid handle_flowrate_cali param") {
|
||||
info = _L("Current flowrate cali param is invalid");
|
||||
} else if (reason == "nozzle_diameter is not matched") {
|
||||
info = _L("Selected diameter and machine diameter do not match");
|
||||
} else if (reason == "generate auto filament cali gcode failure") {
|
||||
info = _L("Failed to generate cali gcode");
|
||||
} else {
|
||||
info = wxString(reason);
|
||||
}
|
||||
|
||||
GUI::wxGetApp().push_notification(obj, info, _L("Calibration error"), UserNotificationStyle::UNS_WARNING_CONFIRM);
|
||||
BOOST_LOG_TRIVIAL(info) << cali_mode << " result fail, reason = " << reason;
|
||||
}
|
||||
|
||||
void DevCalib::ExtrusionCalibSetParse(const json & jj){
|
||||
int tray_id = jj.value("tray_id", -1);
|
||||
|
||||
auto tray_ams_slot_map = GetOwner()->GetFilaSystem()->GetTrayIndexMap();
|
||||
int ams_id = tray_ams_slot_map.find(tray_id) != tray_ams_slot_map.end() ? tray_ams_slot_map[tray_id].first : -1;
|
||||
int slot_id = tray_ams_slot_map.find(tray_id) != tray_ams_slot_map.end() ? tray_ams_slot_map[tray_id].second : -1;
|
||||
|
||||
if(tray_id == VIRTUAL_TRAY_MAIN_ID) {
|
||||
GetOwner()->vt_slot[MAIN_EXTRUDER_ID].k = jj.value("k_value", GetOwner()->vt_slot[MAIN_EXTRUDER_ID].k);
|
||||
GetOwner()->vt_slot[MAIN_EXTRUDER_ID].n = jj.value("n_value", GetOwner()->vt_slot[MAIN_EXTRUDER_ID].n);
|
||||
}else{
|
||||
auto tray_item = GetOwner()->GetFilaSystem()->GetAmsTray(std::to_string(ams_id), std::to_string(slot_id));
|
||||
if (tray_item) {
|
||||
tray_item->k = jj.value("k_value", tray_item->k);
|
||||
tray_item->n = jj.value("n_coef", tray_item->n);
|
||||
}
|
||||
}
|
||||
|
||||
GetOwner()->extrusion_cali_set_tray_id = tray_id;
|
||||
GetOwner()->extrusion_cali_set_hold_start = std::chrono::system_clock::now();
|
||||
}
|
||||
|
||||
/* calib select ack parse */
|
||||
void DevCalib::ExtrusionCalibSelectParse(const json &jj){
|
||||
try{
|
||||
int tray_id = jj.value("tray_id", -1);
|
||||
|
||||
auto tray_ams_slot_map = GetOwner()->GetFilaSystem()->GetTrayIndexMap();
|
||||
int default_ams_id = tray_ams_slot_map.find(tray_id) != tray_ams_slot_map.end() ? tray_ams_slot_map[tray_id].first : -1;
|
||||
int default_slot_id = tray_ams_slot_map.find(tray_id) != tray_ams_slot_map.end() ? tray_ams_slot_map[tray_id].second : -1;
|
||||
|
||||
int ams_id = jj.value("ams_id", default_ams_id);
|
||||
int slot_id = jj.value("slot_id", default_slot_id);
|
||||
|
||||
BOOST_LOG_TRIVIAL(trace) << "extrusion_cali_sel: illegal ams_id = " << ams_id << "slot_id = " << slot_id;
|
||||
|
||||
std::vector<DevAmsTray> &vt_slot = GetOwner()->vt_slot;
|
||||
if (ams_id == VIRTUAL_TRAY_MAIN_ID && vt_slot.size() > 0) {
|
||||
vt_slot[MAIN_EXTRUDER_ID].cali_idx = jj.value("cali_idx", vt_slot[MAIN_EXTRUDER_ID].cali_idx);
|
||||
vt_slot[MAIN_EXTRUDER_ID].set_hold_count();
|
||||
} else if (ams_id == VIRTUAL_TRAY_DEPUTY_ID && vt_slot.size() > 1) {
|
||||
vt_slot[DEPUTY_EXTRUDER_ID].cali_idx = jj.value("cali_idx", vt_slot[DEPUTY_EXTRUDER_ID].cali_idx);
|
||||
vt_slot[DEPUTY_EXTRUDER_ID].set_hold_count();
|
||||
} else {
|
||||
auto tray_item = GetOwner()->GetFilaSystem()->GetAmsTray(std::to_string(ams_id), std::to_string(slot_id));
|
||||
if (tray_item) {
|
||||
tray_item->cali_idx = jj.value("cali_idx", tray_item->cali_idx);
|
||||
tray_item->set_hold_count();
|
||||
}
|
||||
}
|
||||
} catch(...){
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void DevCalib::ExtrusionCalibGetTableParse(const json &jj){
|
||||
if (GetPAHistoryStatus() == CalibStatus::REQUEST ) {
|
||||
m_pa_table_status = CalibStatus::WAITING;
|
||||
|
||||
/* request success */
|
||||
if (!(jj.contains("result") && jj.contains("reason") && jj["result"].get<std::string>() == "fail")) {
|
||||
SyncCalibVersion();
|
||||
m_pa_table_status = CalibStatus::FINISHED;
|
||||
}
|
||||
|
||||
try{
|
||||
json filaments_json;
|
||||
if(jj.contains("filaments"))
|
||||
{
|
||||
/* fill item->nozzle_diameter with command->nozzle_diameter */
|
||||
filaments_json = jj["filaments"];
|
||||
for (auto &f : filaments_json) {
|
||||
if (!f.contains("nozzle_diameter") && jj.contains("nozzle_diameter")) {
|
||||
f["nozzle_diameter"] = jj["nozzle_diameter"];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
m_pa_calib_tab = filaments_json.get<std::vector<PACalibResult>>();
|
||||
|
||||
/* filter invalid pa_calib_tab */
|
||||
m_pa_calib_tab.erase(std::remove_if(m_pa_calib_tab.begin(), m_pa_calib_tab.end(), [](auto &res) { return res.k_value < 0.0f || res.k_value > 10.0f; }), m_pa_calib_tab.end());
|
||||
|
||||
if (m_pa_calib_tab.empty()) { BOOST_LOG_TRIVIAL(info) << "empty pa calib history"; }
|
||||
}catch(...){
|
||||
m_pa_calib_tab.clear();
|
||||
BOOST_LOG_TRIVIAL(error) << "pa calib history missing fields, current json:\n "<< jj.dump();
|
||||
}
|
||||
// notify cali history to update
|
||||
}
|
||||
}
|
||||
|
||||
void DevCalib::ExtrusionCalibGetResultParse(const json &jj)
|
||||
{
|
||||
m_pa_results_status = CalibStatus::WAITING;
|
||||
|
||||
if (!(jj.contains("result") && jj.contains("reason") && jj["result"].get<std::string>() == "fail" && jj.contains("err_code"))) {
|
||||
m_pa_results_status = CalibStatus::FINISHED;
|
||||
}
|
||||
|
||||
try {
|
||||
json filaments_json;
|
||||
if(jj.contains("filaments"))
|
||||
{
|
||||
/* fill item->nozzle_diameter with command->nozzle_diameter */
|
||||
filaments_json = jj["filaments"];
|
||||
for (auto &f : filaments_json) {
|
||||
if (!f.contains("nozzle_diameter") && jj.contains("nozzle_diameter") ) {
|
||||
f["nozzle_diameter"] = jj["nozzle_diameter"];
|
||||
}
|
||||
|
||||
if (IsSupportNewAutoCali()) {
|
||||
auto ams_id = f.value("ams_id", 0);
|
||||
auto slot_id = f.value("slot_id", 0);
|
||||
if(f.contains("tray_id")){
|
||||
// Orca: Orca's DevFilaSystem has no GetTrayIdByAmsSlotId; mirror its
|
||||
// semantics via a reverse lookup over GetTrayIndexMap() (correct for
|
||||
// non-4-slot AMS layouts, unlike a fixed ams_id*4+slot_id formula).
|
||||
int mapped_tray_id = -1;
|
||||
const auto tray_ams_slot_map = GetOwner()->GetFilaSystem()->GetTrayIndexMap();
|
||||
for (const auto& item : tray_ams_slot_map) {
|
||||
if (item.second.first == ams_id && item.second.second == slot_id) {
|
||||
mapped_tray_id = item.first;
|
||||
break;
|
||||
}
|
||||
}
|
||||
f["tray_id"] = mapped_tray_id;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
m_pa_calib_results = filaments_json.get<std::vector<PACalibResult>>();
|
||||
|
||||
m_pa_calib_results.erase(std::remove_if(m_pa_calib_results.begin(), m_pa_calib_results.end(), [](auto &res) { return res.k_value < 0.0f || res.k_value > 10.0f; }), m_pa_calib_results.end());
|
||||
|
||||
if (m_pa_calib_results.empty()) { BOOST_LOG_TRIVIAL(info) << "empty pa calib result"; }
|
||||
} catch (...) {
|
||||
m_pa_calib_results.clear();
|
||||
BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << "pa calibration results missing fileds, current json: \n"<<jj.dump();
|
||||
}
|
||||
}
|
||||
|
||||
void DevCalib::FlowrateGetResultParse(const json &jj){
|
||||
m_flow_results_status = CalibStatus::FINISHED;
|
||||
m_flow_ratio_results.clear();
|
||||
|
||||
if(!jj.contains("filaments")) return;
|
||||
|
||||
try {
|
||||
m_flow_ratio_results = jj["filaments"].get<std::vector<FlowRatioCalibResult>>();
|
||||
} catch (...) {
|
||||
BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << "flow ratio calibration results missing fileds, current json:\n"<<jj.dump();
|
||||
}
|
||||
}
|
||||
|
||||
void DevCalib::ParseV1_0(const json &jj, DevCalib *system, bool key_field_only)
|
||||
{
|
||||
if(!jj.contains("command")) return;
|
||||
|
||||
if (jj["command"].get<std::string>() == "extrusion_cali" || jj["command"].get<std::string>() == "flowrate_cali") {
|
||||
if (jj.contains("result")) {
|
||||
if (jj["result"].get<std::string>() == "success") {
|
||||
} else if (jj["result"].get<std::string>() == "fail") {
|
||||
std::string cali_mode = jj["command"].get<std::string>();
|
||||
std::string reason = jj["reason"].get<std::string>();
|
||||
calib_fail_message(system->GetOwner(), cali_mode, reason);
|
||||
}
|
||||
}
|
||||
} else if (jj["command"].get<std::string>() == "extrusion_cali_set") {
|
||||
system->ExtrusionCalibSetParse(jj);
|
||||
} else if (jj["command"].get<std::string>() == "extrusion_cali_sel") {
|
||||
system->ExtrusionCalibSelectParse(jj);
|
||||
} else if (jj["command"].get<std::string>() == "extrusion_cali_get") {
|
||||
system->ExtrusionCalibGetTableParse(jj);
|
||||
} else if (jj["command"].get<std::string>() == "extrusion_cali_get_result") {
|
||||
system->ExtrusionCalibGetResultParse(jj);
|
||||
} else if (jj["command"].get<std::string>() == "flowrate_get_result" && !key_field_only) {
|
||||
system->FlowrateGetResultParse(jj);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace Slic3r
|
||||
@@ -1,127 +0,0 @@
|
||||
#pragma once
|
||||
#include <nlohmann/json.hpp>
|
||||
#include "slic3r/Utils/json_diff.hpp"
|
||||
|
||||
|
||||
#include "DevDefs.h"
|
||||
#include "libslic3r/calib.hpp" // Orca: lowercase filename (Linux case-sensitive)
|
||||
|
||||
|
||||
namespace Slic3r {
|
||||
|
||||
class MachineObject;
|
||||
|
||||
|
||||
enum class CalibStatus{
|
||||
IDLE = 0,
|
||||
REQUEST,
|
||||
WAITING,
|
||||
FINISHED,
|
||||
};
|
||||
|
||||
enum class ManualPaCaliMethod {
|
||||
PA_LINE = 0,
|
||||
PA_PATTERN,
|
||||
};
|
||||
|
||||
class DevCalib
|
||||
{
|
||||
protected:
|
||||
bool m_support_new_auto_cali{false};
|
||||
int m_calib_version {-1};
|
||||
std::optional<int> m_last_calib_version;
|
||||
|
||||
public:
|
||||
DevCalib(MachineObject *obj) : m_owner(obj){};
|
||||
MachineObject* GetOwner() const {return m_owner; };
|
||||
|
||||
void RequestPAResult();
|
||||
CalibStatus GetPAResultStatus() const {return m_pa_results_status;}
|
||||
bool IsPAResultReady() const { return m_pa_results_status == CalibStatus::FINISHED;}
|
||||
void ResetPAResult();
|
||||
|
||||
/* calib history */
|
||||
int RequestPAHistory(const PACalibExtruderInfo &calib_info);
|
||||
CalibStatus GetPAHistoryStatus() const {return m_pa_table_status;}
|
||||
bool IsPAHistoryReady() const { return m_pa_table_status == CalibStatus::FINISHED;}
|
||||
void ResetPAHistory();
|
||||
|
||||
void RequestFlowRateResult();
|
||||
CalibStatus GetFlowRateResultStatus() const {return m_flow_results_status;}
|
||||
bool IsFlowRateReady() const { return m_flow_results_status == CalibStatus::FINISHED;}
|
||||
void ResetFlowRateResult();
|
||||
|
||||
int GetCalibVersion() const {return m_calib_version;}
|
||||
void SyncCalibVersion() { if (IsVersionInited()) { m_last_calib_version = m_calib_version; } }
|
||||
void ResetCalibVersion() {m_last_calib_version.reset();}
|
||||
bool IsVersionExpired() const;
|
||||
bool IsVersionInited() const { return m_calib_version > -1;}
|
||||
|
||||
bool IsSupportNewAutoCali() const {return m_support_new_auto_cali;}
|
||||
|
||||
public:
|
||||
void SetStashCalibFinished(bool finished) {m_calib_finished = finished;}
|
||||
bool GetStashCalibFinished() { return m_calib_finished;}
|
||||
|
||||
void SetStashFlowRatio(float ratio) { m_flow_ratio = ratio;}
|
||||
float GetStashFlowRatio() const {return m_flow_ratio;}
|
||||
|
||||
FlowRatioCalibrationType GetFlowRatioCalibType() {return m_flow_ratio_calibration_type;}
|
||||
void SetFlowRatioCalibType(const FlowRatioCalibrationType &type) { m_flow_ratio_calibration_type = type; }
|
||||
|
||||
ManualPaCaliMethod GetManualPaCalibMethod() {return m_manual_pa_cali_method;}
|
||||
void SetManualPaCalibMethod(const ManualPaCaliMethod& method) { m_manual_pa_cali_method = method;}
|
||||
|
||||
NozzleDiameterType GetSelectedNozzleDiameter() {return m_selected_nozzle_diameter;}
|
||||
void SetSelectedNozzleDiameter(const NozzleDiameterType& diameter) { m_selected_nozzle_diameter = diameter;}
|
||||
|
||||
std::vector<CaliPresetInfo> GetSelectedCalibPreset() {return m_selected_calib_preset;}
|
||||
void ResetSelectedCalibPreset() { m_selected_calib_preset.clear();}
|
||||
void SetSelectedCalibPreset(const std::vector<CaliPresetInfo>& preset) { m_selected_calib_preset = preset;}
|
||||
|
||||
std::vector<PACalibResult> GetPAHistory() const {return m_pa_calib_tab; }
|
||||
std::vector<PACalibResult> GetPAResult() const {return m_pa_calib_results; }
|
||||
std::vector<FlowRatioCalibResult> GetFlowRatioResult() const {return m_flow_ratio_results; }
|
||||
|
||||
protected:
|
||||
void ExtrusionCalibSetParse(const json &jj);
|
||||
void ExtrusionCalibSelectParse(const json &jj);
|
||||
void ExtrusionCalibGetTableParse(const json &jj);
|
||||
void ExtrusionCalibGetResultParse(const json &jj);
|
||||
void FlowrateGetResultParse(const json &jj);
|
||||
|
||||
private:
|
||||
MachineObject* m_owner{nullptr};
|
||||
|
||||
std::vector<PACalibResult> m_pa_calib_tab;
|
||||
std::vector<PACalibResult> m_pa_calib_results;
|
||||
std::vector<FlowRatioCalibResult> m_flow_ratio_results;
|
||||
|
||||
CalibStatus m_pa_results_status{CalibStatus::IDLE};
|
||||
CalibStatus m_pa_table_status{CalibStatus::IDLE};
|
||||
CalibStatus m_flow_results_status{CalibStatus::IDLE};
|
||||
|
||||
FlowRatioCalibrationType m_flow_ratio_calibration_type{FlowRatioCalibrationType::COMPLETE_CALIBRATION};
|
||||
ManualPaCaliMethod m_manual_pa_cali_method{ManualPaCaliMethod::PA_LINE};
|
||||
|
||||
// calibration page selected info
|
||||
// 1: record when start calibration in preset page
|
||||
// 2: reset when start calibration in start page
|
||||
// 3: save tray_id, filament_id, setting_id, and name, nozzle_dia
|
||||
// std::vector<CaliPresetInfo> selected_cali_preset;
|
||||
NozzleDiameterType m_selected_nozzle_diameter{NozzleDiameterType::NONE_DIAMETER_TYPE};
|
||||
std::vector<CaliPresetInfo> m_selected_calib_preset;
|
||||
|
||||
// stash calibrating info
|
||||
float m_flow_ratio { 0.0 };
|
||||
bool m_calib_finished{false};
|
||||
|
||||
public:
|
||||
static void ParseCalibVersion(const json& j, DevCalib* system);
|
||||
|
||||
static void ParseSupportNewAutoCalib(int flag, DevCalib* system);
|
||||
|
||||
static void ParseV1_0(const json& print_json, DevCalib* system, bool key_field_only);
|
||||
};
|
||||
|
||||
} // namespace Slic3r
|
||||
@@ -1,50 +0,0 @@
|
||||
#include "DevChamber.h"
|
||||
|
||||
#include "DevConfig.h"
|
||||
#include "DevUtil.h"
|
||||
|
||||
#include "slic3r/GUI/DeviceManager.hpp"
|
||||
|
||||
namespace Slic3r {
|
||||
|
||||
bool DevChamber::HasChamber() const { return m_owner->GetConfig()->HasChamber(); }
|
||||
|
||||
bool DevChamber::SupportChamberTempDisplay() const { return m_owner->GetConfig()->SupportChamberTempDisplay();}
|
||||
|
||||
bool DevChamber::SupportChamberEdit() const { return m_owner->GetConfig()->SupportChamberEdit(); }
|
||||
|
||||
int DevChamber::GetChamberTempEditMin() const { return m_owner->GetConfig()->GetChamberTempEditMin(); }
|
||||
|
||||
int DevChamber::GetChamberTempEditMax() const { return m_owner->GetConfig()->GetChamberTempEditMax(); }
|
||||
|
||||
int DevChamber::GetChamberTempSwitchHeat() const { return m_owner->GetConfig()->GetChamberTempSwitchHeat(); }
|
||||
|
||||
void DevChamber::ParseChamber(const json &print_json)
|
||||
{
|
||||
ParseChamberV1_0(print_json);
|
||||
ParseChamberV2_0(print_json);
|
||||
}
|
||||
|
||||
void DevChamber::ParseChamberV1_0(const json &print_json)
|
||||
{
|
||||
DevJsonValParser::ParseVal(print_json, "chamber_temper", m_temp);
|
||||
DevJsonValParser::ParseVal(print_json, "ctt", m_temp_target);
|
||||
}
|
||||
|
||||
void DevChamber::ParseChamberV2_0(const json &print_json)
|
||||
{
|
||||
if (print_json.contains("device")) {
|
||||
const json &device_jj = print_json["device"];
|
||||
if (device_jj.contains("ctc")) {
|
||||
const json &ctc = device_jj["ctc"];
|
||||
int state = DevUtil::get_flag_bits(ctc["state"].get<int>(), 0, 4);
|
||||
if (ctc.contains("info")) {
|
||||
const json &info = ctc["info"];
|
||||
m_temp = DevUtil::get_flag_bits(info["temp"].get<int>(), 0, 16);
|
||||
m_temp_target = DevUtil::get_flag_bits(info["temp"].get<int>(), 16, 16);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace Slic3r
|
||||
@@ -1,44 +0,0 @@
|
||||
#pragma once
|
||||
#include <nlohmann/json.hpp>
|
||||
#include "slic3r/Utils/json_diff.hpp"
|
||||
|
||||
namespace Slic3r {
|
||||
|
||||
class MachineObject;
|
||||
|
||||
class DevChamber
|
||||
{
|
||||
public:
|
||||
static std::shared_ptr<DevChamber> Create(MachineObject *obj) { return std::shared_ptr<DevChamber>( new DevChamber(obj)); }
|
||||
|
||||
public: // getter
|
||||
bool HasChamber() const;
|
||||
bool SupportChamberTempDisplay() const;
|
||||
bool SupportChamberEdit() const;
|
||||
int GetChamberTempEditMin() const;
|
||||
int GetChamberTempEditMax() const;
|
||||
int GetChamberTempSwitchHeat() const;
|
||||
|
||||
float GetChamberTemp() const { return m_temp; };
|
||||
float GetChamberTempTarget() const { return m_temp_target; };
|
||||
|
||||
public:
|
||||
// setter
|
||||
void ParseChamber(const json &print_json);
|
||||
|
||||
void ParseChamberV1_0(const json& print_json);
|
||||
void ParseChamberV2_0(const json& print_json);
|
||||
|
||||
// control
|
||||
int CtrlSetChamberTemp(int temp);
|
||||
|
||||
protected:
|
||||
DevChamber(MachineObject *obj) : m_owner(obj) {}
|
||||
|
||||
private:
|
||||
float m_temp = 0.0f;
|
||||
float m_temp_target = 0.0f;
|
||||
MachineObject* m_owner = nullptr;
|
||||
};
|
||||
|
||||
} // namespace Slic3r
|
||||
@@ -1,16 +0,0 @@
|
||||
#include "DevChamber.h"
|
||||
#include "slic3r/GUI/DeviceManager.hpp"
|
||||
|
||||
namespace Slic3r {
|
||||
|
||||
int DevChamber::CtrlSetChamberTemp(int temp)
|
||||
{
|
||||
json j;
|
||||
j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++);
|
||||
j["print"]["command"] = "set_ctt";
|
||||
j["print"]["ctt_val"] = temp;
|
||||
|
||||
return m_owner->publish_json(j, 1);
|
||||
}
|
||||
|
||||
} // namespace Slic3r
|
||||
@@ -8,30 +8,17 @@ using namespace nlohmann;
|
||||
namespace Slic3r
|
||||
{
|
||||
|
||||
bool DevConfig::SupportChamberTempDisplay() const
|
||||
{
|
||||
if (!m_support_chamber_temp_display.has_value()) {
|
||||
return m_has_chamber;
|
||||
}
|
||||
|
||||
return m_support_chamber_temp_display.value();
|
||||
}
|
||||
|
||||
void DevConfig::ParseConfig(const json& print_json)
|
||||
{
|
||||
ParseChamberConfig(print_json);
|
||||
ParsePrintOptionsConfig(print_json);
|
||||
ParseCalibrationConfig(print_json);
|
||||
|
||||
}
|
||||
|
||||
void DevConfig::ParseChamberConfig(const json& print_json)
|
||||
{
|
||||
DevJsonValParser::ParseVal(print_json, "support_chamber", m_has_chamber);
|
||||
|
||||
if (print_json.contains("support_chamber_temp_display")) {
|
||||
m_support_chamber_temp_display = DevJsonValParser::GetVal<bool>(print_json, "support_chamber_temp_display");
|
||||
}
|
||||
|
||||
DevJsonValParser::ParseVal(print_json, "support_chamber_temp_edit", m_support_chamber_edit);
|
||||
if (m_support_chamber_edit)
|
||||
{
|
||||
|
||||
@@ -3,9 +3,8 @@
|
||||
|
||||
#include "slic3r/Utils/json_diff.hpp"
|
||||
#include <wx/string.h>
|
||||
|
||||
#include <limits>
|
||||
#include <optional>
|
||||
|
||||
|
||||
namespace Slic3r
|
||||
{
|
||||
@@ -23,7 +22,6 @@ public:
|
||||
public:
|
||||
// chamber
|
||||
bool HasChamber() const { return m_has_chamber; }
|
||||
bool SupportChamberTempDisplay() const;
|
||||
bool SupportChamberEdit() const { return m_support_chamber_edit; }
|
||||
int GetChamberTempEditMin() const { return m_chamber_temp_edit_min; }
|
||||
int GetChamberTempEditMax() const { return m_chamber_temp_edit_max; }
|
||||
@@ -59,7 +57,6 @@ private:
|
||||
/*configure vals*/
|
||||
// chamber
|
||||
bool m_has_chamber = false; // whether the machine has a chamber
|
||||
std::optional<bool> m_support_chamber_temp_display;
|
||||
bool m_support_chamber_edit = false;
|
||||
int m_chamber_temp_edit_min = 0;
|
||||
int m_chamber_temp_edit_max = 60;
|
||||
|
||||
@@ -1,41 +1,16 @@
|
||||
#include "DevConfigUtil.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <cctype>
|
||||
|
||||
#include <wx/dir.h>
|
||||
#include <boost/filesystem/operations.hpp>
|
||||
#include "../I18N.hpp"
|
||||
#include <boost/filesystem.hpp>
|
||||
|
||||
using namespace nlohmann;
|
||||
|
||||
namespace Slic3r
|
||||
{
|
||||
|
||||
// Translation markers for xgettext extraction.
|
||||
// These strings are configured in printers/*.json (tool_head_display_names)
|
||||
// and passed to _L() at runtime. xgettext cannot scan dynamic strings,
|
||||
// so we mark them here with L() for extraction into .pot file.
|
||||
// This block is never executed at runtime.
|
||||
static void _toolhead_translation_markers()
|
||||
{
|
||||
// Dynamic toolhead display names from JSON config — xgettext cannot scan these
|
||||
L("Main Extruder"); L("Main extruder"); L("main extruder");
|
||||
L("Auxiliary Extruder"); L("Auxiliary extruder"); L("auxiliary extruder");
|
||||
L("Left Extruder"); L("Left extruder"); L("left extruder");
|
||||
L("Right Extruder"); L("Right extruder"); L("right extruder");
|
||||
L("Main Nozzle"); L("Main nozzle"); L("main nozzle");
|
||||
L("Auxiliary Nozzle"); L("Auxiliary nozzle"); L("auxiliary nozzle");
|
||||
L("Left Nozzle"); L("Left nozzle"); L("left nozzle");
|
||||
L("Right Nozzle"); L("Right nozzle"); L("right nozzle");
|
||||
L("Main Hotend"); L("Main hotend"); L("main hotend");
|
||||
L("Auxiliary Hotend"); L("Auxiliary hotend"); L("auxiliary hotend");
|
||||
L("Left Hotend"); L("Left hotend"); L("left hotend");
|
||||
L("Right Hotend"); L("Right hotend"); L("right hotend");
|
||||
// standalone position words (short_name=true runtime results)
|
||||
L("main"); L("auxiliary");
|
||||
L("Main"); L("Auxiliary");
|
||||
L("left"); L("right");
|
||||
L("Left"); L("Right");
|
||||
}
|
||||
|
||||
std::string DevPrinterConfigUtil::m_resource_file_path = "";
|
||||
|
||||
|
||||
@@ -116,7 +91,7 @@ std::string DevPrinterConfigUtil::get_filament_load_img(const std::string &type_
|
||||
{
|
||||
if (has_nozzle_rack)
|
||||
{
|
||||
const auto &rack_vec = get_value_from_config<std::vector<std::string>>(type_str, "filament_load_image_nozzle_rack") ;
|
||||
const auto &rack_vec = get_value_from_config<std::vector<std::string>>(type_str, "filament_load_image_nozzle_rack");
|
||||
if (!rack_vec.empty())
|
||||
{
|
||||
if (ext_id >= 0 && static_cast<size_t>(ext_id) < rack_vec.size())
|
||||
@@ -136,6 +111,7 @@ std::string DevPrinterConfigUtil::get_filament_load_img(const std::string &type_
|
||||
|
||||
std::string DevPrinterConfigUtil::get_fan_text(const std::string& type_str, const std::string& key)
|
||||
{
|
||||
std::vector<std::string> filaments;
|
||||
std::string config_file = m_resource_file_path + "/printers/" + type_str + ".json";
|
||||
boost::nowide::ifstream json_file(config_file.c_str());
|
||||
try
|
||||
@@ -158,25 +134,6 @@ std::string DevPrinterConfigUtil::get_fan_text(const std::string& type_str, cons
|
||||
return std::string();
|
||||
}
|
||||
|
||||
std::vector<std::string> DevPrinterConfigUtil::get_fan_text_params(const std::string& type_str, const std::string& key)
|
||||
{
|
||||
std::string config_file = m_resource_file_path + "/printers/" + type_str + ".json";
|
||||
boost::nowide::ifstream json_file(config_file.c_str());
|
||||
try {
|
||||
json jj;
|
||||
if (json_file.is_open()) {
|
||||
json_file >> jj;
|
||||
if (jj.contains("00.00.00.00")) {
|
||||
json const& printer = jj["00.00.00.00"];
|
||||
if (printer.contains("fan") && printer["fan"].contains(key)) {
|
||||
return printer["fan"][key].get<std::vector<std::string>>();
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (...) {}
|
||||
return std::vector<std::string>();
|
||||
}
|
||||
|
||||
std::string DevPrinterConfigUtil::get_fan_text(const std::string& type_str, int airduct_mode, int airduct_func, int submode)
|
||||
{
|
||||
std::vector<std::string> filaments;
|
||||
@@ -224,36 +181,6 @@ std::string DevPrinterConfigUtil::get_fan_text(const std::string& type_str, int
|
||||
return std::string();
|
||||
}
|
||||
|
||||
std::string DevPrinterConfigUtil::get_fan_mode_text(const std::string& type_str, int airduct_mode, const std::string& key)
|
||||
{
|
||||
std::vector<std::string> filaments;
|
||||
std::string config_file = m_resource_file_path + "/printers/" + type_str + ".json";
|
||||
boost::nowide::ifstream json_file(config_file.c_str());
|
||||
try {
|
||||
json jj;
|
||||
if (json_file.is_open()) {
|
||||
json_file >> jj;
|
||||
if (jj.contains("00.00.00.00")) {
|
||||
json const& printer = jj["00.00.00.00"];
|
||||
if (!printer.contains("fan")) {
|
||||
return std::string();
|
||||
}
|
||||
|
||||
json const& fan_item = printer["fan"];
|
||||
const auto& airduct_mode_str = std::to_string(airduct_mode);
|
||||
if (!fan_item.contains(airduct_mode_str)) {
|
||||
return std::string();
|
||||
}
|
||||
|
||||
if (fan_item[airduct_mode_str].contains(key)) {
|
||||
return fan_item[airduct_mode_str][key].get<std::string>();
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (...) {}
|
||||
return std::string();
|
||||
}
|
||||
|
||||
std::map<std::string, std::vector<std::string>> DevPrinterConfigUtil::get_all_subseries(std::string type_str)
|
||||
{
|
||||
std::map<std::string, std::vector<std::string>> subseries;
|
||||
@@ -357,29 +284,18 @@ std::string DevPrinterConfigUtil::get_toolhead_display_name(
|
||||
{ ToolHeadComponent::Hotend, "hotend" }
|
||||
};
|
||||
|
||||
int case_index = static_cast<int>(name_case); // 0, 1, 2
|
||||
|
||||
// Try to read from printer config json
|
||||
auto names_json = get_value_from_config<json>(type_str, "tool_head_display_names");
|
||||
std::string role_key = std::to_string(ext_id); // "0" or "1"
|
||||
const int case_index = static_cast<int>(name_case);
|
||||
const std::string role_key = std::to_string(ext_id);
|
||||
const std::string& comp_key = comp_keys.at(component);
|
||||
|
||||
std::string result;
|
||||
|
||||
if (!names_json.is_null()
|
||||
&& names_json.contains(role_key)
|
||||
&& names_json[role_key].contains(comp_key))
|
||||
{
|
||||
auto names_json = get_value_from_config<json>(type_str, "tool_head_display_names");
|
||||
if (!names_json.is_null() && names_json.contains(role_key) && names_json[role_key].contains(comp_key)) {
|
||||
auto& arr = names_json[role_key][comp_key];
|
||||
if (arr.is_array() && case_index < static_cast<int>(arr.size())) {
|
||||
if (arr.is_array() && case_index < static_cast<int>(arr.size()))
|
||||
result = arr[case_index].get<std::string>();
|
||||
}
|
||||
}
|
||||
|
||||
// Orca: models that ship no tool_head_display_names (e.g. H2D/H2S) must still get distinct
|
||||
// per-extruder labels, so fall back to the previous programmatic Left/Right construction.
|
||||
// Engages only when the config lookup above yields nothing, so models that ship the key
|
||||
// behave exactly like the reference.
|
||||
if (result.empty()) {
|
||||
const std::string side = ext_id == DEPUTY_EXTRUDER_ID ? "Left" : "Right";
|
||||
const std::string component_name = component == ToolHeadComponent::Extruder ? "Extruder" :
|
||||
@@ -391,15 +307,13 @@ std::string DevPrinterConfigUtil::get_toolhead_display_name(
|
||||
std::transform(result.begin(), result.end(), result.begin(), [](unsigned char c) { return static_cast<char>(std::tolower(c)); });
|
||||
}
|
||||
|
||||
// short_name: return only the role prefix (e.g. "Main" from "Main Nozzle")
|
||||
if (short_name) {
|
||||
auto sp = result.find(' ');
|
||||
if (sp != std::string::npos) {
|
||||
if (sp != std::string::npos)
|
||||
result = result.substr(0, sp);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
@@ -11,8 +11,6 @@
|
||||
#include <string>
|
||||
#include <map>
|
||||
#include <vector>
|
||||
#include <algorithm>
|
||||
#include <cctype>
|
||||
|
||||
#include <boost/log/trivial.hpp>
|
||||
#include <boost/nowide/fstream.hpp>
|
||||
@@ -25,20 +23,6 @@
|
||||
namespace Slic3r
|
||||
{
|
||||
|
||||
/// Toolhead component type (extruder / nozzle / hotend)
|
||||
enum class ToolHeadComponent {
|
||||
Extruder,
|
||||
Nozzle,
|
||||
Hotend
|
||||
};
|
||||
|
||||
/// Name case style for toolhead display names
|
||||
enum class ToolHeadNameCase {
|
||||
TitleCase = 0, // [0] "Main Extruder" — panel titles, section headers
|
||||
SentenceCase = 1, // [1] "Main extruder" — static box labels
|
||||
LowerCase = 2 // [2] "main extruder" — inline text, sentence concatenation
|
||||
};
|
||||
|
||||
class dePrinterConfigFactory
|
||||
{
|
||||
public:
|
||||
@@ -46,6 +30,17 @@ public:
|
||||
~dePrinterConfigFactory() = default;
|
||||
};
|
||||
|
||||
enum class ToolHeadComponent {
|
||||
Extruder,
|
||||
Nozzle,
|
||||
Hotend
|
||||
};
|
||||
|
||||
enum class ToolHeadNameCase {
|
||||
TitleCase = 0,
|
||||
SentenceCase = 1,
|
||||
LowerCase = 2
|
||||
};
|
||||
|
||||
class DevPrinterConfigUtil
|
||||
{
|
||||
@@ -79,19 +74,14 @@ public:
|
||||
static std::string get_printer_use_ams_type(std::string type_str) { return get_value_from_config<std::string>(type_str, "use_ams_type"); }
|
||||
static std::string get_printer_ams_img(const std::string& type_str) { return get_value_from_config<std::string>(type_str, "printer_use_ams_image"); }
|
||||
static std::string get_printer_ext_img(const std::string& type_str, int pos);//printer_ext_image
|
||||
static bool support_ams_fila_change_abort(std::string type_str) { return get_value_from_config<bool>(type_str, "print", "support_ams_filament_change_abort"); }
|
||||
static std::string get_filament_load_img(const std::string &type_str, int ext_id, bool has_nozzle_rack = false);
|
||||
|
||||
/*fan*/
|
||||
static std::string get_fan_text(const std::string& type_str, const std::string& key);
|
||||
static std::vector<std::string> get_fan_text_params(const std::string& type_str, const std::string& key);
|
||||
static std::string get_fan_text(const std::string& type_str, const std::string& key);
|
||||
static std::string get_fan_text(const std::string& type_str, int airduct_mode, int airduct_func, int submode);
|
||||
static std::string get_fan_mode_text(const std::string& type_str, int airduct_mode, const std::string& key);
|
||||
|
||||
/*extruder*/
|
||||
static bool get_printer_can_set_nozzle(std::string type_str) { return get_value_from_config<bool>(type_str, "enable_set_nozzle_info"); }// can set nozzle from studio
|
||||
|
||||
/*toolhead display names (extruder / nozzle / hotend)*/
|
||||
static std::string get_toolhead_display_name(
|
||||
const std::string& type_str,
|
||||
int ext_id,
|
||||
@@ -100,15 +90,10 @@ public:
|
||||
bool short_name = false);
|
||||
|
||||
/*print job*/
|
||||
static bool support_print_check_firmware_for_tpu_left(std::string type_str){ return get_value_from_config<bool>(type_str, "print", "support_print_check_firmware_for_tpu_left"); }
|
||||
static bool support_user_first_setup_tpu_check(std::string type_str){ return get_value_from_config<bool>(type_str, "print", "support_user_first_setup_tpu_check"); }
|
||||
static std::string support_user_first_setup_tpu_check_url(std::string type_str){ return get_value_from_config<std::string>(type_str, "print", "support_user_first_setup_tpu_check_url"); }
|
||||
static bool support_ams_ext_mix_print(std::string type_str) { return get_value_from_config<bool>(type_str, "print", "support_ams_ext_mix_print"); }
|
||||
static bool support_print_time_estimate_warning(std::string type_str) { return get_value_from_config<bool>(type_str, "print", "support_print_time_estimate_warning"); }
|
||||
|
||||
/*calibration*/
|
||||
static std::vector<std::string> get_unsupport_auto_cali_filaments(std::string type_str) { return get_value_from_config<std::vector<std::string>>(type_str, "auto_cali_not_support_filaments"); }
|
||||
static bool support_disable_cali_flow_type(std::string type_str) { return get_value_from_config<bool>(type_str,"support_disable_cali_flow_type"); }
|
||||
|
||||
/*detection*/
|
||||
static bool support_wrapping_detection(const std::string& type_str) { return get_value_from_config<bool>(type_str, "support_wrapping_detection"); }
|
||||
@@ -118,10 +103,6 @@ public:
|
||||
|
||||
/*print check*/
|
||||
static bool support_print_check_extension_fan_f000_mounted(const std::string& type_str) { return get_value_from_config<bool>(type_str, "print", "support_print_check_extension_fan_f000_mounted"); }
|
||||
static std::string air_print_detection_position(const std::string &type_str) { return get_value_from_config<std::string>(type_str, "air_print_detection_position"); }
|
||||
|
||||
/*bed*/
|
||||
static int get_bed_temperature_limit(const std::string &type_str) { return get_value_from_config<int>(type_str, "print", "bed_temperature_limit"); }
|
||||
|
||||
public:
|
||||
template<typename T>
|
||||
@@ -145,7 +126,7 @@ public:
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (...) { assert(0 && "get_value_from_config failed"); BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << " failed"; }// there are file errors
|
||||
catch (...) { assert(0 && "get_value_from_config failed"); BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << " failed"; }// there are file errors
|
||||
return T();
|
||||
};
|
||||
|
||||
@@ -197,7 +178,7 @@ public:
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (...) { assert(0 && "get_json_from_config failed"); BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << " failed"; }// there are file errors
|
||||
catch (...) { assert(0 && "get_json_from_config failed"); BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << " failed"; }// there are file errors
|
||||
return nlohmann::json();
|
||||
}
|
||||
|
||||
@@ -206,25 +187,35 @@ private:
|
||||
};
|
||||
|
||||
/*special transform*/
|
||||
static std::string _parse_printer_type(const std::string &type_str)
|
||||
static std::string _parse_printer_type(const std::string& type_str)
|
||||
{
|
||||
static std::unordered_map<std::string, std::string> s_printer_type_lazy_cache;
|
||||
|
||||
if (type_str == "3DPrinter-X1") return "BL-P002";
|
||||
if (type_str == "3DPrinter-X1-Carbon") return "BL-P001";
|
||||
if (type_str == "BL-P001" || type_str == "BL-P002") return type_str;
|
||||
|
||||
auto cache_it = s_printer_type_lazy_cache.find(type_str);
|
||||
if (cache_it != s_printer_type_lazy_cache.end()) {
|
||||
return cache_it->second;
|
||||
if (type_str.compare("3DPrinter-X1") == 0)
|
||||
{
|
||||
return "BL-P002";
|
||||
}
|
||||
std::string result = DevPrinterConfigUtil::get_printer_type(type_str);
|
||||
if (!result.empty()) {
|
||||
s_printer_type_lazy_cache[type_str] = result;
|
||||
return result;
|
||||
else if (type_str.compare("3DPrinter-X1-Carbon") == 0)
|
||||
{
|
||||
return "BL-P001";
|
||||
}
|
||||
else if (type_str.compare("BL-P001") == 0)
|
||||
{
|
||||
return type_str;
|
||||
}
|
||||
else if (type_str.compare("BL-P002") == 0)
|
||||
{
|
||||
return type_str;
|
||||
}
|
||||
else
|
||||
{
|
||||
std::string result = DevPrinterConfigUtil::get_printer_type(type_str);
|
||||
if (!result.empty())
|
||||
{
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << " Unsupported printer type: " << type_str;
|
||||
return type_str;
|
||||
}
|
||||
|
||||
};// namespace Slic3r
|
||||
};// namespace Slic3r
|
||||
|
||||
@@ -10,21 +10,12 @@
|
||||
|
||||
#pragma once
|
||||
#include <string>
|
||||
#include <nlohmann/json.hpp>
|
||||
|
||||
// Reserved for future usage
|
||||
#define DEV_RESERVED_FOR_FUTURE(...) /* stripped */
|
||||
|
||||
// Previous definitions
|
||||
namespace Slic3r
|
||||
{
|
||||
class MachineObject;
|
||||
}
|
||||
#include <utility>
|
||||
|
||||
enum PrinterArch
|
||||
{
|
||||
ARCH_CORE_XY,// move hotbed
|
||||
ARCH_I3,//move z
|
||||
ARCH_CORE_XY,
|
||||
ARCH_I3,
|
||||
};
|
||||
|
||||
enum PrinterSeries
|
||||
@@ -45,7 +36,6 @@ enum AmsStatusMain
|
||||
AMS_STATUS_MAIN_RFID_IDENTIFYING = 0x02,
|
||||
AMS_STATUS_MAIN_ASSIST = 0x03,
|
||||
AMS_STATUS_MAIN_CALIBRATION = 0x04,
|
||||
AMS_STATUS_MAIN_COLD_PULL = 0x07,
|
||||
AMS_STATUS_MAIN_SELF_CHECK = 0x10,
|
||||
AMS_STATUS_MAIN_DEBUG = 0x20,
|
||||
AMS_STATUS_MAIN_UNKNOWN = 0xFF,
|
||||
@@ -61,6 +51,10 @@ enum DevAmsType : int
|
||||
AMS_LITE_MIXED = 5, // AMS-Lite for N9
|
||||
};
|
||||
|
||||
// Device-numbered filament-change step codes. Newer firmware reports the exact change-step
|
||||
// sequence through the AMS (ams.cfs), keyed by these codes, instead of the client hardcoding
|
||||
// steps per model. Distinct from the legacy GUI-side Slic3r::GUI::FilamentStep enum.
|
||||
// STEP_CHECK_POSITION and STEP_CONFIRM_EXTRUDED share code 0x08 by device design.
|
||||
enum DevFilamentStep
|
||||
{
|
||||
STEP_IDLE = 0x00,
|
||||
@@ -89,35 +83,37 @@ enum DevFilamentStep
|
||||
#define VIRTUAL_AMS_MAIN_ID_STR "255"
|
||||
#define VIRTUAL_AMS_DEPUTY_ID_STR "254"
|
||||
|
||||
// Tray index offsets for different AMS types
|
||||
#define AMS_LITE_MIXED_TRAY_INDEX_OFFSET 24 // Offset for AMS_LITE_MIXED tray index (24)
|
||||
// Tray index offset for the AMS-Lite-mixed unit (A2L / N9). Its 4 trays occupy
|
||||
// global tray indices 24..27.
|
||||
#define AMS_LITE_MIXED_TRAY_INDEX_OFFSET 24
|
||||
|
||||
#define INVALID_AMS_TEMPERATURE std::numeric_limits<float>::min()
|
||||
|
||||
// (ams_id, slot_id) pair.
|
||||
using DevAmsSlotId = std::pair<int, int>;
|
||||
|
||||
/* Extruder*/
|
||||
#define MAIN_EXTRUDER_ID 0
|
||||
#define DEPUTY_EXTRUDER_ID 1
|
||||
#define UNIQUE_EXTRUDER_ID MAIN_EXTRUDER_ID
|
||||
#define INVALID_EXTRUDER_ID -1
|
||||
|
||||
// see PartPlate::get_physical_extruder_by_logical_extruder
|
||||
/* Logical extruder ids (multi-nozzle). */
|
||||
#define LOGIC_UNIQUE_EXTRUDER_ID 0
|
||||
#define LOGIC_L_EXTRUDER_ID 0
|
||||
#define LOGIC_R_EXTRUDER_ID 1
|
||||
|
||||
// <ams_id, slot_id>
|
||||
using DevAmsSlotId = std::pair<int, int>;
|
||||
|
||||
/* Nozzle*/
|
||||
enum NozzleFlowType : int
|
||||
enum NozzleFlowType
|
||||
{
|
||||
NONE_FLOWTYPE,
|
||||
S_FLOW,
|
||||
H_FLOW,
|
||||
U_FLOW, // TPU 1.75 High Flow
|
||||
E_FLOW, // E3D High Flow
|
||||
U_FLOW, // TPU 1.75 High Flow (device-reported; maps to nvtTPUHighFlow)
|
||||
};
|
||||
/* 0.2mm 0.4mm 0.6mm 0.8mm */
|
||||
|
||||
// Discrete nozzle diameters reported by the device.
|
||||
enum NozzleDiameterType : int
|
||||
{
|
||||
NONE_DIAMETER_TYPE,
|
||||
@@ -139,7 +135,7 @@ enum DevPrintingSpeedLevel
|
||||
};
|
||||
|
||||
/*Upgrade*/
|
||||
enum class DevFirmwareUpgradeState : int
|
||||
enum class DevFirmwareUpgradingState : int
|
||||
{
|
||||
DC = -1,
|
||||
UpgradingUnavaliable = 0,
|
||||
@@ -148,10 +144,6 @@ enum class DevFirmwareUpgradeState : int
|
||||
UpgradingFinished = 3
|
||||
};
|
||||
|
||||
// Orca: DeviceManager/UpgradePanel keep the Orca spelling of this enum; the alias to the
|
||||
// reference name is a permanent compatibility surface.
|
||||
using DevFirmwareUpgradingState = DevFirmwareUpgradeState;
|
||||
|
||||
class devPrinterUtil
|
||||
{
|
||||
public:
|
||||
@@ -165,6 +157,9 @@ public:
|
||||
|
||||
namespace GUI
|
||||
{
|
||||
// Print source. Defined here (rather than in SelectMachine.hpp) so the shared device-mapping
|
||||
// GUI headers — AmsMappingPopup, wgtDeviceNozzleSelect — can name it without pulling in
|
||||
// SelectMachine.hpp, which would create an include cycle.
|
||||
enum PrintFromType
|
||||
{
|
||||
FROM_NORMAL,
|
||||
@@ -174,6 +169,8 @@ enum PrintFromType
|
||||
|
||||
};// namespace Slic3r
|
||||
|
||||
// A nozzle requirement of the sliced plate (or an installed nozzle's identity), compared in the
|
||||
// pre-print slicing-vs-installed nozzle checks.
|
||||
struct NozzleDef
|
||||
{
|
||||
float nozzle_diameter;
|
||||
@@ -193,7 +190,4 @@ template<> struct std::hash<NozzleDef>
|
||||
size_t h2 = std::hash<int>{}(v.nozzle_flow_type);
|
||||
return h1 ^ (h2 + 0x9e3779b9 + (h1 << 6) + (h1 >> 2));
|
||||
};
|
||||
};
|
||||
|
||||
// key(extruder_id) -> { key1(nozzle type info), val1( number of the nozzle type)}
|
||||
using ExtruderNozzleInfos = std::unordered_map<int, std::unordered_map<NozzleDef, int>>;
|
||||
};
|
||||
@@ -271,7 +271,7 @@ namespace Slic3r
|
||||
system->m_current_loading_extder_id = INVALID_EXTRUDER_ID;
|
||||
if (!system->m_extders[MAIN_EXTRUDER_ID].m_star.ams_id.empty())
|
||||
{
|
||||
system->m_current_busy_for_loading = (system->m_extders[MAIN_EXTRUDER_ID].m_snow != system->m_extders[MAIN_EXTRUDER_ID].m_star);
|
||||
system->m_current_busy_for_loading = (system->m_extders[MAIN_EXTRUDER_ID].m_snow == system->m_extders[MAIN_EXTRUDER_ID].m_star);
|
||||
if (system->m_current_busy_for_loading)
|
||||
{
|
||||
system->m_current_loading_extder_id = MAIN_EXTRUDER_ID;
|
||||
|
||||
@@ -22,7 +22,6 @@ struct DevAmsSlotInfo
|
||||
std::string slot_id;
|
||||
|
||||
public:
|
||||
bool operator!=(const DevAmsSlotInfo& other) const { return !(*this == other); }
|
||||
bool operator==(const DevAmsSlotInfo& other) const { return ams_id == other.ams_id && slot_id == other.slot_id;}
|
||||
};
|
||||
|
||||
|
||||
@@ -46,10 +46,20 @@ void Slic3r::DevFan::converse_to_duct(bool is_suppt_part_fun, bool is_suppt_aux_
|
||||
}
|
||||
}
|
||||
|
||||
static std::string _get_string_from_fantype(int type)
|
||||
{
|
||||
switch (type) {
|
||||
case 1: return "cooling_fan";
|
||||
case 2: return "big_cooling_fan";
|
||||
case 3: return "chamber_fan";
|
||||
default: return "";
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
// Old protocol
|
||||
int Slic3r::DevFan::command_control_fan(int fan_type, int val)
|
||||
{
|
||||
// Orca: strip analytics telemetry
|
||||
std::string gcode = (boost::format("M106 P%1% S%2% \n") % (int) fan_type % (val)).str();
|
||||
return m_owner->publish_gcode(gcode);
|
||||
}
|
||||
@@ -156,6 +166,8 @@ void Slic3r::DevFan::ParseV3_0(const json &device)
|
||||
m_air_duct_data.modes.clear();
|
||||
m_air_duct_data.parts.clear();
|
||||
|
||||
m_air_duct_data.curren_mode = device["airduct"]["modeCur"].get<int>();
|
||||
|
||||
const json &airduct = device["airduct"];
|
||||
if (airduct.contains("modeCur")) { m_air_duct_data.curren_mode = airduct["modeCur"].get<int>(); }
|
||||
if (airduct.contains("subMode")) { m_air_duct_data.m_sub_mode = airduct["subMode"].get<int>(); }
|
||||
@@ -181,7 +193,7 @@ void Slic3r::DevFan::ParseV3_0(const json &device)
|
||||
}
|
||||
}
|
||||
|
||||
if (AIR_DUCT(mode.id) == AIR_DUCT::AIR_DUCT_EXHAUST) { continue; }
|
||||
if (AIR_DUCT(mode.id) == AIR_DUCT::AIR_DUCT_EXHAUST) { continue; } /*STUDIO-12796*/
|
||||
m_air_duct_data.modes[mode.id] = mode;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,8 @@ class MachineObject;
|
||||
enum AirDuctType { AIR_FAN_TYPE, AIR_DOOR_TYPE };
|
||||
typedef std::function<void(const json &)> CommandCallBack;
|
||||
|
||||
|
||||
|
||||
enum AIR_FUN : int {
|
||||
FAN_HEAT_BREAK_0_IDX = 0,
|
||||
FAN_COOLING_0_AIRDOOR = 1,
|
||||
@@ -89,13 +91,6 @@ public:
|
||||
|
||||
bool IsSupportCoolingFilter() const { return m_support_cooling_filter; }
|
||||
bool IsCoolingFilerOn() const { return m_sub_mode == 1; }
|
||||
bool IsExaustFanExit() const
|
||||
{
|
||||
for (auto &p : parts) {
|
||||
if (p.id == int(AIR_FUN::FAN_CHAMBER_0_IDX)) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
class DevFan
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
#pragma once
|
||||
#include <optional>
|
||||
#include <unordered_map> // Orca: for m_firmwares / GetSuppotedFirmwares() — the unordered_map AMSSetting.cpp mirrors and iterates
|
||||
#include <nlohmann/json.hpp>
|
||||
#include "DevCtrl.h"
|
||||
|
||||
@@ -76,7 +75,7 @@ public:
|
||||
|
||||
DevAmsSystemIdx GetCurrentFirmwareIdxSel() const { return m_current_firmware_sel.m_firmare_idx; };
|
||||
DevAmsSystemIdx GetCurrentFirmwareIdxRun() const { return m_current_firmware_run.m_firmare_idx; };
|
||||
std::unordered_map<int, DevAmsSystemFirmware> GetSuppotedFirmwares() const { return m_firmwares;}; // Orca: unordered (mirrored by AMSSetting.cpp)
|
||||
std::unordered_map<int, DevAmsSystemFirmware> GetSuppotedFirmwares() const { return m_firmwares;};
|
||||
|
||||
bool IsSwitching() const { return m_status == "SWITCHING";};
|
||||
bool IsIdle() const { return m_status == "IDLE";};
|
||||
@@ -95,7 +94,7 @@ private:
|
||||
|
||||
DevAmsSystemFirmware m_current_firmware_run;
|
||||
DevAmsSystemFirmware m_current_firmware_sel;
|
||||
std::unordered_map<int, DevAmsSystemFirmware> m_firmwares; // Orca: unordered (mirrored by AMSSetting.cpp)
|
||||
std::unordered_map<int, DevAmsSystemFirmware> m_firmwares;
|
||||
|
||||
DevCtrlInfo m_ctrl_switching;
|
||||
};
|
||||
|
||||
@@ -9,6 +9,19 @@ namespace Slic3r {
|
||||
|
||||
DevFilaSwitch::DevFilaSwitch(MachineObject *owner) { m_owner = owner; }
|
||||
|
||||
bool DevFilaSwitch::IsReady() const
|
||||
{
|
||||
if (!m_is_installed) { return false; }
|
||||
|
||||
const auto& ams_list = m_owner->GetFilaSystem()->GetAmsList();
|
||||
for (const auto& ams_item : ams_list) {
|
||||
if (ams_item.second->GetBindedExtruderSet().empty()) { return false; }
|
||||
if (!ams_item.second->GetSwitcherPos().has_value()) { return false; }
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void DevFilaSwitch::Reset()
|
||||
{
|
||||
m_is_installed = false;
|
||||
@@ -21,24 +34,6 @@ void DevFilaSwitch::Reset()
|
||||
m_cali_status = CaliStatus::CALI_IDLE;
|
||||
}
|
||||
|
||||
bool DevFilaSwitch::IsReady() const
|
||||
{
|
||||
if (!m_is_installed) {
|
||||
BOOST_LOG_TRIVIAL(debug) << "[FilaSwitch] IsReady: not installed";
|
||||
return false;
|
||||
}
|
||||
|
||||
const auto& ams_list = m_owner->GetFilaSystem()->GetAmsList();
|
||||
for (const auto& ams_item : ams_list) {
|
||||
if (ams_item.second->GetBindedExtruderSet().size() == 0) { return false; }
|
||||
if (!ams_item.second->GetSwitcherPos().has_value()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
std::optional<DevAmsTray> DevFilaSwitch::GetInA_Slot() const
|
||||
{
|
||||
auto ams_id_opt = GetInA_SlotId();
|
||||
@@ -133,4 +128,4 @@ void DevFilaSwitch::ParseFilaSwitchInfo(const nlohmann::json &print_jj)
|
||||
}
|
||||
}
|
||||
|
||||
}; // namespace Slic3r
|
||||
}; // namespace Slic3r
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#pragma once
|
||||
#include "DevDefs.h"
|
||||
#include <optional>
|
||||
#include <nlohmann/json.hpp>
|
||||
|
||||
namespace Slic3r
|
||||
{
|
||||
@@ -9,11 +10,16 @@ class MachineObject;
|
||||
class DevExtder;
|
||||
class DevAmsTray;
|
||||
|
||||
// Filament Track Switch (H2-family hardware).
|
||||
// The filament blacklist consumes IsInstalled() for the `has_filament_switch`
|
||||
// rule (e.g. PLA Silk). m_is_installed defaults to false and is only raised when
|
||||
// the device reports the switch over MQTT (aux bit 29), so the rule stays inert on
|
||||
// every printer that does not report an installed switch.
|
||||
class DevFilaSwitch
|
||||
{
|
||||
public:
|
||||
enum class CaliStatus : int
|
||||
{
|
||||
{
|
||||
CALI_IDLE = 0,
|
||||
CALI_STEPING = 1,
|
||||
};
|
||||
@@ -42,6 +48,10 @@ public:
|
||||
|
||||
public:
|
||||
bool IsInstalled() const { return m_is_installed; };
|
||||
|
||||
// Ready once installed and every AMS has resolved both its extruder binding and its
|
||||
// switcher track position from the device. The send dialog and sidebar sync UX only
|
||||
// treat the switch as usable when this is true.
|
||||
bool IsReady() const;
|
||||
|
||||
std::optional<bool> IsInA_HasFilament() const { return m_in_a_has_filament; };
|
||||
@@ -78,4 +88,4 @@ private:
|
||||
|
||||
CaliStatus m_cali_status = CaliStatus::CALI_IDLE;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@@ -270,10 +270,10 @@ private:
|
||||
AmsType m_ams_type = AmsType::AMS;
|
||||
std::string m_ams_id;
|
||||
int m_ext_id;//extruder id
|
||||
// Orca: pull-mode / multi-vendor agent model — keeps the legacy single m_ext_id for existing
|
||||
// consumers and carries the switch-aware binding alongside it. Without a Filament Track Switch
|
||||
// the set is {m_ext_id}; with one installed the device binds both extruders and records which
|
||||
// input track (A/B) feeds this AMS.
|
||||
// Orca: keeps the legacy single m_ext_id for existing consumers and carries the
|
||||
// switch-aware binding alongside it (BambuStudio stores only the set). Without a Filament
|
||||
// Track Switch the set is {m_ext_id}; with one installed the device binds both extruders and
|
||||
// records which input track (A/B) feeds this AMS.
|
||||
std::set<int> m_binded_extruder_set;
|
||||
std::optional<DevFilaSwitch::SwitchPos> m_binded_switcher_pos;
|
||||
bool m_exist = false;
|
||||
|
||||
@@ -28,8 +28,8 @@ int DevFilaSystem::CtrlAmsStartDryingHour(int ams_id,
|
||||
jj_command["print"]["command"] = "ams_filament_drying";
|
||||
jj_command["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++);
|
||||
jj_command["print"]["ams_id"] = ams_id;
|
||||
jj_command["print"]["mode"] = static_cast<int>(DevAms::DryCtrlMode::OnTime); // Orca: cast scoped enum for json
|
||||
jj_command["print"]["filament"] = filament_type; // Orca: fix comma-operator typo
|
||||
jj_command["print"]["mode"] = static_cast<int>(DevAms::DryCtrlMode::OnTime);
|
||||
jj_command["print"]["filament"] = filament_type;
|
||||
jj_command["print"]["temp"] = tag_temp;
|
||||
jj_command["print"]["duration"] = tag_duration_hour;
|
||||
jj_command["print"]["humidity"] = 0;
|
||||
@@ -45,8 +45,8 @@ int DevFilaSystem::CtrlAmsStopDrying(int ams_id) const
|
||||
jj_command["print"]["command"] = "ams_filament_drying";
|
||||
jj_command["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++);
|
||||
jj_command["print"]["ams_id"] = ams_id;
|
||||
jj_command["print"]["mode"] = static_cast<int>(DevAms::DryCtrlMode::Off); // Orca: cast scoped enum for json
|
||||
jj_command["print"]["filament"] = ""; // Orca: fix comma-operator typo
|
||||
jj_command["print"]["mode"] = static_cast<int>(DevAms::DryCtrlMode::Off);
|
||||
jj_command["print"]["filament"] = "";
|
||||
jj_command["print"]["temp"] = 0;
|
||||
jj_command["print"]["duration"] = 0;
|
||||
jj_command["print"]["humidity"] = 0;
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
#pragma once
|
||||
#include "DevFirmware.h"
|
||||
#include "slic3r/Utils/json_diff.hpp"
|
||||
|
||||
#include <nlohmann/json.hpp>
|
||||
#include <wx/string.h>
|
||||
#include "slic3r/Utils/json_diff.hpp"
|
||||
@@ -11,7 +8,6 @@ namespace Slic3r {
|
||||
//Previous definitions
|
||||
class MachineObject;
|
||||
|
||||
// Orca: firmware-type enum consumed by DeviceManager/UpgradePanel; no reference-side equivalent yet
|
||||
enum PrinterFirmwareType
|
||||
{
|
||||
FIRMWARE_TYPE_ENGINEER = 0,
|
||||
@@ -19,6 +15,7 @@ enum PrinterFirmwareType
|
||||
FIRMEARE_TYPE_UKNOWN,
|
||||
};
|
||||
|
||||
|
||||
class FirmwareInfo
|
||||
{
|
||||
public:
|
||||
@@ -43,18 +40,12 @@ public:
|
||||
|
||||
public:
|
||||
bool isValid() const { return !sn.empty(); }
|
||||
|
||||
/*type check*/
|
||||
bool isAirPump() const { return product_name.Contains("Air Pump"); }
|
||||
bool isLaszer() const { return product_name.Contains("Laser"); }
|
||||
bool isCuttingModule() const { return product_name.Contains("Cutting Module"); }
|
||||
bool isRotary() const { return product_name.Contains("Rotary"); }// Rotary Attachment
|
||||
bool isExtinguishSystem() const { return product_name.Contains("Extinguishing System"); }// Auto Fire Extinguishing System
|
||||
bool isWTM() const { return name.find("wtm") != string::npos; } // nozzle
|
||||
bool isExhaustFan() const { return product_name.Contains("Exhaust Fan"); }
|
||||
bool isHmshub() const { return product_name.find("Filament Buffer") != string::npos; }
|
||||
bool isFilaTrackSwitch() const { return product_name.find("Filament Track") != string::npos; }
|
||||
|
||||
bool isExtinguishSystem() const { return product_name.Contains("Extinguishing System"); }
|
||||
bool isWTM() const { return name.find("wtm") != std::string::npos; } // nozzle (rack hotend) module firmware
|
||||
bool isFilaTrackSwitch() const { return product_name.Contains("Filament Track"); }
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -29,7 +29,6 @@ bool DevHMSItem::parse_hms_info(unsigned attr, unsigned code)
|
||||
std::string DevHMSItem::get_long_error_code() const
|
||||
{
|
||||
char buf[64];
|
||||
// Orca: HMS long-error-code format excludes the reserved byte and keys the Orca HMS wiki lookups
|
||||
::sprintf(buf, "%02X%02X%02X00000%1X%04X",
|
||||
this->m_module_id,
|
||||
this->m_module_num,
|
||||
|
||||
@@ -8,9 +8,6 @@ namespace Slic3r {
|
||||
class MachineObject;
|
||||
|
||||
/* some static info of machine*/ /*TODO*/
|
||||
// Orca: kept as a stub — connection_type/is_lan_mode_printer/is_cloud_mode_printer live inline on
|
||||
// MachineObject (DeviceManager.hpp). Adopting the reference's full DevInfo would duplicate those
|
||||
// definitions and require an m_dev_info member MachineObject does not have.
|
||||
class DevInfo
|
||||
{
|
||||
public:
|
||||
|
||||
@@ -24,37 +24,27 @@ namespace Slic3r
|
||||
|
||||
DevPrinterConfigUtil::InitFilePath(resources_dir());
|
||||
|
||||
// Load saved local machines (needs an agent; when built without one the load is
|
||||
// deferred to set_agent()).
|
||||
// Load saved local machines
|
||||
if (agent) {
|
||||
load_local_machines_from_config();
|
||||
}
|
||||
}
|
||||
|
||||
void DeviceManager::load_local_machines_from_config()
|
||||
{
|
||||
AppConfig* config = GUI::wxGetApp().app_config;
|
||||
if (!config)
|
||||
return;
|
||||
const auto& local_machines = config->get_local_machines();
|
||||
for (auto& it : local_machines) {
|
||||
const auto& m = it.second;
|
||||
if (localMachineList.count(m.dev_id))
|
||||
continue;
|
||||
MachineObject* obj = new MachineObject(this, m_agent, m.dev_name, m.dev_id, m.dev_ip);
|
||||
obj->printer_type = m.printer_type;
|
||||
obj->dev_connection_type = "lan";
|
||||
obj->bind_state = "free";
|
||||
obj->bind_sec_link = "secure";
|
||||
obj->m_is_online = true;
|
||||
obj->last_alive = Slic3r::Utils::get_current_time_utc();
|
||||
obj->set_access_code(config->get("access_code", m.dev_id), false);
|
||||
obj->set_user_access_code(config->get("user_access_code", m.dev_id), false);
|
||||
if (obj->has_access_right()) {
|
||||
localMachineList.insert(std::make_pair(m.dev_id, obj));
|
||||
} else {
|
||||
config->erase_local_machine(m.dev_id);
|
||||
delete obj;
|
||||
AppConfig* config = GUI::wxGetApp().app_config;
|
||||
const auto local_machines = config->get_local_machines();
|
||||
for (auto& it : local_machines) {
|
||||
const auto& m = it.second;
|
||||
MachineObject* obj = new MachineObject(this, m_agent, m.dev_name, m.dev_id, m.dev_ip);
|
||||
obj->printer_type = m.printer_type;
|
||||
obj->dev_connection_type = "lan";
|
||||
obj->bind_state = "free";
|
||||
obj->bind_sec_link = "secure";
|
||||
obj->m_is_online = true;
|
||||
obj->last_alive = Slic3r::Utils::get_current_time_utc();
|
||||
obj->set_access_code(config->get("access_code", m.dev_id), false);
|
||||
obj->set_user_access_code(config->get("user_access_code", m.dev_id), false);
|
||||
if (obj->has_access_right()) {
|
||||
localMachineList.insert(std::make_pair(m.dev_id, obj));
|
||||
} else {
|
||||
config->erase_local_machine(m.dev_id);
|
||||
delete obj;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -108,11 +98,6 @@ namespace Slic3r
|
||||
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": updating agent for "
|
||||
<< localMachineList.size() << " local and "
|
||||
<< userMachineList.size() << " user machines";
|
||||
|
||||
// First real agent after an agent-less construction (network plugin wasn't ready at
|
||||
// startup): run the persisted-LAN-printer load the constructor had to skip. See
|
||||
// load_local_machines_from_config().
|
||||
const bool first_real_agent = (m_agent == nullptr && agent != nullptr);
|
||||
m_agent = agent;
|
||||
|
||||
std::lock_guard<std::mutex> lock(listMutex);
|
||||
@@ -126,10 +111,6 @@ namespace Slic3r
|
||||
it.second->set_agent(agent);
|
||||
}
|
||||
}
|
||||
|
||||
if (first_real_agent) {
|
||||
load_local_machines_from_config();
|
||||
}
|
||||
}
|
||||
|
||||
void DeviceManager::EnableMultiMachine(bool enable)
|
||||
|
||||
@@ -96,13 +96,6 @@ public:
|
||||
std::map<std::string, std::vector<std::string>> device_subseries;
|
||||
|
||||
private:
|
||||
// Load the LAN printers persisted in AppConfig into localMachineList. Runs from the
|
||||
// constructor when an agent is available and, for the case where the DeviceManager was
|
||||
// first built without one (network plugin not yet installed at startup), from set_agent()
|
||||
// once a real agent finally arrives - so paired printers survive a plugin install/hot
|
||||
// reload without an app restart.
|
||||
void load_local_machines_from_config();
|
||||
|
||||
void keep_alive();
|
||||
void check_pushing();
|
||||
|
||||
|
||||
@@ -162,8 +162,8 @@ namespace Slic3r
|
||||
}
|
||||
|
||||
//first: left,nozzle=1,map=1 second: right,nozzle=0,map=2
|
||||
bool right_ams_valid = (ams->second->GetBindedExtruderSet().count(MAIN_EXTRUDER_ID) != 0) && map_opt[MappingOption::USE_RIGHT_AMS];
|
||||
bool left_ams_valid = (ams->second->GetBindedExtruderSet().count(DEPUTY_EXTRUDER_ID) != 0) && map_opt[MappingOption::USE_LEFT_AMS];
|
||||
bool right_ams_valid = ams->second->GetExtruderId() == 0 && map_opt[MappingOption::USE_RIGHT_AMS];
|
||||
bool left_ams_valid = ams->second->GetExtruderId() == 1 && map_opt[MappingOption::USE_LEFT_AMS];
|
||||
if (right_ams_valid || left_ams_valid)
|
||||
{
|
||||
tray_filaments.emplace(std::make_pair(tray_index, info));
|
||||
|
||||
@@ -16,6 +16,10 @@
|
||||
|
||||
#include "slic3r/GUI/GUI_App.hpp"
|
||||
|
||||
#include <algorithm>
|
||||
#include <unordered_set>
|
||||
|
||||
#include <boost/format.hpp>
|
||||
#include <boost/lexical_cast.hpp>
|
||||
#include <nlohmann/json.hpp>
|
||||
using namespace nlohmann;
|
||||
@@ -29,6 +33,30 @@ void MachineObject::clear_auto_nozzle_mapping()
|
||||
}
|
||||
}
|
||||
|
||||
static std::string s_get_diameter_str(float diameter)
|
||||
{
|
||||
return (boost::format("%.2f") % diameter).str();
|
||||
}
|
||||
|
||||
static std::string s_get_diameter_str(const std::string& diameter)
|
||||
{
|
||||
try {
|
||||
float dia = boost::lexical_cast<float>(diameter);
|
||||
return s_get_diameter_str(dia);
|
||||
} catch (...) {
|
||||
BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << " failed to boost::lexical_cast: " << diameter;
|
||||
return diameter;
|
||||
}
|
||||
|
||||
try {
|
||||
float dia = std::stof(diameter);
|
||||
return s_get_diameter_str(dia);
|
||||
} catch (...) {
|
||||
BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << " std::stof: " << diameter;
|
||||
return diameter;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// get auto nozzle mapping through AP
|
||||
// warnings:
|
||||
@@ -240,7 +268,7 @@ int DevNozzleMappingCtrl::CtrlGetAutoNozzleMappingV1(Slic3r::GUI::Plater* plater
|
||||
|
||||
void DevNozzleMappingCtrl::ParseAutoNozzleMapping(const json& print_jj)
|
||||
{
|
||||
if (print_jj.contains("command") && print_jj["command"].get<string>() == "get_auto_nozzle_mapping") {
|
||||
if (print_jj.contains("command") && print_jj["command"].get<std::string>() == "get_auto_nozzle_mapping") {
|
||||
if (print_jj.contains("sequence_id") && print_jj["sequence_id"] == m_sequence_id) {
|
||||
Clear();
|
||||
DevJsonValParser::ParseVal(print_jj, "result", m_result);
|
||||
@@ -454,4 +482,4 @@ float DevNozzleMappingCtrl::GetFlushWeight(Slic3r::MachineObject* obj) const
|
||||
return total_flush_volume * 1.26 * 0.001;
|
||||
}
|
||||
|
||||
} // namespace Slic3r
|
||||
} // namespace Slic3r
|
||||
|
||||
@@ -18,7 +18,7 @@ namespace GUI
|
||||
class Plater;
|
||||
}
|
||||
|
||||
struct FilamentInfo; // Orca: libslic3r/ProjectTask.hpp — forward-decl for CtrlGetAutoNozzleMappingV0 signature
|
||||
struct FilamentInfo; // libslic3r/ProjectTask.hpp
|
||||
|
||||
class MachineObject;
|
||||
class DevNozzleMappingCtrl
|
||||
|
||||
@@ -1,32 +1,11 @@
|
||||
#include "DevPrintOptions.h"
|
||||
#include "DevUtil.h"
|
||||
|
||||
#include <cassert>
|
||||
|
||||
#include "slic3r/GUI/DeviceManager.hpp"
|
||||
|
||||
namespace Slic3r
|
||||
{
|
||||
|
||||
DevPrintOptions::DevPrintOptions(MachineObject* obj) : m_obj(obj)
|
||||
{
|
||||
m_detection_list = {
|
||||
{PrintOptionEnum::AI_Monitoring, &m_ai_monitoring_detection},
|
||||
{PrintOptionEnum::First_Layer_Detection, &m_first_layer_detection},
|
||||
{PrintOptionEnum::Buildplate_Mark_Detection, &m_buildplate_mark_detection},
|
||||
{PrintOptionEnum::Buildplate_Align_Detection, &m_buildplate_align_detection},
|
||||
{PrintOptionEnum::Auto_Recovery_Detection, &m_auto_recovery_detection},
|
||||
{PrintOptionEnum::Allow_Prompt_Sound_Detection, &m_allow_prompt_sound_detection},
|
||||
{PrintOptionEnum::Filament_Tangle_Detection, &m_filament_tangle_detection},
|
||||
{PrintOptionEnum::Idle_Heating_Protect_Detection, &m_idel_heating_protect_detection},
|
||||
{PrintOptionEnum::Purify_Air_At_Print_End, &m_purify_air_at_print_end},
|
||||
{PrintOptionEnum::Snapshot_Detection, &m_snapshot_detection},
|
||||
{PrintOptionEnum::FOD_Check_Detection, &m_fod_check_detection},
|
||||
{PrintOptionEnum::Displacement_Detection, &m_displacement_detection},
|
||||
{PrintOptionEnum::Smart_Nozzle_Blob_Detection, &m_smart_nozzle_blob_detection},
|
||||
};
|
||||
}
|
||||
|
||||
void DevPrintOptionsParser::Parse(DevPrintOptions* opts, const nlohmann::json& print_json)
|
||||
{
|
||||
try
|
||||
@@ -41,31 +20,6 @@ void DevPrintOptionsParser::Parse(DevPrintOptions* opts, const nlohmann::json& p
|
||||
const std::string& cfg = print_json["cfg"].get<std::string>();
|
||||
opts->m_speed_level = (DevPrintingSpeedLevel)DevUtil::get_flag_bits(cfg, 8, 3);
|
||||
}
|
||||
|
||||
// Orca: xcam.cfg is an integer bitfield (distinct from the top-level cfg string) that
|
||||
// carries the plate-align/FOD/displacement current values.
|
||||
if (print_json.contains("xcam") && print_json["xcam"].contains("cfg")) {
|
||||
int xcam_cfg = print_json["xcam"]["cfg"].get<int>();
|
||||
if (time(nullptr) - opts->m_buildplate_align_detection.detect_hold_start > HOLD_TIME_3SEC)
|
||||
opts->m_buildplate_align_detection.current_detect_value = DevUtil::get_flag_bits(xcam_cfg, 20);
|
||||
if (time(nullptr) - opts->m_fod_check_detection.detect_hold_start > HOLD_TIME_3SEC)
|
||||
opts->m_fod_check_detection.current_detect_value = DevUtil::get_flag_bits(xcam_cfg, 21);
|
||||
if (time(nullptr) - opts->m_displacement_detection.detect_hold_start > HOLD_TIME_3SEC)
|
||||
opts->m_displacement_detection.current_detect_value = DevUtil::get_flag_bits(xcam_cfg, 22);
|
||||
}
|
||||
|
||||
// Orca: fun2 support bits (distinct from the top-level cfg/fun fields). ORCA's DevUtil has no
|
||||
// no-border extractor, so the MachineObject helper is used here instead.
|
||||
if (print_json.contains("fun2") && print_json["fun2"].is_string()) {
|
||||
std::string fun2 = print_json["fun2"].get<std::string>();
|
||||
if (!fun2.empty()) {
|
||||
opts->m_buildplate_align_detection.is_support_detect = opts->m_obj->get_flag_bits_no_border(fun2, 2) == 1;
|
||||
opts->m_purify_air_at_print_end.is_support_detect = opts->m_obj->get_flag_bits_no_border(fun2, 4);
|
||||
opts->m_fod_check_detection.is_support_detect = opts->m_obj->get_flag_bits_no_border(fun2, 13);
|
||||
opts->m_displacement_detection.is_support_detect = opts->m_obj->get_flag_bits_no_border(fun2, 14);
|
||||
opts->m_smart_nozzle_blob_detection.is_support_detect = opts->m_obj->get_flag_bits_no_border(fun2, 15);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
@@ -77,32 +31,32 @@ void DevPrintOptionsParser::ParseDetectionV1_0(DevPrintOptions *opts, MachineObj
|
||||
{
|
||||
try {
|
||||
if (print_json.contains("xcam")) {
|
||||
if (time(nullptr) - opts->m_ai_monitoring_detection.detect_hold_start > HOLD_TIME_3SEC) {
|
||||
if (time(nullptr) - opts->xcam_ai_monitoring_hold_start > HOLD_TIME_3SEC) {
|
||||
if (print_json["xcam"].contains("printing_monitor")) {
|
||||
// new protocol
|
||||
opts->m_ai_monitoring_detection.current_detect_value = print_json["xcam"]["printing_monitor"].get<bool>();
|
||||
opts->xcam_ai_monitoring = print_json["xcam"]["printing_monitor"].get<bool>();
|
||||
} else {
|
||||
// old version protocol
|
||||
if (print_json["xcam"].contains("spaghetti_detector")) {
|
||||
opts->m_ai_monitoring_detection.current_detect_value = print_json["xcam"]["spaghetti_detector"].get<bool>();
|
||||
opts->xcam_ai_monitoring = print_json["xcam"]["spaghetti_detector"].get<bool>();
|
||||
if (print_json["xcam"].contains("print_halt")) {
|
||||
bool print_halt = print_json["xcam"]["print_halt"].get<bool>();
|
||||
if (print_halt) { opts->m_ai_monitoring_detection.current_detect_sensitivity_value = "medium"; }
|
||||
if (print_halt) { opts->xcam_ai_monitoring_sensitivity = "medium"; }
|
||||
}
|
||||
}
|
||||
}
|
||||
if (print_json["xcam"].contains("halt_print_sensitivity")) {
|
||||
opts->m_ai_monitoring_detection.current_detect_sensitivity_value = print_json["xcam"]["halt_print_sensitivity"].get<std::string>();
|
||||
opts->xcam_ai_monitoring_sensitivity = print_json["xcam"]["halt_print_sensitivity"].get<std::string>();
|
||||
}
|
||||
}
|
||||
|
||||
if (time(nullptr) - opts->m_first_layer_detection.detect_hold_start > HOLD_TIME_3SEC) {
|
||||
if (print_json["xcam"].contains("first_layer_inspector")) { opts->m_first_layer_detection.current_detect_value = print_json["xcam"]["first_layer_inspector"].get<bool>(); }
|
||||
if (time(nullptr) - opts->xcam_first_layer_hold_start > HOLD_TIME_3SEC) {
|
||||
if (print_json["xcam"].contains("first_layer_inspector")) { opts->xcam_first_layer_inspector = print_json["xcam"]["first_layer_inspector"].get<bool>(); }
|
||||
}
|
||||
|
||||
if (time(nullptr) - opts->m_buildplate_mark_detection.detect_hold_start > HOLD_TIME_3SEC) {
|
||||
if (time(nullptr) - opts->xcam_buildplate_marker_hold_start > HOLD_TIME_3SEC) {
|
||||
if (print_json["xcam"].contains("buildplate_marker_detector")) {
|
||||
opts->m_buildplate_mark_detection.current_detect_value = print_json["xcam"]["buildplate_marker_detector"].get<bool>();
|
||||
opts->xcam_buildplate_marker_detector = print_json["xcam"]["buildplate_marker_detector"].get<bool>();
|
||||
obj->is_support_build_plate_marker_detect = true;
|
||||
} else {
|
||||
obj->is_support_build_plate_marker_detect = false;
|
||||
@@ -112,31 +66,32 @@ void DevPrintOptionsParser::ParseDetectionV1_0(DevPrintOptions *opts, MachineObj
|
||||
} catch (...) {
|
||||
;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void DevPrintOptionsParser::ParseDetectionV1_1(DevPrintOptions *opts, MachineObject *obj, const nlohmann::json &print_json,bool enable)
|
||||
{
|
||||
if (print_json["module_name"].get<std::string>() == "first_layer_inspector") {
|
||||
if (time(nullptr) - opts->m_first_layer_detection.detect_hold_start > HOLD_TIME_3SEC) {
|
||||
opts->m_first_layer_detection.current_detect_value = enable;
|
||||
if (time(nullptr) - opts->xcam_first_layer_hold_start > HOLD_TIME_3SEC) {
|
||||
opts->xcam_first_layer_inspector = enable;
|
||||
}
|
||||
} else if (print_json["module_name"].get<std::string>() == "buildplate_marker_detector") {
|
||||
if (time(nullptr) - opts->m_buildplate_mark_detection.detect_hold_start > HOLD_TIME_3SEC) {
|
||||
opts->m_buildplate_mark_detection.current_detect_value = enable;
|
||||
if (time(nullptr) - opts->xcam_buildplate_marker_hold_start > HOLD_TIME_3SEC) {
|
||||
opts->xcam_buildplate_marker_detector = enable;
|
||||
}
|
||||
} else if (print_json["module_name"].get<std::string>() == "printing_monitor") {
|
||||
if (time(nullptr) - opts->m_ai_monitoring_detection.detect_hold_start > HOLD_TIME_3SEC) {
|
||||
opts->m_ai_monitoring_detection.current_detect_value = enable;
|
||||
if (time(nullptr) - opts->xcam_ai_monitoring_hold_start > HOLD_TIME_3SEC) {
|
||||
opts->xcam_ai_monitoring = enable;
|
||||
if (print_json.contains("halt_print_sensitivity")) {
|
||||
opts->m_ai_monitoring_detection.current_detect_sensitivity_value = print_json["halt_print_sensitivity"].get<std::string>();
|
||||
opts->xcam_ai_monitoring_sensitivity = print_json["halt_print_sensitivity"].get<std::string>();
|
||||
}
|
||||
}
|
||||
} else if (print_json["module_name"].get<std::string>() == "spaghetti_detector") {
|
||||
if (time(nullptr) - opts->m_ai_monitoring_detection.detect_hold_start > HOLD_TIME_3SEC) {
|
||||
if (time(nullptr) - opts->xcam_ai_monitoring_hold_start > HOLD_TIME_3SEC) {
|
||||
// old protocol
|
||||
opts->m_ai_monitoring_detection.current_detect_value = enable;
|
||||
opts->xcam_ai_monitoring = enable;
|
||||
if (print_json.contains("print_halt")) {
|
||||
if (print_json["print_halt"].get<bool>()) { opts->m_ai_monitoring_detection.current_detect_sensitivity_value = "medium"; }
|
||||
if (print_json["print_halt"].get<bool>()) { opts->xcam_ai_monitoring_sensitivity = "medium"; }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -148,12 +103,12 @@ void DevPrintOptionsParser::ParseDetectionV1_2(DevPrintOptions *opts, MachineObj
|
||||
if (print_json.contains("option")) {
|
||||
if (print_json["option"].is_number()) {
|
||||
int option = print_json["option"].get<int>();
|
||||
if (time(nullptr) - opts->m_auto_recovery_detection.detect_hold_start > HOLD_TIME_3SEC) { opts->m_auto_recovery_detection.current_detect_value = ((option & 0x01) != 0); }
|
||||
if (time(nullptr) - opts->xcam_auto_recovery_hold_start > HOLD_TIME_3SEC) { opts->xcam_auto_recovery_step_loss = ((option & 0x01) != 0); }
|
||||
}
|
||||
}
|
||||
|
||||
if (time(nullptr) - opts->m_auto_recovery_detection.detect_hold_start > HOLD_TIME_3SEC) {
|
||||
if (print_json.contains("auto_recovery")) { opts->m_auto_recovery_detection.current_detect_value = print_json["auto_recovery"].get<bool>(); }
|
||||
if (time(nullptr) - opts->xcam_auto_recovery_hold_start > HOLD_TIME_3SEC) {
|
||||
if (print_json.contains("auto_recovery")) { opts->xcam_auto_recovery_step_loss = print_json["auto_recovery"].get<bool>(); }
|
||||
}
|
||||
} catch (...) {}
|
||||
|
||||
@@ -162,52 +117,38 @@ void DevPrintOptionsParser::ParseDetectionV1_2(DevPrintOptions *opts, MachineObj
|
||||
void DevPrintOptionsParser::ParseDetectionV2_0(DevPrintOptions *opts, std::string print_json)
|
||||
{
|
||||
|
||||
if (time(nullptr) - opts->m_first_layer_detection.detect_hold_start > HOLD_TIME_3SEC) {
|
||||
opts->m_first_layer_detection.current_detect_value = DevUtil::get_flag_bits(print_json, 12);
|
||||
if (time(nullptr) - opts->xcam_first_layer_hold_start > HOLD_TIME_3SEC) {
|
||||
opts->xcam_first_layer_inspector = DevUtil::get_flag_bits(print_json, 12);
|
||||
}
|
||||
|
||||
if (time(nullptr) - opts->m_ai_monitoring_detection.detect_hold_start > HOLD_COUNT_MAX) {
|
||||
opts->m_ai_monitoring_detection.current_detect_value = DevUtil::get_flag_bits(print_json, 15);
|
||||
if (time(nullptr) - opts->xcam_ai_monitoring_hold_start > HOLD_COUNT_MAX) {
|
||||
opts->xcam_ai_monitoring = DevUtil::get_flag_bits(print_json, 15);
|
||||
|
||||
switch (DevUtil::get_flag_bits(print_json, 13, 2)) {
|
||||
case 0: opts->m_ai_monitoring_detection.current_detect_sensitivity_value = "never_halt"; break;
|
||||
case 1: opts->m_ai_monitoring_detection.current_detect_sensitivity_value = "low"; break;
|
||||
case 2: opts->m_ai_monitoring_detection.current_detect_sensitivity_value = "medium"; break;
|
||||
case 3: opts->m_ai_monitoring_detection.current_detect_sensitivity_value = "high"; break;
|
||||
case 0: opts->xcam_ai_monitoring_sensitivity = "never_halt"; break;
|
||||
case 1: opts->xcam_ai_monitoring_sensitivity = "low"; break;
|
||||
case 2: opts->xcam_ai_monitoring_sensitivity = "medium"; break;
|
||||
case 3: opts->xcam_ai_monitoring_sensitivity = "high"; break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
||||
if (time(nullptr) - opts->m_auto_recovery_detection.detect_hold_start > HOLD_COUNT_MAX){
|
||||
opts->m_auto_recovery_detection.current_detect_value = DevUtil::get_flag_bits(print_json, 16);
|
||||
if (time(nullptr) - opts->xcam_auto_recovery_hold_start > HOLD_COUNT_MAX){
|
||||
opts->xcam_auto_recovery_step_loss =DevUtil::get_flag_bits(print_json, 16);
|
||||
}
|
||||
|
||||
if (time(nullptr) - opts->m_allow_prompt_sound_detection.detect_hold_start > HOLD_TIME_3SEC) {
|
||||
opts->m_allow_prompt_sound_detection.current_detect_value = DevUtil::get_flag_bits(print_json, 22);
|
||||
if (time(nullptr) - opts->xcam_prompt_sound_hold_start > HOLD_TIME_3SEC) {
|
||||
opts->xcam_allow_prompt_sound = DevUtil::get_flag_bits(print_json, 22);
|
||||
}
|
||||
|
||||
if (time(nullptr) - opts->m_filament_tangle_detection.detect_hold_start > HOLD_TIME_3SEC) {
|
||||
opts->m_filament_tangle_detection.current_detect_value = DevUtil::get_flag_bits(print_json, 23);
|
||||
if (time(nullptr) - opts->xcam_filament_tangle_detect_hold_start > HOLD_TIME_3SEC) {
|
||||
opts->xcam_filament_tangle_detect = DevUtil::get_flag_bits(print_json, 23);
|
||||
}
|
||||
}
|
||||
|
||||
void DevPrintOptionsParser::ParseDetectionV2_1(DevPrintOptions *opts, std::string cfg) {
|
||||
if (time(nullptr) - opts->m_idel_heating_protect_detection.detect_hold_start > HOLD_TIME_3SEC)
|
||||
opts->m_idel_heating_protect_detection.current_detect_value = DevUtil::get_flag_bits(cfg, 32, 2);
|
||||
|
||||
// Orca: further top-level cfg-string detection bits, parsed here alongside idle-heating.
|
||||
if (time(nullptr) - opts->m_purify_air_at_print_end.detect_hold_start > HOLD_TIME_3SEC)
|
||||
opts->m_purify_air_at_print_end.current_detect_value = DevUtil::get_flag_bits(cfg, 36, 2);
|
||||
|
||||
// Smart nozzle blob detection mode: cfg bits 43-44 (2 bits), 0=off, 1=on, 2=auto
|
||||
if (time(nullptr) - opts->m_smart_nozzle_blob_detection.detect_hold_start > HOLD_TIME_3SEC)
|
||||
opts->m_smart_nozzle_blob_detection.current_detect_value = DevUtil::get_flag_bits(cfg, 43, 2);
|
||||
|
||||
if (time(nullptr) - opts->m_snapshot_detection.detect_hold_start > HOLD_TIME_3SEC) {
|
||||
opts->m_snapshot_detection.current_detect_value = DevUtil::get_flag_bits(cfg, 38, 2);
|
||||
opts->m_snapshot_detection.is_support_detect =
|
||||
opts->m_snapshot_detection.current_detect_value != 0 && opts->m_snapshot_detection.current_detect_value != 3;
|
||||
}
|
||||
if (time(nullptr) - opts->idel_heating_protect_hold_strat > HOLD_TIME_3SEC)
|
||||
opts->idel_heating_protect_enabled = DevUtil::get_flag_bits(cfg, 32, 2);
|
||||
}
|
||||
|
||||
void DevPrintOptions::SetPrintingSpeedLevel(DevPrintingSpeedLevel speed_level)
|
||||
@@ -222,85 +163,75 @@ void DevPrintOptions::SetPrintingSpeedLevel(DevPrintingSpeedLevel speed_level)
|
||||
}
|
||||
}
|
||||
|
||||
PrintOptionData* DevPrintOptions::GetDetectionOption(PrintOptionEnum print_option)
|
||||
{
|
||||
auto it = m_detection_list.find(print_option);
|
||||
if (it != m_detection_list.end())
|
||||
{
|
||||
return it->second;
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
int DevPrintOptions::command_xcam_control_ai_monitoring(bool on_off, std::string lvl)
|
||||
{
|
||||
bool print_halt = (lvl == "never_halt") ? false : true;
|
||||
|
||||
m_ai_monitoring_detection.current_detect_value = on_off;
|
||||
m_ai_monitoring_detection.detect_hold_start = time(nullptr);
|
||||
m_ai_monitoring_detection.current_detect_sensitivity_value = lvl;
|
||||
xcam_ai_monitoring = on_off;
|
||||
xcam_ai_monitoring_hold_start = time(nullptr);
|
||||
xcam_ai_monitoring_sensitivity = lvl;
|
||||
return command_xcam_control("printing_monitor", on_off, m_obj, lvl);
|
||||
}
|
||||
|
||||
int DevPrintOptions::command_xcam_control_idelheatingprotect_detector(bool on_off)
|
||||
{
|
||||
m_idel_heating_protect_detection.current_detect_value = on_off;
|
||||
m_idel_heating_protect_detection.detect_hold_start = time(nullptr);
|
||||
idel_heating_protect_enabled = on_off;
|
||||
idel_heating_protect_hold_strat = time(nullptr);
|
||||
return command_set_against_continued_heating_mode(on_off);
|
||||
}
|
||||
|
||||
int DevPrintOptions::command_xcam_control_buildplate_marker_detector(bool on_off)
|
||||
{
|
||||
m_buildplate_mark_detection.current_detect_value = on_off;
|
||||
m_buildplate_mark_detection.detect_hold_start = time(nullptr);
|
||||
xcam_buildplate_marker_detector = on_off;
|
||||
xcam_buildplate_marker_hold_start = time(nullptr);
|
||||
return command_xcam_control("buildplate_marker_detector", on_off ,m_obj);
|
||||
}
|
||||
|
||||
int DevPrintOptions::command_xcam_control_first_layer_inspector(bool on_off, bool print_halt)
|
||||
{
|
||||
m_first_layer_detection.current_detect_value = on_off;
|
||||
m_first_layer_detection.detect_hold_start = time(nullptr);
|
||||
xcam_first_layer_inspector = on_off;
|
||||
xcam_first_layer_hold_start = time(nullptr);
|
||||
return command_xcam_control("first_layer_inspector", on_off, m_obj);
|
||||
}
|
||||
|
||||
int DevPrintOptions::command_xcam_control_auto_recovery_step_loss(bool on_off)
|
||||
{
|
||||
m_auto_recovery_detection.current_detect_value = on_off;
|
||||
m_auto_recovery_detection.detect_hold_start = time(nullptr);
|
||||
xcam_auto_recovery_step_loss = on_off;
|
||||
xcam_auto_recovery_hold_start = time(nullptr);
|
||||
return command_set_printing_option(on_off, m_obj);
|
||||
}
|
||||
|
||||
int DevPrintOptions::command_xcam_control_allow_prompt_sound(bool on_off)
|
||||
{
|
||||
m_allow_prompt_sound_detection.current_detect_value = on_off;
|
||||
m_allow_prompt_sound_detection.detect_hold_start = time(nullptr);
|
||||
xcam_allow_prompt_sound = on_off;
|
||||
xcam_prompt_sound_hold_start = time(nullptr);
|
||||
return command_set_prompt_sound(on_off, m_obj);
|
||||
}
|
||||
|
||||
int DevPrintOptions::command_xcam_control_filament_tangle_detect(bool on_off)
|
||||
{
|
||||
m_filament_tangle_detection.current_detect_value = on_off;
|
||||
m_filament_tangle_detection.detect_hold_start = time(nullptr);
|
||||
xcam_filament_tangle_detect = on_off;
|
||||
xcam_filament_tangle_detect_hold_start = time(nullptr);
|
||||
return command_set_filament_tangle_detect(on_off, m_obj);
|
||||
}
|
||||
|
||||
void DevPrintOptions::parse_auto_recovery_step_loss_status(int flag) {
|
||||
if (time(nullptr) - m_auto_recovery_detection.detect_hold_start > HOLD_TIME_3SEC) {
|
||||
m_auto_recovery_detection.current_detect_value = ((flag >> 4) & 0x1) != 0;
|
||||
if (time(nullptr) - xcam_auto_recovery_hold_start > HOLD_TIME_3SEC) {
|
||||
xcam_auto_recovery_step_loss = ((flag >> 4) & 0x1) != 0;
|
||||
}
|
||||
}
|
||||
|
||||
void DevPrintOptions::parse_allow_prompt_sound_status(int flag)
|
||||
{
|
||||
if (time(nullptr) - m_allow_prompt_sound_detection.detect_hold_start > HOLD_TIME_3SEC) {
|
||||
m_allow_prompt_sound_detection.current_detect_value = ((flag >> 17) & 0x1) != 0;
|
||||
if (time(nullptr) - xcam_prompt_sound_hold_start > HOLD_TIME_3SEC) {
|
||||
xcam_allow_prompt_sound = ((flag >> 17) & 0x1) != 0;
|
||||
}
|
||||
}
|
||||
|
||||
void DevPrintOptions::parse_filament_tangle_detect_status(int flag)
|
||||
{
|
||||
if (time(nullptr) - m_filament_tangle_detection.detect_hold_start > HOLD_TIME_3SEC) {
|
||||
m_filament_tangle_detection.current_detect_value = ((flag >> 20) & 0x1) != 0;
|
||||
if (time(nullptr) - xcam_filament_tangle_detect_hold_start > HOLD_TIME_3SEC) {
|
||||
xcam_filament_tangle_detect = ((flag >> 20) & 0x1) != 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -358,75 +289,11 @@ int DevPrintOptions::command_set_filament_tangle_detect(bool filament_tangle_det
|
||||
return obj->publish_json(j);
|
||||
}
|
||||
|
||||
int DevPrintOptions::command_xcam_control_build_plate_align_detector(bool on_off)
|
||||
{
|
||||
m_buildplate_align_detection.current_detect_value = on_off;
|
||||
m_buildplate_align_detection.detect_hold_start = time(nullptr);
|
||||
return command_xcam_control("plate_offset_switch", on_off, m_obj);
|
||||
}
|
||||
|
||||
int DevPrintOptions::command_xcam_control_fod_check(bool on_off)
|
||||
{
|
||||
m_fod_check_detection.current_detect_value = on_off;
|
||||
m_fod_check_detection.detect_hold_start = time(nullptr);
|
||||
return command_xcam_control("fod_check", on_off, m_obj);
|
||||
}
|
||||
|
||||
int DevPrintOptions::command_xcam_control_displacement_detection(bool on_off)
|
||||
{
|
||||
m_displacement_detection.current_detect_value = on_off;
|
||||
m_displacement_detection.detect_hold_start = time(nullptr);
|
||||
return command_xcam_control("model_movement_check", on_off, m_obj);
|
||||
}
|
||||
|
||||
int DevPrintOptions::command_xcam_control_purify_air_at_print_end(int on_off)
|
||||
{
|
||||
m_purify_air_at_print_end.current_detect_value = on_off;
|
||||
m_purify_air_at_print_end.detect_hold_start = time(nullptr);
|
||||
return command_set_purify_air_at_print_end((PurifyAirAtPrintEndState) on_off, m_obj);
|
||||
}
|
||||
|
||||
int DevPrintOptions::command_set_purify_air_at_print_end(PurifyAirAtPrintEndState state, MachineObject *obj)
|
||||
{
|
||||
json j;
|
||||
j["print"]["command"] = "print_option";
|
||||
j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++);
|
||||
switch (state)
|
||||
{
|
||||
case PurifyAirAtPrintEndState::PurifyAirDisable: j["print"]["air_purification"] = 0; break;
|
||||
case PurifyAirAtPrintEndState::PurifyAirByInside: j["print"]["air_purification"] = 1; break;
|
||||
case PurifyAirAtPrintEndState::PurifyAirByOutside: j["print"]["air_purification"] = 2; break;
|
||||
default: assert(0);
|
||||
}
|
||||
return obj->publish_json(j);
|
||||
}
|
||||
|
||||
int DevPrintOptions::command_snapshot_control(int on_off)
|
||||
{
|
||||
m_snapshot_detection.current_detect_value = on_off;
|
||||
m_snapshot_detection.detect_hold_start = time(nullptr);
|
||||
return command_set_snapshot_control(on_off, m_obj);
|
||||
}
|
||||
|
||||
int DevPrintOptions::command_set_snapshot_control(int on_off, MachineObject *obj)
|
||||
{
|
||||
json j;
|
||||
j["camera"]["command"] = "ipcam_cap_pic_set";
|
||||
j["camera"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++);
|
||||
j["camera"]["control"] = on_off ? "enable" : "disable";
|
||||
return obj->publish_json(j);
|
||||
}
|
||||
|
||||
int DevPrintOptions::command_smart_nozzle_blob_detect_mode(int mode)
|
||||
{
|
||||
json j;
|
||||
j["print"]["command"] = "print_option";
|
||||
j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++);
|
||||
j["print"]["nozzle_blob_detect_v2"] = mode; // int: 0=off, 1=on, 2=auto
|
||||
m_smart_nozzle_blob_detection.current_detect_value = mode;
|
||||
m_smart_nozzle_blob_detection.detect_hold_start = time(nullptr);
|
||||
return m_obj->publish_json(j);
|
||||
}
|
||||
|
||||
}
|
||||
// namespace Slic3r
|
||||
// namespace Slic3r
|
||||
@@ -1,5 +1,4 @@
|
||||
#pragma once
|
||||
#include <map>
|
||||
#include <nlohmann/json.hpp>
|
||||
#include "slic3r/Utils/json_diff.hpp"
|
||||
#include <wx/string.h>
|
||||
@@ -10,53 +9,17 @@ namespace Slic3r {
|
||||
|
||||
class MachineObject;
|
||||
|
||||
// Identifies a print-detection option tracked in DevPrintOptions::m_detection_list.
|
||||
enum class PrintOptionEnum
|
||||
{
|
||||
AI_Monitoring,
|
||||
First_Layer_Detection,
|
||||
Buildplate_Mark_Detection,
|
||||
Buildplate_Align_Detection,
|
||||
Auto_Recovery_Detection,
|
||||
Allow_Prompt_Sound_Detection,
|
||||
Filament_Tangle_Detection,
|
||||
Idle_Heating_Protect_Detection,
|
||||
Purify_Air_At_Print_End,
|
||||
Snapshot_Detection,
|
||||
FOD_Check_Detection,
|
||||
Displacement_Detection,
|
||||
Smart_Nozzle_Blob_Detection,
|
||||
};
|
||||
|
||||
// State of a single print-detection option.
|
||||
struct PrintOptionData
|
||||
{
|
||||
bool is_support_detect{false}; // some detections have no supporting field
|
||||
int current_detect_value{-1}; // -1 until parsed; otherwise the reported value
|
||||
std::string current_detect_sensitivity_value;
|
||||
time_t detect_hold_start{0}; // suppresses parsed overwrites for a short hold
|
||||
};
|
||||
|
||||
class DevPrintOptions
|
||||
{
|
||||
friend class DevPrintOptionsParser;
|
||||
public:
|
||||
DevPrintOptions(MachineObject* obj);
|
||||
DevPrintOptions(MachineObject* obj): m_obj(obj) {}
|
||||
|
||||
// Tri-state for the purify-air-at-print-end firmware option (matches the MQTT air_purification value).
|
||||
enum class PurifyAirAtPrintEndState : int {
|
||||
PurifyAirDisable = 0,
|
||||
PurifyAirByInside = 1,
|
||||
PurifyAirByOutside = 2,
|
||||
};
|
||||
|
||||
public:
|
||||
void SetPrintingSpeedLevel(DevPrintingSpeedLevel speed_level);
|
||||
DevPrintingSpeedLevel GetPrintingSpeedLevel() const { return m_speed_level;}
|
||||
|
||||
// Returns the holder for a tracked detection option, or nullptr if not tracked.
|
||||
PrintOptionData* GetDetectionOption(PrintOptionEnum print_option);
|
||||
|
||||
// detect options
|
||||
int command_xcam_control_ai_monitoring(bool on_off, std::string lvl);
|
||||
int command_xcam_control_first_layer_inspector(bool on_off, bool print_halt);
|
||||
@@ -66,13 +29,6 @@ public:
|
||||
int command_xcam_control_filament_tangle_detect(bool on_off);
|
||||
int command_xcam_control_idelheatingprotect_detector(bool on_off);
|
||||
|
||||
// Firmware print-option toggles (each gated on a fun2 capability bit).
|
||||
int command_xcam_control_build_plate_align_detector(bool on_off);
|
||||
int command_xcam_control_fod_check(bool on_off);
|
||||
int command_xcam_control_displacement_detection(bool on_off);
|
||||
int command_xcam_control_purify_air_at_print_end(int on_off);
|
||||
int command_smart_nozzle_blob_detect_mode(int mode); // 0=off, 1=on, 2=auto
|
||||
int command_snapshot_control(int on_off);
|
||||
|
||||
int command_xcam_control(std::string module_name, bool on_off, MachineObject *obj ,std::string lvl = "");
|
||||
// set print option
|
||||
@@ -83,44 +39,42 @@ public:
|
||||
int command_set_filament_tangle_detect(bool fliament_tangle_detect, MachineObject *obj);
|
||||
|
||||
int command_set_against_continued_heating_mode(bool on_off);
|
||||
int command_set_purify_air_at_print_end(PurifyAirAtPrintEndState state, MachineObject *obj);
|
||||
int command_set_snapshot_control(int on_off, MachineObject *obj);
|
||||
|
||||
void parse_auto_recovery_step_loss_status(int flag);
|
||||
void parse_allow_prompt_sound_status(int flag);
|
||||
void parse_filament_tangle_detect_status(int flag);
|
||||
|
||||
// Thin wrappers preserved for existing callers; read from the detection-option map.
|
||||
bool GetAiMonitoring() const { return m_ai_monitoring_detection.current_detect_value == 1; }
|
||||
bool GetFirstLayerInspector() const{ return m_first_layer_detection.current_detect_value == 1; }
|
||||
bool GetBuildplateMarkerDetector() const { return m_buildplate_mark_detection.current_detect_value == 1; }
|
||||
bool GetAutoRecoveryStepLoss() const { return m_auto_recovery_detection.current_detect_value == 1; }
|
||||
bool GetAllowPromptSound() const { return m_allow_prompt_sound_detection.current_detect_value == 1; }
|
||||
bool GetFilamentTangleDetect() const { return m_filament_tangle_detection.current_detect_value == 1; }
|
||||
int GetIdelHeatingProtectEenabled() const { return m_idel_heating_protect_detection.current_detect_value; }
|
||||
std::string GetAiMonitoringSensitivity() const { return m_ai_monitoring_detection.current_detect_sensitivity_value; }
|
||||
bool GetAiMonitoring() const { return xcam_ai_monitoring; }
|
||||
bool GetFirstLayerInspector() const{ return xcam_first_layer_inspector; }
|
||||
bool GetBuildplateMarkerDetector() const { return xcam_buildplate_marker_detector; }
|
||||
bool GetAutoRecoveryStepLoss() const { return xcam_auto_recovery_step_loss; }
|
||||
bool GetAllowPromptSound() const { return xcam_allow_prompt_sound; }
|
||||
bool GetFilamentTangleDetect() const { return xcam_filament_tangle_detect; }
|
||||
int GetIdelHeatingProtectEenabled() const { return idel_heating_protect_enabled; }
|
||||
string GetAiMonitoringSensitivity() const { return xcam_ai_monitoring_sensitivity; }
|
||||
|
||||
|
||||
private:
|
||||
// print option
|
||||
DevPrintingSpeedLevel m_speed_level = SPEED_LEVEL_INVALID;
|
||||
|
||||
// detection options
|
||||
PrintOptionData m_ai_monitoring_detection;
|
||||
PrintOptionData m_first_layer_detection;
|
||||
PrintOptionData m_buildplate_mark_detection;
|
||||
PrintOptionData m_buildplate_align_detection;
|
||||
PrintOptionData m_auto_recovery_detection;
|
||||
PrintOptionData m_allow_prompt_sound_detection;
|
||||
PrintOptionData m_filament_tangle_detection;
|
||||
PrintOptionData m_idel_heating_protect_detection;
|
||||
PrintOptionData m_purify_air_at_print_end;
|
||||
PrintOptionData m_snapshot_detection;
|
||||
PrintOptionData m_fod_check_detection;
|
||||
PrintOptionData m_displacement_detection;
|
||||
PrintOptionData m_smart_nozzle_blob_detection;
|
||||
// detect options
|
||||
bool xcam_ai_monitoring{false};
|
||||
|
||||
std::map<PrintOptionEnum, PrintOptionData*> m_detection_list;
|
||||
std::string xcam_ai_monitoring_sensitivity;
|
||||
bool xcam_buildplate_marker_detector{false};
|
||||
bool xcam_first_layer_inspector{false};
|
||||
bool xcam_auto_recovery_step_loss{false};
|
||||
bool xcam_allow_prompt_sound{false};
|
||||
bool xcam_filament_tangle_detect{false};
|
||||
int idel_heating_protect_enabled = -1;
|
||||
time_t xcam_ai_monitoring_hold_start = 0;
|
||||
time_t xcam_buildplate_marker_hold_start = 0;
|
||||
time_t xcam_first_layer_hold_start = 0;
|
||||
time_t xcam_auto_recovery_hold_start = 0;
|
||||
time_t xcam_prompt_sound_hold_start = 0;
|
||||
time_t xcam_filament_tangle_detect_hold_start = 0;
|
||||
time_t idel_heating_protect_hold_strat = 0;
|
||||
|
||||
MachineObject* m_obj;/*owner*/
|
||||
};
|
||||
@@ -139,4 +93,4 @@ public:
|
||||
static void ParseDetectionV2_1(DevPrintOptions *opts, std::string cfg);
|
||||
};
|
||||
|
||||
} // namespace Slic3r
|
||||
} // namespace Slic3r
|
||||
@@ -1,33 +0,0 @@
|
||||
#include "DevStatus.h"
|
||||
#include "slic3r/GUI/DeviceManager.hpp"
|
||||
#include <boost/log/trivial.hpp>
|
||||
|
||||
namespace Slic3r {
|
||||
|
||||
void DevStatus::ParseStatus(const nlohmann::json& print_jj)
|
||||
{
|
||||
try {
|
||||
if (print_jj.contains("job")) {
|
||||
const nlohmann::json& job_jj = print_jj.at("job");
|
||||
if (job_jj.contains("job_state")) {
|
||||
auto new_state = (DevJobState)job_jj.at("job_state").get<int>();
|
||||
if (m_job_state != new_state) {
|
||||
m_job_state = new_state;
|
||||
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": job_state-> " << (int)new_state;
|
||||
}
|
||||
|
||||
if (m_job_state == DevJobState::JobStateFinishing) {
|
||||
m_job_state = DevJobState::JobStateFinish;
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (const std::exception& e) {
|
||||
#if BBL_RELEASE_TO_PUBLIC
|
||||
BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ": get exception";
|
||||
#else
|
||||
BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ": get exception=" << e.what();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace Slic3r
|
||||
@@ -1,43 +0,0 @@
|
||||
#pragma once
|
||||
#include <optional>
|
||||
#include <nlohmann/json.hpp>
|
||||
#include "slic3r/Utils/json_diff.hpp"
|
||||
|
||||
#include "DevDefs.h"
|
||||
|
||||
namespace Slic3r {
|
||||
|
||||
enum DevJobState
|
||||
{
|
||||
JobStateIdle = 0,
|
||||
JobStateSlicing = 1,
|
||||
JobStatePrepare = 2,
|
||||
JobStateStarting = 3,
|
||||
JobStateRunning = 4,
|
||||
JobStatePause = 5,
|
||||
JobStatePausing = 6,
|
||||
JobStateResuming = 7,
|
||||
JobStateFinish = 8,
|
||||
JobStateFailed = 9,
|
||||
JobStateFinishing = 10,
|
||||
JobStateStoppping = 11,
|
||||
};
|
||||
|
||||
class MachineObject;
|
||||
class DevStatus
|
||||
{
|
||||
public:
|
||||
DevStatus(MachineObject* owner) : m_owner(owner) {};
|
||||
|
||||
public:
|
||||
std::optional<DevJobState> GetJobState() const { return m_job_state; }
|
||||
|
||||
// Parse
|
||||
void ParseStatus(const nlohmann::json& print_jj);
|
||||
|
||||
private:
|
||||
MachineObject *m_owner = nullptr;
|
||||
std::optional<DevJobState> m_job_state; // could be nullopt for some old firmware
|
||||
};
|
||||
|
||||
} // namespace Slic3r
|
||||
@@ -19,42 +19,16 @@ DevStorage::SdcardState Slic3r::DevStorage::set_sdcard_state(int state)
|
||||
{
|
||||
if (system)
|
||||
{
|
||||
try {
|
||||
if (print_json.contains("sdcard")) {
|
||||
if (print_json["sdcard"].get<bool>())
|
||||
system->m_sdcard_state = DevStorage::SdcardState::HAS_SDCARD_NORMAL;
|
||||
else
|
||||
system->m_sdcard_state = DevStorage::SdcardState::NO_SDCARD;
|
||||
} else {
|
||||
if (print_json.contains("sdcard")) {
|
||||
if (print_json["sdcard"].get<bool>())
|
||||
system->m_sdcard_state = DevStorage::SdcardState::HAS_SDCARD_NORMAL;
|
||||
else
|
||||
system->m_sdcard_state = DevStorage::SdcardState::NO_SDCARD;
|
||||
}
|
||||
|
||||
// parse timelapse storage space from cam push data
|
||||
if (print_json.contains("device") && print_json["device"].is_object()) {
|
||||
const auto& device_json = print_json["device"];
|
||||
if (device_json.contains("cam") && device_json["cam"].is_object()) {
|
||||
const auto& cam_data = device_json["cam"];
|
||||
if (cam_data.contains("tl_internal_free_kb"))
|
||||
system->tl_internal_free_kb = cam_data["tl_internal_free_kb"].get<int>();
|
||||
if (cam_data.contains("tl_internal_total_kb"))
|
||||
system->tl_internal_total_kb = cam_data["tl_internal_total_kb"].get<int>();
|
||||
if (cam_data.contains("tl_external_free_kb"))
|
||||
system->tl_external_free_kb = cam_data["tl_external_free_kb"].get<int>();
|
||||
if (cam_data.contains("tl_external_total_kb"))
|
||||
system->tl_external_total_kb = cam_data["tl_external_total_kb"].get<int>();
|
||||
}
|
||||
}
|
||||
} catch (...) {}
|
||||
}
|
||||
} else {
|
||||
system->m_sdcard_state = DevStorage::SdcardState::NO_SDCARD;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool DevStorage::is_timelapse_storage_low(const std::string& storage) const
|
||||
{
|
||||
const int THRESHOLD_KB = 20480; // Orca: 20MB (20480 KB; corrected mislabeled comment)
|
||||
if (storage == "internal")
|
||||
return tl_internal_free_kb >= 0 && tl_internal_free_kb < THRESHOLD_KB;
|
||||
else
|
||||
return tl_external_free_kb >= 0 && tl_external_free_kb < THRESHOLD_KB;
|
||||
}
|
||||
|
||||
} // namespace Slic3r
|
||||
@@ -26,21 +26,11 @@ public:
|
||||
SdcardState get_sdcard_state() const { return m_sdcard_state; };
|
||||
SdcardState set_sdcard_state(int state);
|
||||
|
||||
static void ParseV1_0(const json &print_json, DevStorage *system);
|
||||
|
||||
bool is_timelapse_storage_low(const std::string& storage) const;
|
||||
static void ParseV1_0(const json &print_json, DevStorage *system);
|
||||
|
||||
private:
|
||||
MachineObject *m_owner;
|
||||
SdcardState m_sdcard_state { NO_SDCARD };
|
||||
// timelapse storage space info (from device push cam data)
|
||||
int tl_internal_free_kb{-1};
|
||||
int tl_internal_total_kb{-1};
|
||||
int tl_external_free_kb{-1};
|
||||
int tl_external_total_kb{-1};
|
||||
|
||||
|
||||
|
||||
};
|
||||
|
||||
} // namespace Slic3r
|
||||
@@ -1,130 +0,0 @@
|
||||
#include "DevUpgrade.h"
|
||||
#include "DevUtil.h"
|
||||
|
||||
#include "slic3r/GUI/DeviceManager.hpp"
|
||||
|
||||
#include "slic3r/GUI/GUI_App.hpp"
|
||||
#include "slic3r/GUI/I18N.hpp"
|
||||
|
||||
namespace Slic3r {
|
||||
|
||||
int DevUpgrade::GetUpgradeProgressInt() const
|
||||
{
|
||||
try {
|
||||
return std::stoi(m_upgrade_progress);
|
||||
} catch (const std::exception &e) {
|
||||
BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ": " << e.what();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void DevUpgrade::ParseUpgrade_V1_0(const json &print_jj)
|
||||
{
|
||||
if (print_jj.contains("upgrade_state")) {
|
||||
const auto &upgrade_jj = print_jj["upgrade_state"];
|
||||
|
||||
// status and steps
|
||||
DevJsonValParser::ParseVal(upgrade_jj, "status", m_upgrade_status);
|
||||
DevJsonValParser::ParseVal(upgrade_jj, "progress", m_upgrade_progress);
|
||||
DevJsonValParser::ParseVal(upgrade_jj, "message", m_upgrade_message);
|
||||
DevJsonValParser::ParseVal(upgrade_jj, "module", m_upgrade_module);
|
||||
DevJsonValParser::ParseVal(upgrade_jj, "err_code", m_upgrade_err_code);
|
||||
|
||||
// version requested
|
||||
DevJsonValParser::ParseVal(upgrade_jj, "new_version_state", m_upgrade_new_version_state);
|
||||
DevJsonValParser::ParseVal(upgrade_jj, "consistency_request", m_upgrade_consistency_request);
|
||||
DevJsonValParser::ParseVal(upgrade_jj, "force_upgrade", m_upgrade_force_upgrade);
|
||||
|
||||
// version info
|
||||
DevJsonValParser::ParseVal(upgrade_jj, "ota_new_version_number", m_ota_new_version_number);
|
||||
|
||||
// version list
|
||||
if (upgrade_jj.contains("new_ver_list")) {
|
||||
m_new_ver_list.clear();
|
||||
for (auto ver_item = upgrade_jj["new_ver_list"].begin(); ver_item != upgrade_jj["new_ver_list"].end(); ver_item++) {
|
||||
DevFirmwareVersionInfo ver_info;
|
||||
DevJsonValParser::ParseVal(*ver_item, "name", ver_info.name);
|
||||
DevJsonValParser::ParseVal(*ver_item, "cur_ver", ver_info.sw_ver);
|
||||
DevJsonValParser::ParseVal(*ver_item, "new_ver", ver_info.sw_new_ver);
|
||||
m_new_ver_list[ver_info.name] = ver_info;
|
||||
if (ver_info.name == "ota" && m_ota_new_version_number.empty()) { m_ota_new_version_number = ver_info.sw_new_ver; }
|
||||
}
|
||||
} else {
|
||||
m_new_ver_list.clear();
|
||||
}
|
||||
|
||||
// try to parse display state
|
||||
ParseUpgradeDisplayState(upgrade_jj);
|
||||
}
|
||||
|
||||
if (print_jj.contains("cfg")) {
|
||||
const std::string &cfg = print_jj["cfg"].get<std::string>();
|
||||
if (!cfg.empty()) { m_upgrade_force_upgrade = DevUtil::get_flag_bits(cfg, 2); }
|
||||
}
|
||||
}
|
||||
|
||||
void DevUpgrade::ParseUpgradeDisplayState(const json &upgrade_state_jj)
|
||||
{
|
||||
if (upgrade_state_jj.contains("dis_state")) {
|
||||
if ((int) m_upgrade_display_state != upgrade_state_jj["dis_state"].get<int>()) {
|
||||
DevJsonValParser::ParseVal(upgrade_state_jj, "dis_state", m_upgrade_display_state);
|
||||
|
||||
// update the version after upgrade finished
|
||||
if (m_upgrade_display_state == DevFirmwareUpgradeState::UpgradingFinished) {
|
||||
Slic3r::GUI::wxGetApp().CallAfter([this] {
|
||||
m_owner->command_get_version();
|
||||
});
|
||||
}
|
||||
|
||||
// lan mode printer, hide upgrade avaliable state
|
||||
if (m_upgrade_display_state == DevFirmwareUpgradeState::UpgradingAvaliable &&
|
||||
m_owner->is_lan_mode_printer()) {
|
||||
m_upgrade_display_state = DevFirmwareUpgradeState::UpgradingUnavaliable;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// BBS compatibility with old version
|
||||
if (m_upgrade_status == "DOWNLOADING" ||
|
||||
m_upgrade_status == "FLASHING" ||
|
||||
m_upgrade_status == "UPGRADE_REQUEST" ||
|
||||
m_upgrade_status == "PRE_FLASH_START" ||
|
||||
m_upgrade_status == "PRE_FLASH_SUCCESS") {
|
||||
m_upgrade_display_state = DevFirmwareUpgradeState::UpgradingInProgress;
|
||||
} else if (m_upgrade_status == "UPGRADE_SUCCESS" ||
|
||||
m_upgrade_status == "DOWNLOAD_FAIL" ||
|
||||
m_upgrade_status == "FLASH_FAIL" ||
|
||||
m_upgrade_status == "PRE_FLASH_FAIL" ||
|
||||
m_upgrade_status == "UPGRADE_FAIL") {
|
||||
m_upgrade_display_state = DevFirmwareUpgradeState::UpgradingFinished;
|
||||
} else {
|
||||
if (HasNewVersion()) {
|
||||
m_upgrade_display_state = DevFirmwareUpgradeState::UpgradingAvaliable;
|
||||
} else {
|
||||
m_upgrade_display_state = DevFirmwareUpgradeState::UpgradingUnavaliable;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#define UpgradeNoError 0
|
||||
#define UpgradeDownloadFailed -1
|
||||
#define UpgradeVerfifyFailed -2
|
||||
#define UpgradeFlashFailed -3
|
||||
#define UpgradePrinting -4
|
||||
|
||||
wxString DevUpgrade::GetUpgradeErrCodeStr() const
|
||||
{
|
||||
switch (m_upgrade_err_code) {
|
||||
case UpgradeNoError: return _L("Update successful.");
|
||||
case UpgradeDownloadFailed: return _L("Downloading failed.");
|
||||
case UpgradeVerfifyFailed: return _L("Verification failed.");
|
||||
case UpgradeFlashFailed: return _L("Update failed.");
|
||||
case UpgradePrinting: return _L("Update failed.");
|
||||
default: return _L("Update failed.");
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
} // namespace Slic3r
|
||||
@@ -1,108 +0,0 @@
|
||||
#pragma once
|
||||
#include <nlohmann/json.hpp>
|
||||
#include "slic3r/Utils/json_diff.hpp"
|
||||
|
||||
#include "DevDefs.h"
|
||||
#include "DevFirmware.h"
|
||||
|
||||
namespace Slic3r {
|
||||
|
||||
class MachineObject;
|
||||
class DevUpgrade
|
||||
{
|
||||
public:
|
||||
static std::shared_ptr<DevUpgrade> Create(MachineObject *owner) { return std::shared_ptr<DevUpgrade>(new DevUpgrade(owner)); }
|
||||
|
||||
public:
|
||||
// upgrade status
|
||||
bool IsUpgrading() const { return m_upgrade_display_state == DevFirmwareUpgradeState::UpgradingInProgress; }
|
||||
bool IsUpgradeAvaliable() const { return m_upgrade_display_state == DevFirmwareUpgradeState::UpgradingAvaliable; }
|
||||
DevFirmwareUpgradeState GetUpgradeState() const { return m_upgrade_display_state; }
|
||||
std::string GetUpgradeStatusStr() const { return m_upgrade_status; }
|
||||
|
||||
// upgrade request
|
||||
bool IsUpgradeConsistencyRequest() const { return m_upgrade_consistency_request; }
|
||||
bool IsUpgradeForceUpgrade() const { return m_upgrade_force_upgrade; }
|
||||
|
||||
bool HasNewVersion() const { return m_upgrade_new_version_state == 1; }
|
||||
std::string GetOtaNewVersion() const { return m_ota_new_version_number; }
|
||||
std::map<std::string, DevFirmwareVersionInfo> GetNewVersionList() const { return m_new_ver_list; }
|
||||
|
||||
// upgrading
|
||||
std::string GetUpgradeModuleStr() const { return m_upgrade_module; }
|
||||
std::string GetUpgradeProgressStr() const { return m_upgrade_progress; }
|
||||
int GetUpgradeProgressInt() const;
|
||||
std::string GetUpgradeMessageStr() const { return m_upgrade_message; }
|
||||
wxString GetUpgradeErrCodeStr() const;
|
||||
|
||||
public:
|
||||
// ctrls
|
||||
int CtrlUpgradeConfirm();
|
||||
int CtrlUpgradeConsistencyConfirm();
|
||||
int CtrlUpgradeFirmware(FirmwareInfo info);
|
||||
int CtrlUpgradeModule(std::string url, std::string module_type, std::string version);
|
||||
|
||||
// parser
|
||||
void ParseUpgrade_V1_0(const json &print_jj);
|
||||
void ParseUpgradeDisplayState(const json &upgrade_state_jj);
|
||||
|
||||
protected:
|
||||
DevUpgrade(MachineObject *owner) : m_owner(owner) {}
|
||||
|
||||
private:
|
||||
MachineObject *m_owner = nullptr;
|
||||
|
||||
int m_upgrade_new_version_state = 0; // 0: invalid version, 1: new version available, 2: no new version
|
||||
bool m_upgrade_consistency_request = false;
|
||||
bool m_upgrade_force_upgrade = false;
|
||||
|
||||
std::string m_ota_new_version_number;
|
||||
std::map<std::string, DevFirmwareVersionInfo> m_new_ver_list; // some protcols have version list
|
||||
DevFirmwareUpgradeState m_upgrade_display_state = DevFirmwareUpgradeState::DC;
|
||||
|
||||
int m_upgrade_err_code = 0;
|
||||
std::string m_upgrade_status;
|
||||
std::string m_upgrade_progress;
|
||||
std::string m_upgrade_message;
|
||||
std::string m_upgrade_module;
|
||||
};
|
||||
|
||||
#if 0 /*TODO*/
|
||||
class DevUpgradeGetVersionInfo
|
||||
{
|
||||
public:
|
||||
DevUpgradeGetVersionInfo(MachineObject* obj) : m_owner(obj) {} ;
|
||||
|
||||
public:
|
||||
bool IsEmpty() const { m_module_version_map.empty();}
|
||||
|
||||
DevFirmwareVersionInfo GetAirPumpVersionInfo() const { return m_air_pump_version_info; }
|
||||
DevFirmwareVersionInfo GetLaserVersionInfo() const { return m_laser_version_info; }
|
||||
DevFirmwareVersionInfo GetCuttingModuleVersionInfo() const { return m_cutting_module_version_info; }
|
||||
DevFirmwareVersionInfo GetExtinguishVersionInfo() const { return m_extinguish_version_info; }
|
||||
DevFirmwareVersionInfo GetRotaryVersionInfo() const { return m_rotary_version_info; }
|
||||
std::map<std::string, DevFirmwareVersionInfo> GetModuleVersionInfoMap() const { return m_module_version_map; }
|
||||
|
||||
public:
|
||||
int CtrlGetVersion(bool with_retry = true);
|
||||
|
||||
void ParseGetVersion(const json &print_jj);
|
||||
|
||||
private:
|
||||
MachineObject *m_owner;
|
||||
|
||||
// some version info
|
||||
DevFirmwareVersionInfo m_air_pump_version_info;
|
||||
DevFirmwareVersionInfo m_laser_version_info;
|
||||
DevFirmwareVersionInfo m_cutting_module_version_info;
|
||||
DevFirmwareVersionInfo m_extinguish_version_info;
|
||||
DevFirmwareVersionInfo m_rotary_version_info;
|
||||
std::map<std::string, DevFirmwareVersionInfo> m_module_version_map;
|
||||
|
||||
// ctrl retry
|
||||
int m_retry_count = 0;
|
||||
int m_max_retry = 3;
|
||||
};
|
||||
#endif
|
||||
|
||||
} // namespace Slic3r
|
||||
@@ -1,56 +0,0 @@
|
||||
#include "DevUpgrade.h"
|
||||
#include "DevUtil.h"
|
||||
|
||||
#include "slic3r/GUI/DeviceManager.hpp"
|
||||
|
||||
namespace Slic3r {
|
||||
|
||||
int DevUpgrade::CtrlUpgradeConfirm()
|
||||
{
|
||||
json j;
|
||||
j["upgrade"]["command"] = "upgrade_confirm";
|
||||
j["upgrade"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++);
|
||||
j["upgrade"]["src_id"] = 1; // 1 for slicer
|
||||
return m_owner->publish_json(j);
|
||||
}
|
||||
|
||||
int DevUpgrade::CtrlUpgradeConsistencyConfirm()
|
||||
{
|
||||
json j;
|
||||
j["upgrade"]["command"] = "consistency_confirm";
|
||||
j["upgrade"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++);
|
||||
j["upgrade"]["src_id"] = 1; // 1 for slicer
|
||||
return m_owner->publish_json(j);
|
||||
}
|
||||
|
||||
int DevUpgrade::CtrlUpgradeFirmware(FirmwareInfo info)
|
||||
{
|
||||
std::string version = info.version;
|
||||
std::string dst_url = info.url;
|
||||
std::string module_name = info.module_type;
|
||||
|
||||
json j;
|
||||
j["upgrade"]["command"] = "start";
|
||||
j["upgrade"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++);
|
||||
j["upgrade"]["url"] = info.url;
|
||||
j["upgrade"]["module"] = info.module_type;
|
||||
j["upgrade"]["version"] = info.version;
|
||||
j["upgrade"]["src_id"] = 1;
|
||||
|
||||
return m_owner->publish_json(j);
|
||||
}
|
||||
|
||||
int DevUpgrade::CtrlUpgradeModule(std::string url, std::string module_type, std::string version)
|
||||
{
|
||||
json j;
|
||||
j["upgrade"]["command"] = "start";
|
||||
j["upgrade"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++);
|
||||
j["upgrade"]["url"] = url;
|
||||
j["upgrade"]["module"] = module_type;
|
||||
j["upgrade"]["version"] = version;
|
||||
j["upgrade"]["src_id"] = 1;
|
||||
|
||||
return m_owner->publish_json(j);
|
||||
}
|
||||
|
||||
} // namespace Slic3r
|
||||
@@ -24,79 +24,6 @@ int DevUtil::get_flag_bits(std::string str, int start, int count)
|
||||
|
||||
return 0;
|
||||
}
|
||||
uint32_t DevUtil::get_flag_bits_no_border(std::string str, int start_idx, int count)
|
||||
{
|
||||
if (start_idx < 0 || count <= 0) return 0;
|
||||
|
||||
try {
|
||||
// --- 1) trim ---
|
||||
auto ltrim = [](std::string &s) { s.erase(s.begin(), std::find_if(s.begin(), s.end(), [](unsigned char ch) { return !std::isspace(ch); })); };
|
||||
auto rtrim = [](std::string &s) { s.erase(std::find_if(s.rbegin(), s.rend(), [](unsigned char ch) { return !std::isspace(ch); }).base(), s.end()); };
|
||||
ltrim(str);
|
||||
rtrim(str);
|
||||
|
||||
// --- 2) remove 0x/0X prefix ---
|
||||
if (str.size() >= 2 && str[0] == '0' && (str[1] == 'x' || str[1] == 'X')) { str.erase(0, 2); }
|
||||
|
||||
// --- 3) keep only hex digits ---
|
||||
std::string hex;
|
||||
hex.reserve(str.size());
|
||||
for (char c : str) {
|
||||
if (std::isxdigit(static_cast<unsigned char>(c))) hex.push_back(c);
|
||||
}
|
||||
if (hex.empty()) return 0;
|
||||
|
||||
// --- 4) use size_t for all index/bit math ---
|
||||
const size_t total_bits = hex.size() * 4ULL;
|
||||
|
||||
const size_t ustart = static_cast<size_t>(start_idx);
|
||||
if (ustart >= total_bits) return 0;
|
||||
|
||||
const int int_bits = std::numeric_limits<uint32_t>::digits; // typically 32
|
||||
const size_t need_bits = static_cast<size_t>(std::min(count, int_bits));
|
||||
|
||||
// [first_bit, last_bit]
|
||||
const size_t first_bit = ustart;
|
||||
const size_t last_bit = std::min(ustart + need_bits, total_bits) - 1ULL;
|
||||
if (last_bit < first_bit) return 0;
|
||||
|
||||
const size_t right_index = hex.size() - 1ULL;
|
||||
|
||||
const size_t first_nibble = first_bit / 4ULL;
|
||||
const size_t last_nibble = last_bit / 4ULL;
|
||||
|
||||
const size_t start_idx = right_index - last_nibble;
|
||||
const size_t end_idx = right_index - first_nibble;
|
||||
if (end_idx < start_idx) return 0;
|
||||
|
||||
const size_t sub_len = end_idx - start_idx + 1ULL;
|
||||
if (end_idx >= hex.size()) return 0;
|
||||
|
||||
const std::string sub_hex = hex.substr(start_idx, sub_len);
|
||||
|
||||
unsigned long long chunk = std::stoull(sub_hex, nullptr, 16);
|
||||
|
||||
const unsigned nibble_offset = static_cast<unsigned>(first_bit % 4ULL);
|
||||
const unsigned long long shifted = (nibble_offset == 0U) ? chunk : (chunk >> nibble_offset);
|
||||
|
||||
uint32_t mask;
|
||||
if (need_bits >= static_cast<size_t>(std::numeric_limits<uint32_t>::digits)) {
|
||||
mask = std::numeric_limits<uint32_t>::max();
|
||||
} else {
|
||||
mask = static_cast<uint32_t>((1ULL << need_bits) - 1ULL);
|
||||
}
|
||||
|
||||
const uint32_t val = static_cast<uint32_t>(shifted & mask);
|
||||
return val;
|
||||
} catch (const std::invalid_argument &) {
|
||||
return 0;
|
||||
} catch (const std::out_of_range &) {
|
||||
return 0;
|
||||
} catch (...) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int DevUtil::get_flag_bits(int num, int start, int count, int base)
|
||||
{
|
||||
|
||||
@@ -12,15 +12,8 @@
|
||||
#include <stdexcept>
|
||||
|
||||
#include <boost/log/trivial.hpp>
|
||||
#include <boost/lexical_cast.hpp>
|
||||
|
||||
#include "nlohmann/json.hpp"
|
||||
|
||||
/* Sequence Id*/
|
||||
#define STUDIO_START_SEQ_ID 20000
|
||||
#define STUDIO_END_SEQ_ID 30000
|
||||
#define CLOUD_SEQ_ID 0
|
||||
|
||||
namespace Slic3r
|
||||
{
|
||||
|
||||
@@ -34,18 +27,14 @@ public:
|
||||
public:
|
||||
static int get_flag_bits(std::string str, int start, int count = 1);
|
||||
static int get_flag_bits(int num, int start, int count = 1, int base = 10);
|
||||
static uint32_t get_flag_bits_no_border(std::string str, int start_idx, int count = 1);
|
||||
|
||||
// Extract the hex digit at position `pos` (0 = least-significant).
|
||||
// eg. get_hex_bits(16, 1, 10) = 1
|
||||
static int get_hex_bits(int num, int pos, int input_num_base = 10) { return get_flag_bits(num, pos * 4, 4, input_num_base);};
|
||||
static int get_hex_bits(int num, int pos, int input_num_base = 10) { return get_flag_bits(num, pos * 4, 4, input_num_base); }
|
||||
|
||||
static float string_to_float(const std::string& str_value);
|
||||
|
||||
static std::string convertToIp(long long ip);
|
||||
|
||||
// sequence id check
|
||||
static bool is_studio_cmd(int seq) { return seq >= STUDIO_START_SEQ_ID && seq < STUDIO_END_SEQ_ID;};
|
||||
static bool is_cloud_cmd(int seq) { return seq == CLOUD_SEQ_ID;};
|
||||
};
|
||||
|
||||
|
||||
@@ -119,94 +108,4 @@ struct NumericStrCompare
|
||||
}
|
||||
};
|
||||
|
||||
enum class DirtyMode{
|
||||
COUNTER,
|
||||
TIMER
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
class DevDirtyHandler{
|
||||
public:
|
||||
DevDirtyHandler(T init_value, int setting_threshold, DirtyMode mode): m_value(init_value), m_setting_threshold(setting_threshold), m_mode(mode)
|
||||
{
|
||||
m_threshold = setting_threshold;
|
||||
}
|
||||
~DevDirtyHandler(){};
|
||||
|
||||
T GetValue() const { return m_value; };
|
||||
|
||||
void SetOptimisticValue(const T& data)
|
||||
{
|
||||
m_value = data;
|
||||
m_start_time = time(nullptr);
|
||||
m_threshold = m_setting_threshold;
|
||||
}
|
||||
|
||||
void UpdateValue(const T& data)
|
||||
{
|
||||
if (m_mode == DirtyMode::COUNTER)
|
||||
{
|
||||
if (m_threshold > 0)
|
||||
m_threshold--;
|
||||
else
|
||||
m_value = data;
|
||||
}
|
||||
else if (m_mode == DirtyMode::TIMER)
|
||||
{
|
||||
if (time(nullptr) - m_start_time > m_threshold)
|
||||
m_value = data;
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
T m_value;
|
||||
DirtyMode m_mode;
|
||||
int m_setting_threshold{0};
|
||||
|
||||
int m_start_time{0};
|
||||
int m_threshold{0};
|
||||
};
|
||||
|
||||
|
||||
static std::string s_get_diameter_str(float diameter)
|
||||
{
|
||||
return (boost::format("%.2f") % diameter).str();
|
||||
}
|
||||
|
||||
static std::string s_get_diameter_str(const std::string& diameter)
|
||||
{
|
||||
try {
|
||||
float dia = boost::lexical_cast<float>(diameter);
|
||||
return s_get_diameter_str(dia);
|
||||
} catch (...) {
|
||||
BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << " failed to boost::lexical_cast: " << diameter;
|
||||
return diameter;
|
||||
}
|
||||
|
||||
try {
|
||||
float dia = std::stof(diameter);
|
||||
return s_get_diameter_str(dia);
|
||||
} catch (...) {
|
||||
BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << " std::stof: " << diameter;
|
||||
return diameter;
|
||||
}
|
||||
}
|
||||
|
||||
static float s_get_diameter(const std::string& diameter)
|
||||
{
|
||||
try {
|
||||
return boost::lexical_cast<float>(diameter);
|
||||
} catch (...) {
|
||||
BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << " failed to boost::lexical_cast: " << diameter;
|
||||
}
|
||||
|
||||
try {
|
||||
return std::stof(diameter);
|
||||
} catch (...) {
|
||||
BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << " std::stof: " << diameter;
|
||||
}
|
||||
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
}; // namespace Slic3r
|
||||
@@ -2,28 +2,15 @@
|
||||
|
||||
#include "slic3r/GUI/BackgroundSlicingProcess.hpp"
|
||||
|
||||
#include "slic3r/GUI/PartPlate.hpp"
|
||||
#include "slic3r/GUI/Plater.hpp"
|
||||
#include "slic3r/GUI/GUI_App.hpp"
|
||||
|
||||
#include <boost/lexical_cast.hpp>
|
||||
#include <wx/string.h>
|
||||
#include <boost/log/trivial.hpp>
|
||||
|
||||
namespace Slic3r
|
||||
{
|
||||
|
||||
|
||||
Slic3r::MultiNozzleUtils::NozzleInfo DevUtilBackend::GetNozzleInfo(const DevNozzle& dev_nozzle)
|
||||
{
|
||||
MultiNozzleUtils::NozzleInfo info;
|
||||
info.diameter = dev_nozzle.GetNozzleDiameterStr().ToStdString();
|
||||
info.volume_type = DevNozzle::ToNozzleVolumeType(dev_nozzle.GetNozzleFlowType());
|
||||
info.extruder_id = dev_nozzle.GetLogicExtruderId();
|
||||
|
||||
return info;
|
||||
}
|
||||
|
||||
std::shared_ptr<Slic3r::MultiNozzleUtils::NozzleGroupResultBase> DevUtilBackend::GetNozzleGroupResult(Slic3r::GUI::Plater *plater)
|
||||
std::shared_ptr<MultiNozzleUtils::NozzleGroupResultBase> DevUtilBackend::GetNozzleGroupResult(Slic3r::GUI::Plater* plater)
|
||||
{
|
||||
if (plater && plater->background_process().get_current_gcode_result()) {
|
||||
return plater->background_process().get_current_gcode_result()->nozzle_group_result;
|
||||
@@ -32,29 +19,6 @@ std::shared_ptr<Slic3r::MultiNozzleUtils::NozzleGroupResultBase> DevUtilBackend:
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
std::unordered_map<NozzleDef, int> DevUtilBackend::CollectNozzleInfo(MultiNozzleUtils::NozzleGroupResultBase *nozzle_group_res, int logic_ext_id)
|
||||
{
|
||||
std::unordered_map<NozzleDef, int> need_nozzle_map;
|
||||
if (!nozzle_group_res) {
|
||||
return need_nozzle_map;
|
||||
}
|
||||
|
||||
const std::vector<Slic3r::MultiNozzleUtils::NozzleInfo>& nozzle_vec = nozzle_group_res->get_used_nozzles_in_extruder(logic_ext_id);
|
||||
for (auto slicing_nozzle : nozzle_vec) {
|
||||
try {
|
||||
NozzleDef data;
|
||||
data.nozzle_diameter = boost::lexical_cast<float>(slicing_nozzle.diameter);
|
||||
data.nozzle_flow_type = DevNozzle::ToNozzleFlowType(slicing_nozzle.volume_type);
|
||||
need_nozzle_map[data]++;
|
||||
} catch (const std::exception& e) {
|
||||
assert(0);
|
||||
BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << "exception: " << e.what();
|
||||
}
|
||||
}
|
||||
|
||||
return need_nozzle_map;
|
||||
}
|
||||
|
||||
static std::unordered_map<std::string, DevAmsType> s_ams_type_map = {
|
||||
{"0", DevAmsType::N3F},
|
||||
{"1", DevAmsType::N3S},
|
||||
@@ -77,7 +41,6 @@ std::optional<Slic3r::DevFilamentDryingPreset> DevUtilBackend::GetFilamentDrying
|
||||
std::vector<std::string> types = config.option<ConfigOptionStrings>("filament_dev_ams_drying_ams_limitations")->values;
|
||||
for (auto type : types) {
|
||||
if (s_ams_type_map.count(type) == 0) {
|
||||
// assert(0);
|
||||
continue;
|
||||
}
|
||||
info.ams_limitations.insert(s_ams_type_map[type]);
|
||||
@@ -99,10 +62,10 @@ std::optional<Slic3r::DevFilamentDryingPreset> DevUtilBackend::GetFilamentDrying
|
||||
}
|
||||
|
||||
if (config.has("filament_dev_drying_softening_temperature")) {
|
||||
info.filament_dev_drying_softening_temperature = config.option<ConfigOptionFloats>("filament_dev_drying_softening_temperature")->get_at(0);
|
||||
info.filament_dev_drying_softening_temperature = config.option<ConfigOptionFloats>("filament_dev_drying_softening_temperature")->get_at(0);
|
||||
}
|
||||
|
||||
if (config.has("filament_dev_ams_drying_heat_distortion_temperature")){
|
||||
if (config.has("filament_dev_ams_drying_heat_distortion_temperature")) {
|
||||
info.filament_dev_ams_drying_heat_distortion_temperature = config.option<ConfigOptionFloats>("filament_dev_ams_drying_heat_distortion_temperature")->get_at(0);
|
||||
}
|
||||
|
||||
@@ -120,4 +83,4 @@ std::optional<Slic3r::DevFilamentDryingPreset> DevUtilBackend::GetFilamentDrying
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
};// namespace Slic3r
|
||||
}; // namespace Slic3r
|
||||
|
||||
@@ -1,32 +1,19 @@
|
||||
/**
|
||||
* @file DevUtilBackend.h
|
||||
* @brief Provides common static utility methods for backend (preset/slicing).
|
||||
*
|
||||
* This class offers a collection of static helper functions such as string manipulation,
|
||||
* file operations, and other frequently used utilities.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#include "DevDefs.h"
|
||||
#include "DevNozzleSystem.h"
|
||||
#include "DevFilaSystem.h"
|
||||
|
||||
#include "libslic3r/MultiNozzleUtils.hpp"
|
||||
#include <unordered_map>
|
||||
|
||||
// Forward declarations
|
||||
namespace Slic3r
|
||||
{
|
||||
class MachineObject;
|
||||
|
||||
namespace GUI
|
||||
{
|
||||
class Plater;
|
||||
}
|
||||
}; // namespace Slic3r::GUI
|
||||
#include <optional>
|
||||
#include <string>
|
||||
|
||||
namespace Slic3r
|
||||
{
|
||||
namespace GUI { class Plater; }
|
||||
|
||||
class DevUtilBackend
|
||||
{
|
||||
@@ -34,14 +21,14 @@ public:
|
||||
DevUtilBackend() = delete;
|
||||
|
||||
public:
|
||||
static MultiNozzleUtils::NozzleInfo GetNozzleInfo(const DevNozzle& dev_nozzle);
|
||||
|
||||
// for rack
|
||||
static std::shared_ptr<MultiNozzleUtils::NozzleGroupResultBase> GetNozzleGroupResult(Slic3r::GUI::Plater *plater);
|
||||
static std::unordered_map<NozzleDef, int> CollectNozzleInfo(MultiNozzleUtils::NozzleGroupResultBase *nozzle_group_res, int logic_ext_id);
|
||||
// for rack: the slicer's per-filament -> logical-nozzle grouping for the current plate, read off
|
||||
// the post-slice GCodeProcessorResult (plater->background_process().get_current_gcode_result()).
|
||||
// Returns nullptr when there is no plater / no current result.
|
||||
static std::shared_ptr<MultiNozzleUtils::NozzleGroupResultBase> GetNozzleGroupResult(Slic3r::GUI::Plater* plater);
|
||||
|
||||
// for filament preset
|
||||
static std::optional<DevFilamentDryingPreset> GetFilamentDryingPreset(const std::string& fila_id);
|
||||
};
|
||||
|
||||
}; // namespace Slic3r
|
||||
}; // namespace Slic3r
|
||||
|
||||
@@ -5,10 +5,6 @@
|
||||
#include "GUI_App.hpp"
|
||||
#include "MainFrame.hpp"
|
||||
#include "ReleaseNote.hpp"
|
||||
#include "wxExtensions.hpp"
|
||||
|
||||
#include <wx/mstream.h>
|
||||
#include <wx/dcmemory.h>
|
||||
|
||||
namespace Slic3r {
|
||||
namespace GUI
|
||||
@@ -92,22 +88,10 @@ DeviceErrorDialog::DeviceErrorDialog(MachineObject* obj, wxWindow* parent, wxWin
|
||||
if (m_obj) { m_obj->command_clean_print_error_uiop(m_obj->print_error); }
|
||||
e.Skip();
|
||||
});
|
||||
|
||||
m_request_timer = new wxTimer(this);
|
||||
Bind(wxEVT_TIMER, &DeviceErrorDialog::on_request_timeout, this, m_request_timer->GetId());
|
||||
}
|
||||
|
||||
DeviceErrorDialog::~DeviceErrorDialog()
|
||||
{
|
||||
// Orca: invalidate any in-flight cloud snapshot callback (the request has no cancel handle)
|
||||
*m_alive = false;
|
||||
|
||||
if (m_request_timer) {
|
||||
m_request_timer->Stop();
|
||||
delete m_request_timer;
|
||||
m_request_timer = nullptr;
|
||||
}
|
||||
|
||||
if (web_request.IsOk() && web_request.GetState() == wxWebRequest::State_Active)
|
||||
{
|
||||
BOOST_LOG_TRIVIAL(info) << "web_request: cancelled";
|
||||
@@ -119,11 +103,6 @@ DeviceErrorDialog::~DeviceErrorDialog()
|
||||
void DeviceErrorDialog::on_webrequest_state(wxWebRequestEvent& evt)
|
||||
{
|
||||
BOOST_LOG_TRIVIAL(trace) << "monitor: monitor_panel web request state = " << evt.GetState();
|
||||
|
||||
// A local/HTTP illustration resolved (or the cloud path fell back to it): stop the watchdog.
|
||||
m_request_cancelled.store(true);
|
||||
clear_request_timer();
|
||||
|
||||
switch (evt.GetState())
|
||||
{
|
||||
case wxWebRequest::State_Completed:
|
||||
@@ -141,9 +120,7 @@ void DeviceErrorDialog::on_webrequest_state(wxWebRequestEvent& evt)
|
||||
case wxWebRequest::State_Cancelled:
|
||||
case wxWebRequest::State_Unauthorized:
|
||||
{
|
||||
m_error_picture->SetBitmap(make_placeholder_image(_L("Network unavailable")));
|
||||
Layout();
|
||||
Fit();
|
||||
m_error_picture->SetBitmap(wxBitmap());
|
||||
break;
|
||||
}
|
||||
case wxWebRequest::State_Active:
|
||||
@@ -152,123 +129,6 @@ void DeviceErrorDialog::on_webrequest_state(wxWebRequestEvent& evt)
|
||||
}
|
||||
}
|
||||
|
||||
void DeviceErrorDialog::on_request_timeout(wxTimerEvent& event)
|
||||
{
|
||||
if (m_request_cancelled.load()) { return; }
|
||||
// Same fallback order as the cloud callback: local/HTTP illustration first, placeholder last.
|
||||
if (!get_fail_snapshot_from_local(m_local_img_url)) {
|
||||
m_error_picture->SetBitmap(make_placeholder_image(_L("Network unavailable")));
|
||||
}
|
||||
Layout();
|
||||
Fit();
|
||||
}
|
||||
|
||||
void DeviceErrorDialog::clear_request_timer()
|
||||
{
|
||||
if (m_request_timer && m_request_timer->IsRunning()) {
|
||||
m_request_timer->Stop();
|
||||
}
|
||||
}
|
||||
|
||||
wxBitmap DeviceErrorDialog::make_placeholder_image(const wxString& text)
|
||||
{
|
||||
const int w = FromDIP(320);
|
||||
const int h = FromDIP(180);
|
||||
|
||||
wxBitmap bmp(wxSize(w, h));
|
||||
wxMemoryDC dc(bmp);
|
||||
dc.SetBackground(wxBrush(wxColour(238, 238, 238)));
|
||||
dc.Clear();
|
||||
|
||||
ScalableBitmap icon = ScalableBitmap(this, "dev_hms_diag_loading", 80);
|
||||
wxBitmap icon_bmp = icon.bmp();
|
||||
if (icon_bmp.IsOk()) {
|
||||
int ix = (w - icon_bmp.GetWidth()) / 2;
|
||||
int iy = (h - icon_bmp.GetHeight()) / 3;
|
||||
dc.DrawBitmap(icon_bmp, ix, iy, true);
|
||||
}
|
||||
|
||||
dc.SetTextForeground(wxColour(158, 158, 158));
|
||||
dc.SetFont(Label::Body_14);
|
||||
wxSize txtSize = dc.GetTextExtent(text);
|
||||
int tx = (w - txtSize.GetWidth()) / 2;
|
||||
int ty = h - txtSize.GetHeight() - FromDIP(45);
|
||||
dc.DrawText(text, tx, ty);
|
||||
|
||||
dc.SelectObject(wxNullBitmap);
|
||||
return bmp;
|
||||
}
|
||||
|
||||
bool DeviceErrorDialog::get_fail_snapshot_from_cloud()
|
||||
{
|
||||
if (!m_obj || m_obj->m_print_error_img_id.empty()) { return false; }
|
||||
|
||||
NetworkAgent* agent = wxGetApp().getAgent();
|
||||
if (!agent) { return false; }
|
||||
|
||||
// Orca: the cloud request has no cancel handle, so guard the callback against dialog
|
||||
// destruction with a liveness token (m_alive, cleared in the dtor) and marshal onto the UI
|
||||
// thread via the always-valid app handler instead of this->CallAfter. The raw bytes are
|
||||
// decoded on the UI thread so no wxImage (non-atomic refcount) is shared across threads.
|
||||
// m_request_seq guards against a callback from a previous error painting over the
|
||||
// current one when the dialog is reused by a later show_error_code().
|
||||
auto alive = m_alive;
|
||||
const int seq = m_request_seq;
|
||||
int ret = agent->get_hms_snapshot(m_obj->get_dev_id(), m_obj->m_print_error_img_id,
|
||||
[this, alive, seq](std::string body, int status) {
|
||||
if (!alive->load()) { return; }
|
||||
wxGetApp().CallAfter([this, alive, seq, body = std::move(body), status]() {
|
||||
if (!alive->load()) { return; }
|
||||
if (seq != m_request_seq) { return; }
|
||||
m_request_cancelled.store(true);
|
||||
clear_request_timer();
|
||||
|
||||
wxImage image;
|
||||
bool ok = false;
|
||||
if (status == 200) {
|
||||
wxMemoryInputStream stream(body.data(), body.size());
|
||||
ok = image.LoadFile(stream, wxBITMAP_TYPE_ANY);
|
||||
if (!ok) { BOOST_LOG_TRIVIAL(error) << "get_fail_snapshot_from_cloud: failed to resolve stream"; }
|
||||
} else {
|
||||
BOOST_LOG_TRIVIAL(error) << "get_fail_snapshot_from_cloud: status = " << status;
|
||||
}
|
||||
|
||||
if (ok) {
|
||||
wxImage resize_img = image.Scale(FromDIP(320), FromDIP(180), wxIMAGE_QUALITY_HIGH);
|
||||
m_error_picture->SetBitmap(wxBitmap(resize_img));
|
||||
} else if (!get_fail_snapshot_from_local(m_local_img_url)) {
|
||||
m_error_picture->SetBitmap(make_placeholder_image(_L("Network unavailable")));
|
||||
}
|
||||
Layout();
|
||||
Fit();
|
||||
});
|
||||
});
|
||||
|
||||
return ret == 0; // dispatched; the frame arrives later via the callback
|
||||
}
|
||||
|
||||
bool DeviceErrorDialog::get_fail_snapshot_from_local(const wxString& image_url)
|
||||
{
|
||||
if (image_url.empty()) { return false; }
|
||||
|
||||
const wxImage& img = wxGetApp().get_hms_query()->query_image_from_local(image_url);
|
||||
if (!img.IsOk() && image_url.Contains("http"))
|
||||
{
|
||||
web_request = wxWebSession::GetDefault().CreateRequest(this, image_url);
|
||||
BOOST_LOG_TRIVIAL(trace) << "monitor: create new webrequest, state = " << web_request.GetState();
|
||||
if (web_request.GetState() == wxWebRequest::State_Idle) web_request.Start();
|
||||
BOOST_LOG_TRIVIAL(trace) << "monitor: start new webrequest, state = " << web_request.GetState();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_request_cancelled.store(true);
|
||||
clear_request_timer();
|
||||
const wxImage& resize_img = img.Scale(FromDIP(320), FromDIP(180), wxIMAGE_QUALITY_HIGH);
|
||||
m_error_picture->SetBitmap(wxBitmap(resize_img));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void DeviceErrorDialog::init_button(ActionButton style, wxString buton_text)
|
||||
{
|
||||
if (btn_bg_white.count() == 0)
|
||||
@@ -310,7 +170,6 @@ void DeviceErrorDialog::init_button_list()
|
||||
init_button(FILAMENT_LOAD_RESUME, _L("Filament Loaded, Resume"));
|
||||
init_button(JUMP_TO_LIVEVIEW, _L("View Liveview"));
|
||||
init_button(NO_REMINDER_NEXT_TIME, _L("No Reminder Next Time"));
|
||||
init_button(REFRESH_NOZZLE, _L("Recheck"));
|
||||
init_button(IGNORE_NO_REMINDER_NEXT_TIME, _L("Ignore. Don't Remind Next Time"));
|
||||
init_button(IGNORE_RESUME, _L("Ignore this and Resume"));
|
||||
init_button(PROBLEM_SOLVED_RESUME, _L("Problem Solved and Resume"));
|
||||
@@ -319,10 +178,6 @@ void DeviceErrorDialog::init_button_list()
|
||||
init_button(CANCEL, _L("Cancel"));
|
||||
init_button(STOP_DRYING, _L("Stop Drying"));
|
||||
init_button(PROCEED, _L("Proceed"));
|
||||
init_button(OK_JUMP_RACK, _L("OK"));
|
||||
init_button(ABORT, _L("Abort"));
|
||||
init_button(DISABLE_PURIFICATION, _L("Disable Purification for This Print"));
|
||||
init_button(DONT_REMIND_NEXT_TIME, _L("Don't Remind Me"));
|
||||
init_button(DBL_CHECK_CANCEL, _L("Cancel"));
|
||||
init_button(DBL_CHECK_DONE, _L("Done"));
|
||||
init_button(DBL_CHECK_RETRY, _L("Retry"));
|
||||
@@ -386,7 +241,6 @@ wxString DeviceErrorDialog::show_error_code(int error_code)
|
||||
Raise();
|
||||
|
||||
#ifndef __linux__
|
||||
// Orca: skip RequestUserAttention on Linux/Wayland (urgency-hint deadlock).
|
||||
// On Linux (especially Wayland) RequestUserAttention(wxUSER_ATTENTION_ERROR) maps to
|
||||
// gtk_window_set_urgency_hint(TRUE) which can leave the window in an urgent-but-unfocused
|
||||
// state — clicks no longer reach any widget in the app and the user has to kill the
|
||||
@@ -451,23 +305,22 @@ void DeviceErrorDialog::update_contents(const wxString& title, const wxString& t
|
||||
}
|
||||
|
||||
/* image */
|
||||
// Orca: tiered image slot — prefer the printer's captured camera frame of the failure
|
||||
// (cloud, keyed by m_print_error_img_id), else the local/HTTP HMS illustration, else hide.
|
||||
// Reuses m_error_picture + on_webrequest_state (single widget, no second request). The
|
||||
// loading placeholder and 10s watchdog are armed only for the async cloud fetch; the local
|
||||
// path keeps its existing behavior.
|
||||
m_local_img_url = image_url;
|
||||
m_request_cancelled.store(false);
|
||||
++m_request_seq; // invalidate any snapshot fetch still in flight for the previous error
|
||||
clear_request_timer();
|
||||
if (get_fail_snapshot_from_cloud())
|
||||
{
|
||||
m_error_picture->SetBitmap(make_placeholder_image(_L("Loading ...")));
|
||||
m_request_timer->StartOnce(10000);
|
||||
m_error_picture->Show();
|
||||
}
|
||||
else if (get_fail_snapshot_from_local(image_url))
|
||||
if (!image_url.empty())
|
||||
{
|
||||
const wxImage& img = wxGetApp().get_hms_query()->query_image_from_local(image_url);
|
||||
if (!img.IsOk() && image_url.Contains("http"))
|
||||
{
|
||||
web_request = wxWebSession::GetDefault().CreateRequest(this, image_url);
|
||||
BOOST_LOG_TRIVIAL(trace) << "monitor: create new webrequest, state = " << web_request.GetState();
|
||||
if (web_request.GetState() == wxWebRequest::State_Idle) web_request.Start();
|
||||
BOOST_LOG_TRIVIAL(trace) << "monitor: start new webrequest, state = " << web_request.GetState();
|
||||
}
|
||||
else
|
||||
{
|
||||
const wxImage& resize_img = img.Scale(FromDIP(320), FromDIP(180), wxIMAGE_QUALITY_HIGH);
|
||||
m_error_picture->SetBitmap(wxBitmap(resize_img));
|
||||
}
|
||||
|
||||
m_error_picture->Show();
|
||||
}
|
||||
else
|
||||
@@ -496,10 +349,7 @@ void DeviceErrorDialog::update_contents(const wxString& title, const wxString& t
|
||||
auto text_size = m_error_msg_label->GetBestSize();
|
||||
if (text_size.y < FromDIP(360))
|
||||
{
|
||||
// Orca: reserve the image area exactly when an image is coming (cloud snapshot,
|
||||
// local illustration, or the loading placeholder) - m_error_picture's visibility
|
||||
// was decided above, so no blank slot is reserved when neither source is usable.
|
||||
if (m_error_picture->IsShown())
|
||||
if (!image_url.empty())
|
||||
{
|
||||
m_scroll_area->SetMinSize(wxSize(FromDIP(320), text_size.y + FromDIP(220)));
|
||||
}
|
||||
@@ -612,29 +462,6 @@ void DeviceErrorDialog::on_button_click(ActionButton btn_id)
|
||||
}
|
||||
break;
|
||||
}
|
||||
case DeviceErrorDialog::REFRESH_NOZZLE: {
|
||||
m_obj->command_refresh_nozzle();
|
||||
break;
|
||||
}
|
||||
case DeviceErrorDialog::OK_JUMP_RACK: {
|
||||
Slic3r::GUI::wxGetApp().mainframe->jump_to_monitor();
|
||||
Slic3r::GUI::wxGetApp().mainframe->m_monitor->jump_to_Rack();
|
||||
break;
|
||||
}
|
||||
case DeviceErrorDialog::ABORT: {
|
||||
m_obj->command_ams_control("abort");
|
||||
break;
|
||||
}
|
||||
case DeviceErrorDialog::DISABLE_PURIFICATION: {
|
||||
m_obj->command_purification_disable();
|
||||
break;
|
||||
}
|
||||
case DeviceErrorDialog::DONT_REMIND_NEXT_TIME: {
|
||||
if (!m_action_json.is_null()) {
|
||||
m_obj->command_dont_remind_next_time(m_action_json);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case DeviceErrorDialog::ERROR_BUTTON_COUNT: break;
|
||||
|
||||
case DeviceErrorDialog::DBL_CHECK_CANCEL: {
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <unordered_set>
|
||||
#include <atomic>
|
||||
#include <memory>
|
||||
#include <wx/statbmp.h>
|
||||
#include <wx/timer.h>
|
||||
#include <wx/webrequest.h>
|
||||
|
||||
#include "GUI_Utils.hpp"
|
||||
@@ -38,7 +35,6 @@ public:
|
||||
JUMP_TO_LIVEVIEW,
|
||||
|
||||
NO_REMINDER_NEXT_TIME = 23,
|
||||
REFRESH_NOZZLE = 24,
|
||||
IGNORE_NO_REMINDER_NEXT_TIME = 25,
|
||||
//LOAD_FILAMENT = 26*/
|
||||
IGNORE_RESUME = 27,
|
||||
@@ -50,10 +46,6 @@ public:
|
||||
CANCEL = 37,
|
||||
REMOVE_CLOSE_BTN = 39, // special case, do not show close button
|
||||
PROCEED = 41,
|
||||
OK_JUMP_RACK = 49,
|
||||
ABORT = 51,
|
||||
DISABLE_PURIFICATION = 54,
|
||||
DONT_REMIND_NEXT_TIME = 57,
|
||||
|
||||
ERROR_BUTTON_COUNT,
|
||||
|
||||
@@ -92,11 +84,6 @@ protected:
|
||||
|
||||
void on_button_click(ActionButton btn_id);
|
||||
void on_webrequest_state(wxWebRequestEvent& evt);
|
||||
void on_request_timeout(wxTimerEvent& event);
|
||||
void clear_request_timer();
|
||||
wxBitmap make_placeholder_image(const wxString& text);
|
||||
bool get_fail_snapshot_from_cloud();
|
||||
bool get_fail_snapshot_from_local(const wxString& image_url);
|
||||
void on_dpi_changed(const wxRect& suggested_rect);
|
||||
|
||||
private:
|
||||
@@ -106,14 +93,6 @@ private:
|
||||
std::unordered_set<Button*> m_used_button;
|
||||
|
||||
wxWebRequest web_request;
|
||||
wxTimer* m_request_timer{ nullptr };
|
||||
std::atomic<bool> m_request_cancelled{ false };
|
||||
// UI-thread-only generation counter: bumped on every update_contents() so a cloud
|
||||
// snapshot callback from a previous error cannot paint over the current one.
|
||||
int m_request_seq{ 0 };
|
||||
wxString m_local_img_url;
|
||||
// Orca: liveness token for the async cloud snapshot callback (the request has no cancel handle)
|
||||
std::shared_ptr<std::atomic_bool> m_alive{ std::make_shared<std::atomic_bool>(true) };
|
||||
wxStaticBitmap* m_error_picture;
|
||||
Label* m_error_msg_label{ nullptr };
|
||||
Label* m_error_code_label{ nullptr };
|
||||
|
||||
@@ -44,12 +44,6 @@
|
||||
#include "DeviceCore/DevManager.h"
|
||||
#include "DeviceCore/DevUtil.h"
|
||||
|
||||
// Orca: adopt DeviceCore split — axis/calib/chamber/status/upgrade modules
|
||||
#include "DeviceCore/DevAxis.h"
|
||||
#include "DeviceCore/DevChamber.h"
|
||||
#include "DeviceCore/DevStatus.h"
|
||||
#include "DeviceCore/DevUpgrade.h"
|
||||
|
||||
|
||||
#define CALI_DEBUG
|
||||
#define MINUTE_30 1800000 //ms
|
||||
@@ -74,44 +68,6 @@ int get_tray_id_by_ams_id_and_slot_id(int ams_id, int slot_id)
|
||||
}
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
// Stringing-prone filament IDs per nozzle-diameter bucket.
|
||||
// Mirrors the printer firmware tables (see g_leak_pron_idx_for_0_4 / _0_6_0_8).
|
||||
// Keep these in sync with firmware when new stringing-prone filaments are added.
|
||||
const std::unordered_set<std::string> g_stringing_prone_for_0_4 = {
|
||||
"GFA11", // PLA Aero
|
||||
"GFU90", // TPU 90A
|
||||
"GFU00", // TPU 95A HF
|
||||
"GFU02", // Generic TPU for AMS
|
||||
"GFU98", // TPU for AMS
|
||||
};
|
||||
|
||||
const std::unordered_set<std::string> g_stringing_prone_for_0_6_0_8 = {
|
||||
"GFA11", // PLA Aero
|
||||
"GFU00", // TPU 95A HF
|
||||
};
|
||||
|
||||
// Pick the right table for the given nozzle diameter; returns nullptr if the
|
||||
// nozzle bucket has no entries (e.g. 0.2 mm) or the diameter is invalid.
|
||||
const std::unordered_set<std::string>* pick_stringing_set(float nozzle_diameter)
|
||||
{
|
||||
if (!(nozzle_diameter > 0.f)) return nullptr;
|
||||
if (nozzle_diameter < 0.3f) return nullptr; // 0.2 nozzle: empty
|
||||
if (nozzle_diameter < 0.5f) return &g_stringing_prone_for_0_4;
|
||||
return &g_stringing_prone_for_0_6_0_8; // 0.6 / 0.8 nozzles
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
bool Slic3r::is_stringing_prone_filament(const std::string& filament_id, float nozzle_diameter)
|
||||
{
|
||||
if (filament_id.empty()) return false;
|
||||
const auto* set = pick_stringing_set(nozzle_diameter);
|
||||
if (!set) return false;
|
||||
return set->count(filament_id) > 0;
|
||||
}
|
||||
|
||||
wxString Slic3r::get_stage_string(int stage)
|
||||
{
|
||||
switch(stage) {
|
||||
@@ -597,7 +553,6 @@ MachineObject::MachineObject(DeviceManager* manager, NetworkAgent* agent, std::s
|
||||
mc_print_sub_stage = 0;
|
||||
mc_left_time = 0;
|
||||
hw_switch_state = 0;
|
||||
m_print_error_img_id = "";
|
||||
|
||||
has_ipcam = true; // default true
|
||||
|
||||
@@ -622,13 +577,6 @@ MachineObject::MachineObject(DeviceManager* manager, NetworkAgent* agent, std::s
|
||||
m_print_options = new DevPrintOptions(this);
|
||||
|
||||
m_nozzle_mapping_ptr = std::make_shared<DevNozzleMappingCtrl>(this);
|
||||
|
||||
// Orca: adopt DeviceCore split — axis/calib/chamber/status/upgrade modules
|
||||
m_axis = DevAxis::Create(this);
|
||||
m_chamber = DevChamber::Create(this);
|
||||
m_upgrade = DevUpgrade::Create(this);
|
||||
m_status = new DevStatus(this);
|
||||
m_calib = new DevCalib(this);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -681,13 +629,6 @@ MachineObject::~MachineObject()
|
||||
|
||||
delete m_print_options;
|
||||
m_print_options = nullptr;
|
||||
|
||||
// Orca: adopt DeviceCore split
|
||||
delete m_calib;
|
||||
m_calib = nullptr;
|
||||
|
||||
delete m_status;
|
||||
m_status = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -757,33 +698,6 @@ std::string MachineObject::get_filament_display_type(const std::string& ams_id,
|
||||
return this->get_tray(ams_id, tray_id).get_display_filament_type();
|
||||
}
|
||||
|
||||
bool MachineObject::any_loaded_filament_is_stringing_prone() const
|
||||
{
|
||||
if (print_job_filament_mapping.empty()) return false;
|
||||
|
||||
std::vector<float> nozzle_diameters;
|
||||
if (m_extder_system) {
|
||||
for (const auto& ext : m_extder_system->GetExtruders()) {
|
||||
const float d = ext.GetNozzleDiameter();
|
||||
if (d > 0.f) nozzle_diameters.push_back(d);
|
||||
}
|
||||
}
|
||||
if (nozzle_diameters.empty()) return false;
|
||||
|
||||
for (uint16_t v : print_job_filament_mapping) {
|
||||
if (v == 0xFFFF) continue;
|
||||
const int ams_id = (v >> 8) & 0xFF;
|
||||
const int slot_id = v & 0xFF;
|
||||
const std::string fid = this->get_filament_id(std::to_string(ams_id), std::to_string(slot_id));
|
||||
if (fid.empty()) continue;
|
||||
for (float d : nozzle_diameters) {
|
||||
if (Slic3r::is_stringing_prone_filament(fid, d))
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void MachineObject::_parse_ams_status(int ams_status)
|
||||
{
|
||||
ams_status_sub = ams_status & 0xFF;
|
||||
@@ -802,8 +716,6 @@ void MachineObject::_parse_ams_status(int ams_status)
|
||||
ams_status_main = AmsStatusMain::AMS_STATUS_MAIN_SELF_CHECK;
|
||||
} else if (ams_status_main_int == (int) AmsStatusMain::AMS_STATUS_MAIN_DEBUG) {
|
||||
ams_status_main = AmsStatusMain::AMS_STATUS_MAIN_DEBUG;
|
||||
} else if (ams_status_main_int == (int) AmsStatusMain::AMS_STATUS_MAIN_COLD_PULL) {
|
||||
ams_status_main = AmsStatusMain::AMS_STATUS_MAIN_COLD_PULL;
|
||||
} else {
|
||||
ams_status_main = AmsStatusMain::AMS_STATUS_MAIN_UNKNOWN;
|
||||
}
|
||||
@@ -955,9 +867,6 @@ void MachineObject::clear_version_info()
|
||||
laser_version_info = DevFirmwareVersionInfo();
|
||||
cutting_module_version_info = DevFirmwareVersionInfo();
|
||||
extinguish_version_info = DevFirmwareVersionInfo();
|
||||
rotary_version_info = DevFirmwareVersionInfo();
|
||||
exhaustfan_version_info = DevFirmwareVersionInfo();
|
||||
amshub_version_info = DevFirmwareVersionInfo();
|
||||
filatrack_version_info = DevFirmwareVersionInfo();
|
||||
module_vers.clear();
|
||||
// Drop cached rack-hotend (WTM) firmware alongside the module list.
|
||||
@@ -975,17 +884,11 @@ void MachineObject::store_version_info(const DevFirmwareVersionInfo& info)
|
||||
cutting_module_version_info = info;
|
||||
} else if (info.isExtinguishSystem()) {
|
||||
extinguish_version_info = info;
|
||||
} else if (info.isRotary()) {
|
||||
rotary_version_info = info;
|
||||
} else if (info.isWTM()) {
|
||||
// Route rack-hotend / extruder-nozzle firmware into the nozzle system so
|
||||
// the rack upgrade UI can read per-nozzle versions. isWTM() is false for every non-rack
|
||||
// printer's modules, so this branch never fires outside H2C.
|
||||
m_nozzle_system->AddFirmwareInfoWTM(info);
|
||||
} else if (info.isExhaustFan()) {
|
||||
exhaustfan_version_info = info;
|
||||
} else if (info.isHmshub()) {
|
||||
amshub_version_info = info;
|
||||
} else if (info.isFilaTrackSwitch()) {
|
||||
filatrack_version_info = info;
|
||||
}
|
||||
@@ -1304,7 +1207,7 @@ bool MachineObject::canEnableTimelapse(wxString &error_message) const
|
||||
return true;
|
||||
}
|
||||
|
||||
if (m_storage->get_sdcard_state() != DevStorage::SdcardState::HAS_SDCARD_NORMAL && !m_has_timelapse_kit) {
|
||||
if (m_storage->get_sdcard_state() != DevStorage::SdcardState::HAS_SDCARD_NORMAL) {
|
||||
if (m_storage->get_sdcard_state() == DevStorage::SdcardState::NO_SDCARD) {
|
||||
error_message = _L("Timelapse is not supported while the storage does not exist.");
|
||||
} else if (m_storage->get_sdcard_state() == DevStorage::SdcardState::HAS_SDCARD_ABNORMAL) {
|
||||
@@ -1954,17 +1857,10 @@ int MachineObject::command_axis_control(std::string axis, double unit, double in
|
||||
{
|
||||
if (m_support_mqtt_axis_control)
|
||||
{
|
||||
int dir = input_val > 0 ? 1 : -1;
|
||||
// i3-arch printers move the bed for Y/Z, so the on-screen direction is
|
||||
// reversed — same negation the g-code fallback below applies.
|
||||
if (!is_core_xy() && (axis.compare("Y") == 0 || axis.compare("Z") == 0)) {
|
||||
dir = -dir;
|
||||
}
|
||||
|
||||
json j;
|
||||
j["print"]["command"] = "xyz_ctrl";
|
||||
j["print"]["axis"] = axis;
|
||||
j["print"]["dir"] = dir;
|
||||
j["print"]["dir"] = input_val > 0 ? 1 : -1;
|
||||
j["print"]["mode"] = (std::abs(input_val) >= 10) ? 1 : 0;
|
||||
j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++);
|
||||
return this->publish_json(j);
|
||||
@@ -2303,14 +2199,6 @@ int MachineObject::command_ack_proceed(json& proceed) {
|
||||
} else {
|
||||
proceed["err_ignored"] = std::vector<int>{proceed["err_index"]};
|
||||
}
|
||||
|
||||
for (auto& item : proceed["err_ignored"]) {
|
||||
json error_item;
|
||||
error_item["idx"] = item.get<int>();
|
||||
error_item["mode"] = 0;
|
||||
proceed["rm_idx"].push_back(error_item);
|
||||
}
|
||||
|
||||
proceed["sequence_id"] = std::to_string(MachineObject::m_sequence_id++);
|
||||
|
||||
json j;
|
||||
@@ -2318,78 +2206,6 @@ int MachineObject::command_ack_proceed(json& proceed) {
|
||||
return this->publish_json(j);
|
||||
}
|
||||
|
||||
bool MachineObject::is_timelapse_storage_low(const std::string& storage) const
|
||||
{
|
||||
return m_storage && m_storage->is_timelapse_storage_low(storage);
|
||||
}
|
||||
|
||||
int MachineObject::command_ipcam_check_timelapse_storage(const std::string& storage, int total_layer)
|
||||
{
|
||||
json j;
|
||||
j["camera"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++);
|
||||
j["camera"]["command"] = "ipcam_get_media_info";
|
||||
j["camera"]["sub_command"] = "is_timelapse_storage_enough";
|
||||
j["camera"]["storage"] = storage;
|
||||
j["camera"]["total_layer"] = total_layer;
|
||||
return this->publish_json(j);
|
||||
}
|
||||
|
||||
int MachineObject::command_ipcam_delete_oldest_timelapse(const std::string& storage, int total_layer)
|
||||
{
|
||||
json j;
|
||||
j["camera"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++);
|
||||
j["camera"]["command"] = "ipcam_delete_oldest_timelapse";
|
||||
j["camera"]["storage"] = storage;
|
||||
j["camera"]["total_layer"] = total_layer;
|
||||
return this->publish_json(j);
|
||||
}
|
||||
|
||||
int MachineObject::command_purification_disable()
|
||||
{
|
||||
json j;
|
||||
j["print"]["command"] = "close_air_filt";
|
||||
j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++);
|
||||
|
||||
return this->publish_json(j, 1);
|
||||
}
|
||||
|
||||
int MachineObject::command_dont_remind_next_time(json& mqtt_guard_json)
|
||||
{
|
||||
if (!mqtt_guard_json.contains("command") ||
|
||||
!mqtt_guard_json.contains("err_index") ||
|
||||
mqtt_guard_json["err_index"].empty()) return -1;
|
||||
|
||||
json j;
|
||||
j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++);
|
||||
|
||||
try {
|
||||
j["print"]["command"] = mqtt_guard_json["command"].get<std::string>();
|
||||
int err_index = mqtt_guard_json["err_index"].get<int>();
|
||||
|
||||
if (mqtt_guard_json.contains("err_ignored") &&
|
||||
mqtt_guard_json["err_ignored"].is_array()) {
|
||||
j["print"]["err_ignored"] = mqtt_guard_json["err_ignored"];
|
||||
j["print"]["err_ignored"].push_back(err_index);
|
||||
} else {
|
||||
j["print"]["err_ignored"] = std::vector<int>{err_index};
|
||||
}
|
||||
|
||||
for (auto& item : j["print"]["err_ignored"]) {
|
||||
if (!item.is_number_integer()) continue;
|
||||
|
||||
json item_json;
|
||||
item_json["idx"] = item.get<int>();
|
||||
item_json["mode"] = 1; // 1-next time ignore, 2-always ignore
|
||||
j["print"]["rm_idx"].push_back(item_json);
|
||||
}
|
||||
} catch (const json::exception& e) {
|
||||
BOOST_LOG_TRIVIAL(error) << "JSON parsing error in command_dont_remind_next_time: " << e.what();
|
||||
return -1;
|
||||
}
|
||||
|
||||
return this->publish_json(j, 1);
|
||||
}
|
||||
|
||||
int MachineObject::command_xcam_control_ai_monitoring(bool on_off, std::string lvl)
|
||||
{
|
||||
bool print_halt = (lvl == "never_halt") ? false:true;
|
||||
@@ -3099,7 +2915,6 @@ int MachineObject::parse_json(std::string tunnel, std::string payload, bool key_
|
||||
|
||||
//supported function
|
||||
m_config->ParseConfig(jj);
|
||||
m_status->ParseStatus(jj); // Orca: adopt DeviceCore split — populate DevStatus module
|
||||
|
||||
if (jj.contains("support_build_plate_marker_detect")) {
|
||||
if (jj["support_build_plate_marker_detect"].is_boolean()) {
|
||||
@@ -3327,17 +3142,6 @@ int MachineObject::parse_json(std::string tunnel, std::string payload, bool key_
|
||||
if (jj["print_error"].is_number())
|
||||
print_error = jj["print_error"].get<int>();
|
||||
}
|
||||
// Orca: keep the failure-snapshot id only while an error is active, so a stale
|
||||
// id can't leak into a later unrelated error dialog once the failure clears.
|
||||
if (print_error <= 0) {
|
||||
m_print_error_img_id.clear();
|
||||
}
|
||||
else if (jj.contains("err2") && jj["err2"].is_object()) {
|
||||
json err2 = jj["err2"];
|
||||
if (err2.contains("img_id") && err2["img_id"].is_string()) {
|
||||
m_print_error_img_id = err2["img_id"].get<std::string>();
|
||||
}
|
||||
}
|
||||
|
||||
DevStorage::ParseV1_0(jj, m_storage);
|
||||
|
||||
@@ -3359,9 +3163,6 @@ int MachineObject::parse_json(std::string tunnel, std::string payload, bool key_
|
||||
int flag3 = jj["flag3"].get<int>();
|
||||
is_support_filament_setting_inprinting = get_flag_bits(flag3, 3);
|
||||
is_enable_ams_np = get_flag_bits(flag3, 9);
|
||||
is_support_fila_change_abort = get_flag_bits(flag3, 13); // filament-change Stop button
|
||||
is_support_ext_change_assist_old = get_flag_bits(flag3, 16); // A/P-series multi-color external change assist
|
||||
is_support_filament_32_colors = get_flag_bits(flag3, 17);
|
||||
}
|
||||
}
|
||||
if (!key_field_only) {
|
||||
@@ -3527,16 +3328,6 @@ int MachineObject::parse_json(std::string tunnel, std::string payload, bool key_
|
||||
if (!key_field_only) {
|
||||
/* temperature */
|
||||
|
||||
// Orca: adopt DeviceCore split — populate DevAxis/DevChamber modules
|
||||
// alongside the inline handling (side-effect-free; inline stays authoritative).
|
||||
// Contained locally so a malformed field cannot abort the whole status parse.
|
||||
try {
|
||||
m_axis->ParseAxis(jj);
|
||||
m_chamber->ParseChamber(jj);
|
||||
} catch (...) {
|
||||
BOOST_LOG_TRIVIAL(warning) << "parse_json: DevAxis/DevChamber parse failed";
|
||||
}
|
||||
|
||||
DevBed::ParseV1_0(jj,m_bed);
|
||||
|
||||
if (jj.contains("frame_temper")) {
|
||||
@@ -4545,17 +4336,6 @@ int MachineObject::parse_json(std::string tunnel, std::string payload, bool key_
|
||||
this->camera_resolution = j["camera"]["resolution"].get<std::string>();
|
||||
BOOST_LOG_TRIVIAL(info) << "ack of resolution = " << camera_resolution;
|
||||
}
|
||||
} else if (j["camera"]["command"].get<std::string>() == "ipcam_get_media_info") {
|
||||
if (j["camera"].contains("sub_command") &&
|
||||
j["camera"]["sub_command"].get<std::string>() == "is_timelapse_storage_enough") {
|
||||
timelapse_storage_check_result = j["camera"].value("result", -1);
|
||||
timelapse_storage_is_enough = j["camera"].value("is_enough", true);
|
||||
timelapse_storage_file_count = j["camera"].value("file_count", 0);
|
||||
timelapse_storage_check_done = true;
|
||||
BOOST_LOG_TRIVIAL(info) << "timelapse storage check: result=" << timelapse_storage_check_result
|
||||
<< " is_enough=" << timelapse_storage_is_enough
|
||||
<< " file_count=" << timelapse_storage_file_count;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5160,15 +4940,6 @@ bool MachineObject::check_enable_np(const json& print) const
|
||||
return false;
|
||||
}
|
||||
|
||||
// Max filament color count for the send gate; 0 = no explicit upper bound.
|
||||
int MachineObject::get_max_filament_color_count() const
|
||||
{
|
||||
if (is_support_filament_32_colors) return 32;
|
||||
if (is_enable_ams_np && !is_series_x()) return 20;
|
||||
if (!is_series_x() && !is_series_o()) return 16;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void MachineObject::parse_new_info(json print)
|
||||
{
|
||||
is_enable_np = check_enable_np(print);
|
||||
@@ -5322,23 +5093,8 @@ void MachineObject::parse_new_info(json print)
|
||||
// fun2 may have infinite length, use get_flag_bits_no_border
|
||||
if (!fun2.empty()) {
|
||||
is_support_print_with_emmc = get_flag_bits_no_border(fun2, 0) == 1;
|
||||
is_support_pa_mode = (get_flag_bits_no_border(fun2, 3) == 1);
|
||||
is_support_remote_dry = (get_flag_bits_no_border(fun2, 5) == 1);
|
||||
is_support_check_track_switch_match_slice_printer = get_flag_bits_no_border(fun2, 19) == 1;
|
||||
|
||||
if (DevPrinterConfigUtil::support_print_check_firmware_for_tpu_left(printer_type)) {
|
||||
m_firmware_support_print_tpu_left = get_flag_bits_no_border(fun2, 7) == 1;
|
||||
}
|
||||
}
|
||||
|
||||
/* Per-filament-index AMS slot mapping reported by the printer (task-level state) */
|
||||
if (print.contains("mapping") && print["mapping"].is_array()) {
|
||||
std::vector<uint16_t> new_mapping;
|
||||
new_mapping.reserve(print["mapping"].size());
|
||||
for (const auto& v : print["mapping"]) {
|
||||
new_mapping.push_back(static_cast<uint16_t>(v.get<unsigned>()));
|
||||
}
|
||||
print_job_filament_mapping = std::move(new_mapping);
|
||||
}
|
||||
|
||||
/*aux*/
|
||||
@@ -5348,7 +5104,6 @@ void MachineObject::parse_new_info(json print)
|
||||
|
||||
if (!aux.empty()) {
|
||||
m_storage->set_sdcard_state(get_flag_bits(aux, 12, 2));
|
||||
m_has_timelapse_kit = (get_flag_bits(aux, 26, 1) == 1);
|
||||
}
|
||||
|
||||
/*stat*/
|
||||
@@ -5809,9 +5564,7 @@ wxString MachineObject::get_nozzle_replace_url() const
|
||||
return link_map["en"].get<wxString>();
|
||||
}/*retry with en*/
|
||||
|
||||
// Orca: no neutral wiki equivalent for this fallback — return empty so the caller hides the link
|
||||
// (PrinterPartsDialog::OnWikiClicked reports "No wiki link available" instead of opening a browser)
|
||||
return wxEmptyString;
|
||||
return "https://wiki.bambulab.com/en/h2/maintenance/replace-hotend";
|
||||
}
|
||||
|
||||
std::string MachineObject::get_error_code_str(int error_code)
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
|
||||
#include <map>
|
||||
#include <mutex>
|
||||
#include <atomic>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <memory>
|
||||
@@ -22,7 +21,6 @@
|
||||
#include "DeviceCore/DevDefs.h"
|
||||
#include "DeviceCore/DevConfigUtil.h"
|
||||
#include "DeviceCore/DevFirmware.h"
|
||||
#include "DeviceCore/DevCalib.h" // Orca: adopt DeviceCore split (defines DevCalib, CalibStatus, ManualPaCaliMethod)
|
||||
#include "DeviceErrorDialog.hpp"
|
||||
|
||||
#include <wx/object.h>
|
||||
@@ -64,7 +62,11 @@ class DeviceErrorDialog; // Previous definitions
|
||||
}
|
||||
|
||||
class NetworkAgent;
|
||||
// Orca: ManualPaCaliMethod now provided by DeviceCore/DevCalib.h (enum class)
|
||||
enum ManualPaCaliMethod {
|
||||
PA_LINE = 0,
|
||||
PA_PATTERN,
|
||||
};
|
||||
|
||||
|
||||
#define UpgradeNoError 0
|
||||
#define UpgradeDownloadFailed -1
|
||||
@@ -75,9 +77,7 @@ class NetworkAgent;
|
||||
// Previous definitions
|
||||
class DevAms;
|
||||
class DevAmsTray;
|
||||
class DevAxis; // Orca: adopt DeviceCore split
|
||||
class DevBed;
|
||||
class DevChamber; // Orca: adopt DeviceCore split
|
||||
class DevConfig;
|
||||
class DevCtrl;
|
||||
class DevExtensionTool;
|
||||
@@ -91,15 +91,9 @@ class DevLamp;
|
||||
class DevNozzleSystem;
|
||||
class DevNozzleMappingCtrl;
|
||||
class DeviceManager;
|
||||
class DevStatus; // Orca: adopt DeviceCore split
|
||||
class DevStorage;
|
||||
class DevUpgrade; // Orca: adopt DeviceCore split
|
||||
struct DevPrintTaskRatingInfo;
|
||||
|
||||
// Returns true when filament_id (e.g. "GFA11", "GFU00") is on the stringing-prone list for the
|
||||
// given nozzle diameter (mm), bucketed per nozzle size to mirror the printer firmware.
|
||||
bool is_stringing_prone_filament(const std::string& filament_id, float nozzle_diameter);
|
||||
|
||||
|
||||
class MachineObject
|
||||
{
|
||||
@@ -129,15 +123,6 @@ private:
|
||||
DevBed * m_bed;
|
||||
DevStorage* m_storage;
|
||||
|
||||
/* Orca: adopt DeviceCore split — axis/calib/chamber/status/upgrade modules alongside
|
||||
MachineObject's inline handling of these concerns, which stays authoritative here (Orca keeps
|
||||
the inline model permanently; the split modules coexist with it via accessors). */
|
||||
std::shared_ptr<DevAxis> m_axis;
|
||||
std::shared_ptr<DevChamber> m_chamber;
|
||||
DevCalib* m_calib{ nullptr };
|
||||
DevStatus* m_status{ nullptr };
|
||||
std::shared_ptr<DevUpgrade> m_upgrade;
|
||||
|
||||
/*Ctrl*/
|
||||
DevCtrl* m_ctrl;
|
||||
|
||||
@@ -160,18 +145,6 @@ public:
|
||||
~MachineObject();
|
||||
|
||||
void set_agent(NetworkAgent* agent) { m_agent = agent; }
|
||||
NetworkAgent* get_agent() const { return m_agent; } // Orca: needed by DeviceCore modules (DevAxisCtrl)
|
||||
|
||||
// Orca: these DeviceCore module accessors are unwired on the read side — axis/chamber/status
|
||||
// are fed every MQTT push but no GUI consumer reads them yet, and for calib/upgrade the inline
|
||||
// parse in DeviceManager.cpp remains authoritative. Do not wire DevUpgrade naively: its
|
||||
// ParseUpgradeDisplayState would duplicate the inline block's dis_state==3 ->
|
||||
// command_get_version CallAfter side effect.
|
||||
std::shared_ptr<DevAxis> GetAxis() const { return m_axis; }
|
||||
std::shared_ptr<DevChamber> GetChamber() const { return m_chamber; }
|
||||
DevCalib* GetCalib() const { return m_calib; }
|
||||
DevStatus* GetStatus() const { return m_status; }
|
||||
std::weak_ptr<DevUpgrade> GetUpgrade() const { return m_upgrade; }
|
||||
|
||||
public:
|
||||
enum ActiveState {
|
||||
@@ -406,9 +379,6 @@ public:
|
||||
DevFirmwareVersionInfo laser_version_info;
|
||||
DevFirmwareVersionInfo cutting_module_version_info;
|
||||
DevFirmwareVersionInfo extinguish_version_info;
|
||||
DevFirmwareVersionInfo rotary_version_info;
|
||||
DevFirmwareVersionInfo exhaustfan_version_info;
|
||||
DevFirmwareVersionInfo amshub_version_info;
|
||||
DevFirmwareVersionInfo filatrack_version_info;
|
||||
std::map<std::string, DevFirmwareVersionInfo> module_vers;
|
||||
std::map<std::string, DevFirmwareVersionInfo> new_ver_list;
|
||||
@@ -447,7 +417,6 @@ public:
|
||||
bool is_system_printing();
|
||||
|
||||
int print_error;
|
||||
std::string m_print_error_img_id;
|
||||
static std::string get_error_code_str(int error_code);
|
||||
std::string get_print_error_str() const { return MachineObject::get_error_code_str(this->print_error); }
|
||||
|
||||
@@ -588,7 +557,6 @@ public:
|
||||
|
||||
bool file_model_download{false};
|
||||
bool virtual_camera{false};
|
||||
bool m_has_timelapse_kit{false};
|
||||
|
||||
bool xcam_ai_monitoring{ false };
|
||||
bool xcam_disable_ai_detection_display{false};
|
||||
@@ -665,18 +633,10 @@ public:
|
||||
bool is_support_airprinting_detection{false};
|
||||
bool is_support_idelheadingprotect_detection{false};
|
||||
|
||||
// timelapse storage check result (temp state from MQTT response)
|
||||
std::atomic<bool> timelapse_storage_check_done { false };
|
||||
int timelapse_storage_check_result { -1 };
|
||||
bool timelapse_storage_is_enough { true };
|
||||
int timelapse_storage_file_count { 0 };
|
||||
|
||||
// fun2
|
||||
bool is_support_print_with_emmc{false};
|
||||
bool is_support_remote_dry = false;
|
||||
bool is_support_check_track_switch_match_slice_printer{false};
|
||||
bool is_support_pa_mode{false};
|
||||
std::optional<bool> m_firmware_support_print_tpu_left;
|
||||
|
||||
bool installed_upgrade_kit{false};
|
||||
int bed_temperature_limit = -1;
|
||||
@@ -706,11 +666,6 @@ public:
|
||||
boost::thread* get_slice_info_thread { nullptr };
|
||||
boost::thread* get_model_task_thread { nullptr };
|
||||
|
||||
// Per-filament-index AMS slot mapping reported by the printer in print.mapping. Up to
|
||||
// 32 entries, each value packs (ams_id << 8) | slot_id; 0xFFFF means unused.
|
||||
std::vector<uint16_t> print_job_filament_mapping;
|
||||
bool any_loaded_filament_is_stringing_prone() const;
|
||||
|
||||
/* job attr */
|
||||
int jobState_ = 0;
|
||||
|
||||
@@ -748,7 +703,6 @@ public:
|
||||
|
||||
/* quick check*/
|
||||
bool canEnableTimelapse(wxString& error_message) const;
|
||||
bool is_timelapse_storage_low(const std::string& storage) const;
|
||||
|
||||
/* command commands */
|
||||
int command_get_version(bool with_retry = true);
|
||||
@@ -760,8 +714,6 @@ public:
|
||||
int command_set_printer_nozzle2(int id, std::string nozzle_type, float diameter);
|
||||
int command_get_access_code();
|
||||
int command_ack_proceed(json& proceed);
|
||||
int command_purification_disable();
|
||||
int command_dont_remind_next_time(json& mqtt_guard_json);
|
||||
|
||||
/* command upgrade */
|
||||
int command_upgrade_confirm();
|
||||
@@ -853,8 +805,6 @@ public:
|
||||
int command_ipcam_record(bool on_off);
|
||||
int command_ipcam_timelapse(bool on_off);
|
||||
int command_ipcam_resolution_set(std::string resolution);
|
||||
int command_ipcam_check_timelapse_storage(const std::string& storage, int total_layer);
|
||||
int command_ipcam_delete_oldest_timelapse(const std::string& storage, int total_layer);
|
||||
int command_xcam_control(std::string module_name, bool on_off, std::string lvl = "");
|
||||
|
||||
//refine printer
|
||||
@@ -928,12 +878,6 @@ public:
|
||||
/*for more extruder*/
|
||||
bool is_enable_np{ false };
|
||||
bool is_enable_ams_np{ false };
|
||||
bool is_support_filament_32_colors{ false };
|
||||
bool is_support_fila_change_abort{ false }; // filament-change Stop button
|
||||
bool is_support_ext_change_assist_old{ false }; // A/P-series multi-color external change assist
|
||||
|
||||
// Max filament color count for the send gate; returns 0 when there is no explicit upper bound.
|
||||
int get_max_filament_color_count() const;
|
||||
|
||||
/**
|
||||
* Virtual Tray (vt_slot) - External/manual filament loading slots.
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
list(APPEND SLIC3R_GUI_SOURCES
|
||||
GUI/DeviceTab/uiAmsHumidityPopup.h
|
||||
GUI/DeviceTab/uiAmsHumidityPopup.cpp
|
||||
GUI/DeviceTab/uiAMSBestPositionPopup.hpp
|
||||
GUI/DeviceTab/uiAMSBestPositionPopup.cpp
|
||||
GUI/DeviceTab/uiDeviceUpdateVersion.h
|
||||
GUI/DeviceTab/uiDeviceUpdateVersion.cpp
|
||||
GUI/DeviceTab/wgtDeviceNozzleRackNozzleItem.h
|
||||
GUI/DeviceTab/wgtDeviceNozzleRackNozzleItem.cpp
|
||||
GUI/DeviceTab/wgtDeviceNozzleRack.h
|
||||
GUI/DeviceTab/wgtDeviceNozzleRack.cpp
|
||||
GUI/DeviceTab/wgtDeviceNozzleRackUpdate.h
|
||||
@@ -14,7 +14,5 @@ list(APPEND SLIC3R_GUI_SOURCES
|
||||
GUI/DeviceTab/wgtDeviceNozzleSelect.cpp
|
||||
GUI/DeviceTab/wgtMsgBox.h
|
||||
GUI/DeviceTab/wgtMsgBox.cpp
|
||||
GUI/DeviceTab/wgtMsgPanel.h
|
||||
GUI/DeviceTab/wgtMsgPanel.cpp
|
||||
)
|
||||
set(SLIC3R_GUI_SOURCES ${SLIC3R_GUI_SOURCES} PARENT_SCOPE)
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,226 +0,0 @@
|
||||
//**********************************************************/
|
||||
/* File: uiAMSBestPositionPopup.hpp
|
||||
* Description: The popup with suggest best ams position
|
||||
*
|
||||
//**********************************************************/
|
||||
|
||||
#pragma once
|
||||
#include "slic3r/GUI/Widgets/AMSItem.hpp"
|
||||
#include "slic3r/GUI/Widgets/Label.hpp"
|
||||
#include "slic3r/GUI/Widgets/PopupWindow.hpp"
|
||||
#include "slic3r/GUI/wxExtensions.hpp"
|
||||
#include "slic3r/GUI/Widgets/Button.hpp"
|
||||
#include "slic3r/GUI/DeviceCore/DevFilaSystem.h"
|
||||
#include "slic3r/GUI/DeviceCore/DevFilaSwitch.h"
|
||||
#include <algorithm>
|
||||
|
||||
#include <tuple>
|
||||
|
||||
namespace Slic3r { namespace GUI {
|
||||
|
||||
|
||||
class UiStyledAMSPanel : public wxPanel
|
||||
{
|
||||
public:
|
||||
UiStyledAMSPanel(wxWindow* parent,
|
||||
wxWindowID id = wxID_ANY,
|
||||
const wxPoint& pos = wxDefaultPosition,
|
||||
const wxSize& size = wxDefaultSize,
|
||||
const wxColour& borderColor = wxColour(200, 200, 200),
|
||||
const wxColour& bgColor = wxColour(255, 255, 255),
|
||||
bool borderDashed = true,
|
||||
wxString name = "",
|
||||
bool isTop = false);
|
||||
|
||||
protected:
|
||||
void OnPaint(wxPaintEvent& event);
|
||||
|
||||
private:
|
||||
|
||||
bool m_borderDashed;
|
||||
int m_borderWidth;
|
||||
int m_radius;
|
||||
wxColour m_borderColor;
|
||||
wxColour m_bgColor;
|
||||
wxString m_name;
|
||||
bool m_isTop;
|
||||
};
|
||||
|
||||
class UiStyledSwitchPanel : public wxPanel
|
||||
{
|
||||
public:
|
||||
UiStyledSwitchPanel(wxWindow* parent,
|
||||
wxWindowID id,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
const wxColour& borderColor,
|
||||
const wxColour& bgColor,
|
||||
bool borderDashed,
|
||||
int borderWidth,
|
||||
int radius,
|
||||
bool isTop);
|
||||
|
||||
|
||||
void AddToLeft(wxWindow* window, int proportion = 0, int flag = wxEXPAND, int border = 0);
|
||||
void AddToRight(wxWindow* window, int proportion = 0, int flag = wxEXPAND, int border = 0);
|
||||
void Clear(bool deleteWindows);
|
||||
|
||||
wxSizer* GetLeftSizer() { return m_leftSizer; }
|
||||
wxSizer* GetRightSizer() { return m_rightSizer; }
|
||||
void LayoutAndFit()
|
||||
{
|
||||
m_leftSizer->Layout();
|
||||
// m_leftSizer->Fit();
|
||||
m_rightSizer->Layout();
|
||||
// m_rightSizer->Fit();
|
||||
m_splitSizer->Layout();
|
||||
// m_splitSizer->Fit();
|
||||
m_contentSizer->Layout();
|
||||
// m_contentSizer->Fit();
|
||||
m_mainSizer->Layout();
|
||||
// m_mainSizer->Fit();
|
||||
Fit();
|
||||
}
|
||||
protected:
|
||||
void OnPaint(wxPaintEvent& event);
|
||||
private:
|
||||
|
||||
bool m_borderDashed;
|
||||
int m_borderWidth;
|
||||
int m_radius;
|
||||
wxColour m_borderColor;
|
||||
wxColour m_bgColor;
|
||||
bool m_isTop;
|
||||
|
||||
wxBoxSizer* m_mainSizer{nullptr};
|
||||
wxBoxSizer* m_contentSizer{nullptr};
|
||||
wxBoxSizer* m_splitSizer{nullptr};
|
||||
wxSizer* m_leftSizer{nullptr};
|
||||
wxSizer* m_rightSizer{nullptr};
|
||||
|
||||
static constexpr int labelHeight = 30;
|
||||
|
||||
};
|
||||
|
||||
|
||||
enum DataStatusType {
|
||||
ADJUST,
|
||||
OK,
|
||||
UNMATCHED
|
||||
};
|
||||
|
||||
class UiAMSSlot : public wxPanel
|
||||
{
|
||||
public:
|
||||
UiAMSSlot(wxWindow* parent,
|
||||
const std::vector<wxColour>& bgColours,
|
||||
const wxString& text,
|
||||
DataStatusType status,
|
||||
wxWindowID id = wxID_ANY,
|
||||
const wxPoint& pos = wxDefaultPosition,
|
||||
const wxSize& size = wxDefaultSize,
|
||||
double colourFactor = 1.0,
|
||||
double scaleFactor = 1.0);
|
||||
|
||||
|
||||
private:
|
||||
void OnPaint(wxPaintEvent&);
|
||||
void DrawRectangle(wxPaintDC& dc, const wxSize& cli);
|
||||
void DrawLine(wxPaintDC& dc, const wxSize& cli);
|
||||
wxColour LightenColour(const wxColour& original);
|
||||
bool IsDark(const wxColour& c)
|
||||
{
|
||||
int brightness = (c.Red() * 299 + c.Green() * 587 + c.Blue() * 114) / 1000;
|
||||
return brightness < 128; // 0-255 range, 128 mid
|
||||
}
|
||||
private:
|
||||
// Copied, not referenced: the slot repaints long after construction, so it must not
|
||||
// depend on the caller's vector staying alive.
|
||||
std::vector<wxColour> m_bgColours;
|
||||
wxString m_text;
|
||||
DataStatusType m_status;
|
||||
wxSize m_size;
|
||||
ScalableBitmap *m_ams_slot_readonly{nullptr};
|
||||
int m_rectangleW = 44;
|
||||
int m_rectangleH = 62;
|
||||
int rectangleW = 44;
|
||||
int rectangleH = 62;
|
||||
double m_colourFactor = 1.0f;
|
||||
double m_scaleFactor = 1.0f;
|
||||
// wxDECLARE_EVENT_TABLE();
|
||||
};
|
||||
|
||||
struct DataAmsSlotInfo
|
||||
{
|
||||
wxString amsName;
|
||||
wxString name;
|
||||
std::vector<wxColour> colours;
|
||||
double colourFactor;
|
||||
double scaleFactor;
|
||||
DataStatusType status;
|
||||
};
|
||||
|
||||
class UiAMS : public UiStyledAMSPanel
|
||||
{
|
||||
public:
|
||||
UiAMS(wxWindow* parent,
|
||||
const std::vector<DataAmsSlotInfo>& amsInfo,
|
||||
wxWindowID id,
|
||||
const wxPoint& pos,
|
||||
const wxSize& minSize);
|
||||
private:
|
||||
void init();
|
||||
std::vector<DataAmsSlotInfo> m_amsInfo;
|
||||
wxString m_amsTitle;
|
||||
wxSize m_minSize;
|
||||
};
|
||||
|
||||
|
||||
struct DataStatusParam {
|
||||
// int count = 0;
|
||||
int width = 0;
|
||||
int height = 0;
|
||||
std::vector<DataAmsSlotInfo> slots;
|
||||
};
|
||||
|
||||
class ReselectMachineDialog : public wxDialog
|
||||
{
|
||||
public:
|
||||
ReselectMachineDialog(wxWindow* parent);
|
||||
~ReselectMachineDialog();
|
||||
void Update(MachineObject* obj,
|
||||
const std::map<int, int>& best_pos_map,
|
||||
const std::vector<FilamentInfo>& ams_mapping,
|
||||
wxString save_time);
|
||||
|
||||
private:
|
||||
int CaculateSwitcherDistribution(MachineObject* obj, const std::map<int, int>& best_pos_map, const std::vector<FilamentInfo>& ams_mapping);
|
||||
wxString getTrayID(MachineObject* obj, const std::string& amsID, const std::string& slotID);
|
||||
void OnRefreshButton(wxCommandEvent& event);
|
||||
|
||||
private:
|
||||
int saveTimes{0};
|
||||
wxBoxSizer* mainSizer{nullptr};
|
||||
wxPanel* textPanel{nullptr};
|
||||
wxBoxSizer* textSizer{nullptr};
|
||||
Label* suggestText{nullptr};
|
||||
// wxHyperlinkCtrl* linkwiki{nullptr};
|
||||
Label* linkwiki{nullptr};
|
||||
Label* summaryText{nullptr};
|
||||
UiStyledSwitchPanel* filamentSwitch{nullptr};
|
||||
wxStaticText* filamentTips{nullptr};
|
||||
std::vector<std::vector<DataAmsSlotInfo>> inAAMS{};
|
||||
std::vector<std::vector<DataAmsSlotInfo>> inBAMS{};
|
||||
wxPanel* statusBar{nullptr};
|
||||
wxBoxSizer* btnSizer{nullptr};
|
||||
Button* m_buttonClose{nullptr };
|
||||
Button* m_buttonRefresh{ nullptr };
|
||||
std::vector<wxColour>colourAdjust{wxColour("#675AFF")};
|
||||
std::vector<wxColour>colourOK{wxColour("#FF8181")};
|
||||
std::vector<wxColour>colourUnused{wxColour("#FF818140")};
|
||||
// wxStaticBitmap* m_bitmapSelectMachine{nullptr};
|
||||
};
|
||||
|
||||
wxDECLARE_EVENT(wxEVT_REFRESH_DATA, wxCommandEvent);
|
||||
|
||||
}} // namespace Slic3r::GUI
|
||||
@@ -23,16 +23,16 @@ uiAmsPercentHumidityDryPopup::uiAmsPercentHumidityDryPopup(wxWindow *parent)
|
||||
: wxDialog(parent, wxID_ANY, "")
|
||||
{
|
||||
Create();
|
||||
wxGetApp().UpdateDlgDarkUI(this); // Orca: apply dark-mode theming to the popup
|
||||
wxGetApp().UpdateDlgDarkUI(this);
|
||||
}
|
||||
|
||||
void uiAmsPercentHumidityDryPopup::Create()
|
||||
{
|
||||
// create images
|
||||
idle_img = ScalableBitmap(this, "ams_drying", 16);
|
||||
drying_img = ScalableBitmap(this, "ams_is_drying", 16); // Orca: use the drying-state icon
|
||||
drying_img = ScalableBitmap(this, "ams_is_drying", 16);
|
||||
|
||||
// background
|
||||
// background
|
||||
SetBackgroundColour(*wxWHITE);
|
||||
|
||||
// create title sizer
|
||||
@@ -147,8 +147,7 @@ void uiAmsPercentHumidityDryPopup::UpdateContents()
|
||||
// table grid
|
||||
const wxString& humidity_str = wxString::Format("%d%%", m_humidity_percent);
|
||||
m_humidity_label->SetLabel(humidity_str);
|
||||
// Orca: format the temperature with an explicit UTF-8 \u2103 (no translation of a units-only format)
|
||||
const wxString& temp_str = wxString::Format(wxString::FromUTF8(u8"%d\u2103" /* \u00b0C */), (int)std::round(m_current_temperature));
|
||||
const wxString& temp_str = wxString::Format(wxString::FromUTF8(u8"%d\u2103" /* °C */), (int)std::round(m_current_temperature));
|
||||
m_temperature_label->SetLabel(temp_str);
|
||||
|
||||
if (m_left_dry_time > 0)
|
||||
|
||||
@@ -20,7 +20,7 @@ namespace Slic3r { namespace GUI {
|
||||
struct uiAmsHumidityInfo
|
||||
{
|
||||
std::string ams_id;
|
||||
AMSModel ams_type; // Orca: GUI-layer AMS enum; consumer (AMSItem.cpp) assigns an AMSModel
|
||||
AMSModel ams_type;
|
||||
int humidity_display_idx = -1;
|
||||
int humidity_percent = -1;
|
||||
float current_temperature;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
#include "slic3r/GUI/I18N.hpp"
|
||||
#include "slic3r/GUI/wxExtensions.hpp"
|
||||
#include "slic3r/GUI/Widgets/Label.hpp" // Orca: explicit Label include
|
||||
#include "slic3r/GUI/Widgets/Label.hpp"
|
||||
|
||||
#include <wx/stattext.h>
|
||||
|
||||
@@ -81,6 +81,7 @@ void uiDeviceUpdateVersion::CreateWidgets()
|
||||
serial_text->SetFont(font);
|
||||
version_text->SetFont(font);
|
||||
model_text->SetFont(font);
|
||||
|
||||
// The grid sizer
|
||||
wxFlexGridSizer* grid_sizer = new wxFlexGridSizer(0, 2, 0, 0);
|
||||
//grid_sizer->AddGrowableCol(1);
|
||||
@@ -102,10 +103,10 @@ void uiDeviceUpdateVersion::CreateWidgets()
|
||||
|
||||
grid_sizer->Add(version_hsizer, 0, wxEXPAND, 0);
|
||||
grid_sizer->Add(m_dev_version, 0, wxEXPAND | wxALL, FromDIP(5));
|
||||
|
||||
|
||||
// Updating
|
||||
wxSizer* main_sizer = new wxBoxSizer(wxVERTICAL);
|
||||
main_sizer->AddSpacer(FromDIP(40)); // Orca: top spacing above the firmware-info grid
|
||||
main_sizer->AddSpacer(FromDIP(40));
|
||||
main_sizer->Add(grid_sizer, 0, wxALIGN_LEFT, FromDIP(5));
|
||||
|
||||
SetSizer(main_sizer);
|
||||
|
||||
@@ -1,11 +1,14 @@
|
||||
//**********************************************************/
|
||||
/* File: wgtDeviceNozzleRack.cpp
|
||||
* Description: The panel with rack info
|
||||
* Description: The Device-tab panel with the toolhead nozzle and the H2C induction hotend rack.
|
||||
*
|
||||
* \n class wgtDeviceNozzleRackArea;
|
||||
* \n class wgtDeviceNozzleRackNozzleItem;
|
||||
* \n class wgtDeviceNozzleRack;
|
||||
* \n class wgtDeviceNozzleRackToolHead;
|
||||
* \n class wgtDeviceNozzleRackArea;
|
||||
* \n class wgtDeviceNozzleRackPos;
|
||||
*
|
||||
* The wgtDeviceNozzleRackNozzleItem tile and the EVT_NOZZLE_RACK_NOZZLE_ITEM_SELECTED event live in
|
||||
* wgtDeviceNozzleRackNozzleItem.{h,cpp}, so they are not redefined here.
|
||||
//**********************************************************/
|
||||
|
||||
#include "wgtDeviceNozzleRack.h"
|
||||
@@ -14,41 +17,29 @@
|
||||
#include "slic3r/GUI/DeviceCore/DevNozzleSystem.h"
|
||||
|
||||
#include "slic3r/GUI/I18N.hpp"
|
||||
#include "slic3r/GUI/MainFrame.hpp"
|
||||
#include "slic3r/GUI/MsgDialog.hpp"
|
||||
#include "slic3r/GUI/GUI_App.hpp"
|
||||
#include "slic3r/GUI/MainFrame.hpp"
|
||||
#include "slic3r/GUI/wxExtensions.hpp"
|
||||
|
||||
#include "slic3r/GUI/Widgets/Button.hpp"
|
||||
#include "slic3r/GUI/Widgets/Label.hpp"
|
||||
|
||||
#include <unordered_set>
|
||||
|
||||
#define WX_DIP_SIZE_18 wxSize(FromDIP(18), FromDIP(18))
|
||||
#define WX_DIP_SIZE_46 wxSize(FromDIP(46), FromDIP(46))
|
||||
#define WX_DIP_SIZE(x, y) wxSize(FromDIP(x), FromDIP(y))
|
||||
|
||||
#define WGT_RACK_NOZZLE_SIZE WX_DIP_SIZE(88, 100)
|
||||
|
||||
#define L_RAW_A_STR _L("Row A")
|
||||
#define L_RAW_B_STR _L("Row B")
|
||||
|
||||
static wxColour s_gray_clr("#B0B0B0");
|
||||
static wxColour s_hgreen_clr("#009688"); // Orca: accent green
|
||||
static wxColour s_red_clr("#D01B1B");
|
||||
|
||||
// Orca: StateColor lacks these grey constants, so mirror the values here.
|
||||
static const wxColour WGT_GREY200 = wxColour(248, 248, 248);
|
||||
static const wxColour WGT_GREY300 = wxColour(238, 238, 238);
|
||||
|
||||
static std::vector<int> a_nozzle_seq = { 0, 2, 4, 1, 3, 5 };
|
||||
static std::vector<int> b_nozzle_seq = { 1, 3, 5, 0, 2, 4 };
|
||||
|
||||
wxDEFINE_EVENT(EVT_NOZZLE_RACK_NOZZLE_ITEM_SELECTED, wxCommandEvent);
|
||||
static wxColour s_hgreen_clr("#009688");
|
||||
|
||||
namespace Slic3r::GUI
|
||||
{
|
||||
|
||||
// Tints the "yellow" template pixels of a nozzle bitmap with the loaded filament colour.
|
||||
// Duplicates the file-local helper of the same purpose in wgtDeviceNozzleRackNozzleItem.cpp.
|
||||
static wxBitmap SetNozzleBmpColor(const wxBitmap& bmp, const std::string& color_str) {
|
||||
if(color_str.empty()) return bmp;
|
||||
|
||||
@@ -362,36 +353,6 @@ StaticBox* wgtDeviceNozzleRackArea::CreateNozzleBox(const std::vector<int> nozzl
|
||||
return nozzle_box;
|
||||
}
|
||||
|
||||
static void s_update_title(const std::shared_ptr<DevNozzleRack> rack, wgtDeviceNozzleRackTitle* title_label)
|
||||
{
|
||||
wxString title = _L("Induction Hotend Rack");
|
||||
if (rack && (rack->GetReadingCount() > 0))
|
||||
{
|
||||
wxString pending = ": " + _L("Reading") + wxString::Format(" %d/%d", rack->GetReadingIdx(), rack->GetReadingCount());
|
||||
title += pending;
|
||||
}
|
||||
|
||||
title_label->SetLabel(title);
|
||||
}
|
||||
|
||||
#if 0
|
||||
static void s_update_readall_btn(const std::shared_ptr<DevNozzleRack> rack, Button* btn)
|
||||
{
|
||||
wxString label = _L("Read All");
|
||||
if (rack && rack->HasUnreliableNozzles())
|
||||
{
|
||||
label += "*";
|
||||
}
|
||||
|
||||
if (btn->GetLabel() != label)
|
||||
{
|
||||
btn->SetLabel(label);
|
||||
}
|
||||
|
||||
btn->Enable(rack->CtrlCanReadAll());
|
||||
};
|
||||
#endif
|
||||
|
||||
void wgtDeviceNozzleRackArea::UpdateNozzleItems(const std::unordered_map<int, wgtDeviceNozzleRackNozzleItem*>& nozzle_items,
|
||||
std::shared_ptr<DevNozzleRack> nozzle_rack)
|
||||
{
|
||||
@@ -448,7 +409,6 @@ void wgtDeviceNozzleRackArea::UpdateRackInfo(std::weak_ptr<DevNozzleRack> rack)
|
||||
const auto& nozzle_rack = rack.lock();
|
||||
if (nozzle_rack)
|
||||
{
|
||||
// s_update_title(nozzle_rack, m_title_nozzle_rack);
|
||||
UpdateNozzleItems(m_nozzle_items, nozzle_rack);
|
||||
m_rack_pos_panel->UpdateRackPos(nozzle_rack);
|
||||
m_btn_read_all->Enable(nozzle_rack->CtrlCanReadAll());
|
||||
@@ -611,7 +571,7 @@ static void s_show_label(Label* label, const wxString& text, const wxColour& tex
|
||||
void wgtDeviceNozzleRackPos::UpdateRackPos(DevNozzleRack::RackPos new_pos,
|
||||
DevNozzleRack::RackStatus new_status, bool is_reading)
|
||||
{
|
||||
/* di*/
|
||||
// While reading, both rows show a "Running..." status and the move buttons are hidden.
|
||||
if (is_reading)
|
||||
{
|
||||
s_show_label(m_label_rowup, L_RAW_A_STR, *wxBLACK);
|
||||
@@ -737,298 +697,4 @@ void wgtDeviceNozzleRackPos::Rescale()
|
||||
m_btn_homing->msw_rescale();
|
||||
}
|
||||
|
||||
wgtDeviceNozzleRackNozzleItem::wgtDeviceNozzleRackNozzleItem(wxWindow* parent, int nozzle_id)
|
||||
: StaticBox(parent, wxID_ANY), m_nozzle_id(nozzle_id)
|
||||
{
|
||||
CreateGui();
|
||||
}
|
||||
|
||||
void wgtDeviceNozzleRackNozzleItem::CreateGui()
|
||||
{
|
||||
// Background
|
||||
SetCornerRadius(FromDIP(5));
|
||||
SetBackgroundColor(*wxWHITE);
|
||||
|
||||
// Top H
|
||||
wxSizer *top_h_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
|
||||
m_nozzle_label_id = new Label(this);
|
||||
m_nozzle_label_id->SetFont(Label::Body_12);
|
||||
m_nozzle_label_id->SetBackgroundColour(*wxWHITE);
|
||||
m_nozzle_label_id->SetLabel(wxString::Format("%d", m_nozzle_id + 1));
|
||||
|
||||
m_status = NOZZLE_STATUS::NOZZLE_EMPTY;
|
||||
m_nozzle_empty_image = new ScalableBitmap(this, "dev_rack_nozzle_empty", 46);
|
||||
m_nozzle_icon = new wxStaticBitmap(this, wxID_ANY, m_nozzle_empty_image->bmp(), wxDefaultPosition, WX_DIP_SIZE_46);
|
||||
m_nozzle_icon->SetBackgroundColour(*wxWHITE);
|
||||
|
||||
m_nozzle_selected_bitmap = new wxStaticBitmap(this, wxID_ANY, wxNullBitmap, wxDefaultPosition, WX_DIP_SIZE(20, 20));
|
||||
m_nozzle_selected_bitmap->SetBackgroundColour(*wxWHITE);
|
||||
|
||||
top_h_sizer->Add(m_nozzle_label_id, 0, wxTOP | wxLEFT, FromDIP(6));
|
||||
top_h_sizer->AddStretchSpacer(1);
|
||||
top_h_sizer->Add(m_nozzle_icon, 0, wxTOP, FromDIP(10));
|
||||
top_h_sizer->AddStretchSpacer(1);
|
||||
top_h_sizer->Add(m_nozzle_selected_bitmap, 0, wxTOP | wxRIGHT, FromDIP(2));
|
||||
|
||||
// Bottom V
|
||||
wxBoxSizer* bottom_v = new wxBoxSizer(wxVERTICAL);
|
||||
|
||||
wxSizer* label_h_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
m_nozzle_label_1 = new Label(this);
|
||||
m_nozzle_label_1->SetFont(Label::Body_12);
|
||||
m_nozzle_label_1->SetBackgroundColour(*wxWHITE);
|
||||
m_nozzle_label_1->SetLabel(_L("Empty"));
|
||||
|
||||
label_h_sizer->Add(m_nozzle_label_1, 0, wxALIGN_LEFT);
|
||||
|
||||
auto status_icon = create_scaled_bitmap("dev_rack_nozzle_error_icon", this, 14);
|
||||
m_nozzle_status_icon = new wxStaticBitmap(this, wxID_ANY, status_icon, wxDefaultPosition, WX_DIP_SIZE(14, 14));
|
||||
m_nozzle_status_icon->Bind(wxEVT_LEFT_DOWN, &wgtDeviceNozzleRackNozzleItem::OnBtnNozzleStatus, this);
|
||||
m_nozzle_status_icon->Bind(wxEVT_ENTER_WINDOW, [this](auto&) { SetCursor(wxCURSOR_HAND); });
|
||||
m_nozzle_status_icon->Bind(wxEVT_LEAVE_WINDOW, [this](auto&) { SetCursor(wxCURSOR_ARROW); });
|
||||
m_nozzle_status_icon->SetBackgroundColour(*wxWHITE);
|
||||
m_nozzle_status_icon->Show(false);
|
||||
|
||||
label_h_sizer->Add(m_nozzle_status_icon, 0, wxALIGN_CENTER | wxLEFT, FromDIP(2));
|
||||
bottom_v->Add(label_h_sizer, 0, wxALIGN_CENTER_HORIZONTAL | wxTOP, FromDIP(2));
|
||||
|
||||
m_nozzle_label_2 = new Label(this);
|
||||
m_nozzle_label_2->SetFont(Label::Body_12);
|
||||
m_nozzle_label_2->SetBackgroundColour(*wxWHITE);
|
||||
bottom_v->Add(m_nozzle_label_2, 0, wxALIGN_CENTER_HORIZONTAL);
|
||||
|
||||
// Main sizer
|
||||
wxSizer* main_sizer = new wxBoxSizer(wxVERTICAL);
|
||||
main_sizer->Add(top_h_sizer, 0, wxEXPAND);
|
||||
main_sizer->Add(bottom_v, 0, wxALIGN_CENTER_HORIZONTAL);
|
||||
SetSizer(main_sizer);
|
||||
|
||||
SetMinSize(WGT_RACK_NOZZLE_SIZE);
|
||||
SetMaxSize(WGT_RACK_NOZZLE_SIZE);
|
||||
SetSize(WGT_RACK_NOZZLE_SIZE);
|
||||
Layout();
|
||||
};
|
||||
|
||||
void wgtDeviceNozzleRackNozzleItem::SetSelected(bool selected)
|
||||
{
|
||||
if (!m_enable_select){
|
||||
assert(false && "not support select");
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_is_selected != selected) {
|
||||
m_is_selected = selected;
|
||||
if (selected) {
|
||||
if (!m_nozzle_selected_image) {
|
||||
m_nozzle_selected_image = new ScalableBitmap(this, "dev_rack_nozzle_selected", 20);
|
||||
}
|
||||
|
||||
m_nozzle_selected_bitmap->SetBitmap(m_nozzle_selected_image->bmp());
|
||||
SetBorderColor(StateColor::darkModeColorFor(s_hgreen_clr));
|
||||
} else {
|
||||
m_nozzle_selected_bitmap->SetBitmap(wxNullBitmap);
|
||||
SetBorderColor(StateColor::darkModeColorFor(s_gray_clr));
|
||||
}
|
||||
|
||||
Refresh();
|
||||
}
|
||||
}
|
||||
|
||||
void wgtDeviceNozzleRackNozzleItem::Update(const std::shared_ptr<DevNozzleRack> rack, bool on_rack /*= true*/)
|
||||
{
|
||||
m_rack = rack;
|
||||
|
||||
if (rack) {
|
||||
const auto &nozzle_info = on_rack ? rack->GetNozzle(m_nozzle_id) : rack->GetNozzleSystem()->GetExtNozzle(m_nozzle_id);
|
||||
const wxString &diameter_str = nozzle_info.GetNozzleDiameterStr();
|
||||
const wxString &flowtype_str = nozzle_info.GetNozzleFlowTypeStr();
|
||||
const std::string &color = nozzle_info.GetFilamentColor();
|
||||
|
||||
/*check empty first*/
|
||||
if (nozzle_info.IsEmpty()) {
|
||||
SetNozzleStatus(NOZZLE_STATUS::NOZZLE_EMPTY, _L("Empty"), wxEmptyString, color);
|
||||
} else if (nozzle_info.IsNormal()) {
|
||||
SetNozzleStatus(NOZZLE_STATUS::NOZZLE_NORMAL, diameter_str, flowtype_str, color);
|
||||
} else if (nozzle_info.IsAbnormal()) {
|
||||
SetNozzleStatus(NOZZLE_STATUS::NOZZLE_ERROR, _L("Error"), wxEmptyString, color);
|
||||
} else if (nozzle_info.IsUnknown()) {
|
||||
SetNozzleStatus(NOZZLE_STATUS::NOZZLE_UNKNOWN, _L("Unknown"), wxEmptyString, color);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void wgtDeviceNozzleRackNozzleItem::SetNozzleStatus(NOZZLE_STATUS status, const wxString& str1, const wxString& str2, const std::string& color)
|
||||
{
|
||||
if (m_status != status || m_filament_color != color)
|
||||
{
|
||||
m_status = status;
|
||||
m_filament_color = color;
|
||||
switch (status)
|
||||
{
|
||||
case Slic3r::GUI::wgtDeviceNozzleRackNozzleItem::NOZZLE_EMPTY:
|
||||
{
|
||||
if (!m_nozzle_empty_image) { m_nozzle_empty_image = new ScalableBitmap(this, "dev_rack_nozzle_empty", 46);}
|
||||
m_nozzle_icon->SetBitmap(m_nozzle_empty_image->bmp());
|
||||
break;
|
||||
}
|
||||
case Slic3r::GUI::wgtDeviceNozzleRackNozzleItem::NOZZLE_NORMAL:
|
||||
{
|
||||
if (!m_nozzle_normal_image) { m_nozzle_normal_image = new ScalableBitmap(this, "dev_rack_nozzle_normal", 46);}
|
||||
m_nozzle_icon->SetBitmap(SetNozzleBmpColor(m_nozzle_normal_image->bmp(), m_filament_color));
|
||||
break;
|
||||
}
|
||||
case Slic3r::GUI::wgtDeviceNozzleRackNozzleItem::NOZZLE_UNKNOWN:
|
||||
{
|
||||
if (!m_nozzle_unknown_image) { m_nozzle_unknown_image = new ScalableBitmap(this, "dev_rack_nozzle_unknown", 46);}
|
||||
m_nozzle_icon->SetBitmap(m_nozzle_unknown_image->bmp());
|
||||
break;
|
||||
}
|
||||
case Slic3r::GUI::wgtDeviceNozzleRackNozzleItem::NOZZLE_ERROR:
|
||||
{
|
||||
if (!m_nozzle_error_image) { m_nozzle_error_image = new ScalableBitmap(this, "dev_rack_nozzle_error", 46);}
|
||||
m_nozzle_icon->SetBitmap(m_nozzle_error_image->bmp());
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (status == wgtDeviceNozzleRackNozzleItem::NOZZLE_ERROR)
|
||||
{
|
||||
m_nozzle_label_1->SetForegroundColour(StateColor::darkModeColorFor(s_red_clr));
|
||||
m_nozzle_status_icon->Show(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_nozzle_label_1->SetForegroundColour(StateColor::darkModeColorFor(*wxBLACK));
|
||||
m_nozzle_status_icon->Show(false);
|
||||
}
|
||||
}
|
||||
|
||||
bool update_layout = (m_nozzle_label_1->GetLabel() != str1 || m_nozzle_label_2->GetLabel() != str2);
|
||||
m_nozzle_label_1->SetLabel(str1);
|
||||
m_nozzle_label_2->SetLabel(str2);
|
||||
|
||||
if (update_layout) {
|
||||
Layout();
|
||||
}
|
||||
}
|
||||
|
||||
void wgtDeviceNozzleRackNozzleItem::OnBtnNozzleStatus(wxMouseEvent& evt)
|
||||
{
|
||||
if (m_is_disabled) {
|
||||
return;
|
||||
}
|
||||
|
||||
auto rack = m_rack.lock();
|
||||
if (rack && m_status == wgtDeviceNozzleRackNozzleItem::NOZZLE_ERROR)
|
||||
{
|
||||
MessageDialog dlg(nullptr, _L("The hotend is in an abnormal state and currently unavailable. "
|
||||
"Please go to 'Device -> Upgrade' to upgrade firmware."), _L("Abnormal Hotend"), wxICON_WARNING);
|
||||
dlg.AddButton(wxID_CANCEL, _L("Cancel"), false);
|
||||
dlg.AddButton(wxID_OK,_L("Jump to the upgrade page"), true);
|
||||
|
||||
if (dlg.ShowModal() == wxID_OK) {
|
||||
wxGetApp().mainframe->m_monitor->jump_to_Upgrade();
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
void wgtDeviceNozzleRackNozzleItem::Rescale()
|
||||
{
|
||||
if (m_nozzle_normal_image) { m_nozzle_normal_image->msw_rescale(); }
|
||||
if (m_nozzle_empty_image) { m_nozzle_empty_image->msw_rescale(); }
|
||||
if (m_nozzle_unknown_image) { m_nozzle_unknown_image->msw_rescale(); }
|
||||
if (m_nozzle_error_image) { m_nozzle_error_image->msw_rescale(); }
|
||||
|
||||
auto status_icon = create_scaled_bitmap("dev_rack_nozzle_error_icon", this, 14);
|
||||
m_nozzle_status_icon->SetBitmap(status_icon);
|
||||
m_nozzle_status_icon->Refresh();
|
||||
|
||||
if (m_nozzle_selected_image) {
|
||||
m_nozzle_selected_image->msw_rescale();
|
||||
if (m_is_selected) {
|
||||
m_nozzle_selected_bitmap->SetBitmap(m_nozzle_selected_image->bmp());
|
||||
}
|
||||
};
|
||||
|
||||
switch (m_status)
|
||||
{
|
||||
case Slic3r::GUI::wgtDeviceNozzleRackNozzleItem::NOZZLE_EMPTY:
|
||||
{
|
||||
m_nozzle_icon->SetBitmap(m_nozzle_empty_image->bmp());
|
||||
break;
|
||||
}
|
||||
case Slic3r::GUI::wgtDeviceNozzleRackNozzleItem::NOZZLE_NORMAL:
|
||||
{
|
||||
m_nozzle_icon->SetBitmap(SetNozzleBmpColor(m_nozzle_normal_image->bmp(), m_filament_color));
|
||||
break;
|
||||
}
|
||||
case Slic3r::GUI::wgtDeviceNozzleRackNozzleItem::NOZZLE_UNKNOWN:
|
||||
{
|
||||
m_nozzle_icon->SetBitmap(m_nozzle_unknown_image->bmp());
|
||||
break;
|
||||
}
|
||||
case Slic3r::GUI::wgtDeviceNozzleRackNozzleItem::NOZZLE_ERROR:
|
||||
{
|
||||
m_nozzle_icon->SetBitmap(m_nozzle_error_image->bmp());
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
break;
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
void wgtDeviceNozzleRackNozzleItem::EnableSelect()
|
||||
{
|
||||
if (m_enable_select == true) {
|
||||
return;
|
||||
};
|
||||
|
||||
m_enable_select = true;
|
||||
m_nozzle_icon->Bind(wxEVT_LEFT_DOWN, [this](auto& evt) { OnItemSelected(evt); });
|
||||
m_nozzle_label_id->Bind(wxEVT_LEFT_DOWN, [this](auto& evt) { OnItemSelected(evt); });
|
||||
m_nozzle_label_1->Bind(wxEVT_LEFT_DOWN, [this](auto& evt) { OnItemSelected(evt); });
|
||||
m_nozzle_label_2->Bind(wxEVT_LEFT_DOWN, [this](auto& evt) { OnItemSelected(evt); });
|
||||
Bind(wxEVT_LEFT_DOWN, [this](auto& evt) { OnItemSelected(evt); });
|
||||
}
|
||||
|
||||
void wgtDeviceNozzleRackNozzleItem::OnItemSelected(wxMouseEvent& evt)
|
||||
{
|
||||
if (m_enable_select && !m_is_disabled){
|
||||
SetSelected(true);
|
||||
wxCommandEvent command_evt(EVT_NOZZLE_RACK_NOZZLE_ITEM_SELECTED, GetId());
|
||||
command_evt.SetEventObject(this);
|
||||
ProcessEvent(command_evt);
|
||||
}
|
||||
|
||||
evt.Skip();
|
||||
}
|
||||
|
||||
|
||||
void wgtDeviceNozzleRackNozzleItem::SetDisable(bool disabled)
|
||||
{
|
||||
if (m_is_disabled == disabled) {
|
||||
return;
|
||||
}
|
||||
|
||||
m_is_disabled = disabled;
|
||||
|
||||
auto bg_clr = disabled ? StateColor::darkModeColorFor("#E5E7EB") : StateColor::darkModeColorFor(*wxWHITE);
|
||||
m_nozzle_icon->SetBackgroundColour(bg_clr);
|
||||
m_nozzle_label_id->SetBackgroundColour(bg_clr);
|
||||
m_nozzle_label_1->SetBackgroundColour(bg_clr);
|
||||
m_nozzle_status_icon->SetBackgroundColour(bg_clr);
|
||||
m_nozzle_label_2->SetBackgroundColour(bg_clr);
|
||||
m_nozzle_selected_bitmap->SetBackgroundColour(bg_clr);
|
||||
|
||||
SetBackgroundColor(bg_clr);
|
||||
Refresh();
|
||||
};
|
||||
|
||||
};
|
||||
};// end of namespace Slic3r::GUI
|
||||
|
||||
@@ -1,22 +1,31 @@
|
||||
//**********************************************************/
|
||||
/* File: wgtDeviceNozzleRack.h
|
||||
* Description: The panel with rack and nozzles
|
||||
* Description: The Device-tab panel with the toolhead nozzle and the H2C induction hotend rack.
|
||||
*
|
||||
* \n class wgtDeviceNozzleRackArea;
|
||||
* \n class wgtDeviceNozzleRackNozzleItem;
|
||||
* \n class wgtDeviceNozzleRack; // toolhead panel + rack area, side by side
|
||||
* \n class wgtDeviceNozzleRackToolHead;
|
||||
* \n class wgtDeviceNozzleRackArea;
|
||||
* \n class wgtDeviceNozzleRackPos;
|
||||
*
|
||||
* The single-nozzle tile class wgtDeviceNozzleRackNozzleItem lives in its own translation unit
|
||||
* (wgtDeviceNozzleRackNozzleItem.{h,cpp}), so it is included here rather than redeclared.
|
||||
* The Hotends-Info upgrade dialog (wgtDeviceNozzleRackUpgradeDlg) is intentionally not wired yet
|
||||
* (see the TODO markers in the .cpp).
|
||||
//**********************************************************/
|
||||
|
||||
#pragma once
|
||||
#include "slic3r/GUI/DeviceCore/DevNozzleRack.h"
|
||||
|
||||
#include "wgtDeviceNozzleRackNozzleItem.h"
|
||||
|
||||
#include "slic3r/GUI/Widgets/StaticBox.hpp"
|
||||
#include "slic3r/GUI/Widgets/AnimaController.hpp"
|
||||
|
||||
#include <wx/panel.h>
|
||||
#include <wx/simplebook.h>
|
||||
#include <memory>
|
||||
#include <unordered_map>
|
||||
#include <vector>
|
||||
|
||||
// Previous definitions
|
||||
class Button;
|
||||
@@ -38,9 +47,6 @@ namespace GUI
|
||||
}
|
||||
};
|
||||
|
||||
// Events
|
||||
wxDECLARE_EVENT(EVT_NOZZLE_RACK_NOZZLE_ITEM_SELECTED, wxCommandEvent);
|
||||
|
||||
namespace Slic3r::GUI
|
||||
{
|
||||
class wgtDeviceNozzleRack : public wxPanel
|
||||
@@ -142,6 +148,8 @@ private:
|
||||
Label* m_progress_refresh{ nullptr };
|
||||
AnimaIcon* m_refresh_icon{ nullptr };
|
||||
|
||||
// "Hotends Info" upgrade dialog. Owned for its ShowModal lifetime by
|
||||
// OnBtnHotendsInfos; UpdateRackInfo forwards live device pushes to it while it is shown.
|
||||
wgtDeviceNozzleRackUpgradeDlg* m_rack_upgrade_dlg = nullptr;
|
||||
};
|
||||
|
||||
@@ -185,71 +193,4 @@ private:
|
||||
ScalableButton* m_btn_homing{ nullptr };
|
||||
};
|
||||
|
||||
class wgtDeviceNozzleRackNozzleItem : public StaticBox
|
||||
{
|
||||
public:
|
||||
enum NOZZLE_STATUS
|
||||
{
|
||||
NOZZLE_EMPTY,
|
||||
NOZZLE_NORMAL,
|
||||
NOZZLE_UNKNOWN,
|
||||
NOZZLE_ERROR
|
||||
};
|
||||
|
||||
public:
|
||||
wgtDeviceNozzleRackNozzleItem(wxWindow* parent, int nozzle_id);
|
||||
|
||||
public:
|
||||
void Update(const std::shared_ptr<DevNozzleRack> rack, bool on_rack = true); // on_rack is false means extruder nozzle
|
||||
|
||||
int GetNozzleId() const { return m_nozzle_id; }
|
||||
void SetDisplayIdText(const wxString& text) { m_nozzle_label_id->SetLabel(text);};
|
||||
|
||||
void EnableSelect();;
|
||||
void SetSelected(bool selected);
|
||||
bool IsSelected() const { return m_is_selected; }
|
||||
|
||||
bool IsDisabled() const { return m_is_disabled; }
|
||||
void SetDisable(bool disabled);
|
||||
|
||||
void Rescale();
|
||||
|
||||
private:
|
||||
void CreateGui();
|
||||
|
||||
void SetNozzleStatus(NOZZLE_STATUS status, const wxString& str1, const wxString& str2, const std::string& color);
|
||||
|
||||
void OnBtnNozzleStatus(wxMouseEvent& evt);
|
||||
void OnItemSelected(wxMouseEvent& evt);
|
||||
|
||||
private:
|
||||
std::weak_ptr<DevNozzleRack> m_rack;
|
||||
|
||||
int m_nozzle_id; // internal id, from 0 to 5
|
||||
std::string m_filament_color;
|
||||
NOZZLE_STATUS m_status = NOZZLE_STATUS::NOZZLE_EMPTY;
|
||||
|
||||
// select
|
||||
bool m_is_selected = false;
|
||||
bool m_enable_select = false;
|
||||
ScalableBitmap* m_nozzle_selected_image{ nullptr };
|
||||
wxStaticBitmap* m_nozzle_selected_bitmap{ nullptr };
|
||||
|
||||
// enable or disable
|
||||
bool m_is_disabled = false;
|
||||
|
||||
// Images
|
||||
ScalableBitmap* m_nozzle_normal_image{ nullptr };
|
||||
ScalableBitmap* m_nozzle_empty_image{ nullptr };
|
||||
ScalableBitmap* m_nozzle_unknown_image{ nullptr };
|
||||
ScalableBitmap* m_nozzle_error_image{ nullptr };
|
||||
|
||||
// GUI
|
||||
wxStaticBitmap* m_nozzle_icon{ nullptr };
|
||||
Label* m_nozzle_label_id { nullptr };
|
||||
Label* m_nozzle_label_1{ nullptr };
|
||||
wxStaticBitmap* m_nozzle_status_icon = nullptr;
|
||||
Label* m_nozzle_label_2{ nullptr };
|
||||
};
|
||||
|
||||
};// end of namespace Slic3r::GUI
|
||||
};// end of namespace Slic3r::GUI
|
||||
|
||||
347
src/slic3r/GUI/DeviceTab/wgtDeviceNozzleRackNozzleItem.cpp
Normal file
347
src/slic3r/GUI/DeviceTab/wgtDeviceNozzleRackNozzleItem.cpp
Normal file
@@ -0,0 +1,347 @@
|
||||
//**********************************************************/
|
||||
/* File: wgtDeviceNozzleRackNozzleItem.cpp
|
||||
* Description: One nozzle cell of the H2C hotend rack view. Holds the
|
||||
* wgtDeviceNozzleRackNozzleItem widget, the SetNozzleBmpColor helper and the layout
|
||||
* constants it needs.
|
||||
//**********************************************************/
|
||||
|
||||
#include "wgtDeviceNozzleRackNozzleItem.h"
|
||||
|
||||
#include "slic3r/GUI/DeviceCore/DevNozzleSystem.h"
|
||||
|
||||
#include "slic3r/GUI/I18N.hpp"
|
||||
#include "slic3r/GUI/MsgDialog.hpp"
|
||||
#include "slic3r/GUI/GUI_App.hpp"
|
||||
#include "slic3r/GUI/wxExtensions.hpp"
|
||||
|
||||
#include "slic3r/GUI/Widgets/Label.hpp"
|
||||
|
||||
#define WX_DIP_SIZE_46 wxSize(FromDIP(46), FromDIP(46))
|
||||
#define WX_DIP_SIZE(x, y) wxSize(FromDIP(x), FromDIP(y))
|
||||
|
||||
#define WGT_RACK_NOZZLE_SIZE WX_DIP_SIZE(88, 100)
|
||||
|
||||
static wxColour s_gray_clr("#B0B0B0");
|
||||
static wxColour s_hgreen_clr("#009688");
|
||||
static wxColour s_red_clr("#D01B1B");
|
||||
|
||||
wxDEFINE_EVENT(EVT_NOZZLE_RACK_NOZZLE_ITEM_SELECTED, wxCommandEvent);
|
||||
|
||||
namespace Slic3r::GUI
|
||||
{
|
||||
|
||||
static wxBitmap SetNozzleBmpColor(const wxBitmap& bmp, const std::string& color_str) {
|
||||
if(color_str.empty()) return bmp;
|
||||
|
||||
wxImage img = bmp.ConvertToImage();
|
||||
wxColour color("#" + color_str);
|
||||
|
||||
for (int y = 0; y < img.GetHeight(); ++y) {
|
||||
for (int x = 0; x < img.GetWidth(); ++x) {
|
||||
unsigned char r = img.GetRed(x, y);
|
||||
unsigned char g = img.GetGreen(x, y);
|
||||
unsigned char b = img.GetBlue(x, y);
|
||||
|
||||
/*replace yellow with color*/
|
||||
if ( r >= 180 && g >= 180 && b <= 150) {
|
||||
img.SetRGB(x, y, color.Red(), color.Green(), color.Blue());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return wxBitmap(img, -1, bmp.GetScaleFactor());
|
||||
}
|
||||
|
||||
wgtDeviceNozzleRackNozzleItem::wgtDeviceNozzleRackNozzleItem(wxWindow* parent, int nozzle_id)
|
||||
: StaticBox(parent, wxID_ANY), m_nozzle_id(nozzle_id)
|
||||
{
|
||||
CreateGui();
|
||||
}
|
||||
|
||||
void wgtDeviceNozzleRackNozzleItem::CreateGui()
|
||||
{
|
||||
// Background
|
||||
SetCornerRadius(FromDIP(5));
|
||||
SetBackgroundColor(*wxWHITE);
|
||||
|
||||
// Top H
|
||||
wxSizer *top_h_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
|
||||
m_nozzle_label_id = new Label(this);
|
||||
m_nozzle_label_id->SetFont(Label::Body_12);
|
||||
m_nozzle_label_id->SetBackgroundColour(*wxWHITE);
|
||||
m_nozzle_label_id->SetLabel(wxString::Format("%d", m_nozzle_id + 1));
|
||||
|
||||
m_status = NOZZLE_STATUS::NOZZLE_EMPTY;
|
||||
m_nozzle_empty_image = new ScalableBitmap(this, "dev_rack_nozzle_empty", 46);
|
||||
m_nozzle_icon = new wxStaticBitmap(this, wxID_ANY, m_nozzle_empty_image->bmp(), wxDefaultPosition, WX_DIP_SIZE_46);
|
||||
m_nozzle_icon->SetBackgroundColour(*wxWHITE);
|
||||
|
||||
m_nozzle_selected_bitmap = new wxStaticBitmap(this, wxID_ANY, wxNullBitmap, wxDefaultPosition, WX_DIP_SIZE(20, 20));
|
||||
m_nozzle_selected_bitmap->SetBackgroundColour(*wxWHITE);
|
||||
|
||||
top_h_sizer->Add(m_nozzle_label_id, 0, wxTOP | wxLEFT, FromDIP(6));
|
||||
top_h_sizer->AddStretchSpacer(1);
|
||||
top_h_sizer->Add(m_nozzle_icon, 0, wxTOP, FromDIP(10));
|
||||
top_h_sizer->AddStretchSpacer(1);
|
||||
top_h_sizer->Add(m_nozzle_selected_bitmap, 0, wxTOP | wxRIGHT, FromDIP(2));
|
||||
|
||||
// Bottom V
|
||||
wxBoxSizer* bottom_v = new wxBoxSizer(wxVERTICAL);
|
||||
|
||||
wxSizer* label_h_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
m_nozzle_label_1 = new Label(this);
|
||||
m_nozzle_label_1->SetFont(Label::Body_12);
|
||||
m_nozzle_label_1->SetBackgroundColour(*wxWHITE);
|
||||
m_nozzle_label_1->SetLabel(_L("Empty"));
|
||||
|
||||
label_h_sizer->Add(m_nozzle_label_1, 0, wxALIGN_LEFT);
|
||||
|
||||
auto status_icon = create_scaled_bitmap("dev_rack_nozzle_error_icon", this, 14);
|
||||
m_nozzle_status_icon = new wxStaticBitmap(this, wxID_ANY, status_icon, wxDefaultPosition, WX_DIP_SIZE(14, 14));
|
||||
m_nozzle_status_icon->Bind(wxEVT_LEFT_DOWN, &wgtDeviceNozzleRackNozzleItem::OnBtnNozzleStatus, this);
|
||||
m_nozzle_status_icon->Bind(wxEVT_ENTER_WINDOW, [this](auto&) { SetCursor(wxCURSOR_HAND); });
|
||||
m_nozzle_status_icon->Bind(wxEVT_LEAVE_WINDOW, [this](auto&) { SetCursor(wxCURSOR_ARROW); });
|
||||
m_nozzle_status_icon->SetBackgroundColour(*wxWHITE);
|
||||
m_nozzle_status_icon->Show(false);
|
||||
|
||||
label_h_sizer->Add(m_nozzle_status_icon, 0, wxALIGN_CENTER | wxLEFT, FromDIP(2));
|
||||
bottom_v->Add(label_h_sizer, 0, wxALIGN_CENTER_HORIZONTAL | wxTOP, FromDIP(2));
|
||||
|
||||
m_nozzle_label_2 = new Label(this);
|
||||
m_nozzle_label_2->SetFont(Label::Body_12);
|
||||
m_nozzle_label_2->SetBackgroundColour(*wxWHITE);
|
||||
bottom_v->Add(m_nozzle_label_2, 0, wxALIGN_CENTER_HORIZONTAL);
|
||||
|
||||
// Main sizer
|
||||
wxSizer* main_sizer = new wxBoxSizer(wxVERTICAL);
|
||||
main_sizer->Add(top_h_sizer, 0, wxEXPAND);
|
||||
main_sizer->Add(bottom_v, 0, wxALIGN_CENTER_HORIZONTAL);
|
||||
SetSizer(main_sizer);
|
||||
|
||||
SetMinSize(WGT_RACK_NOZZLE_SIZE);
|
||||
SetMaxSize(WGT_RACK_NOZZLE_SIZE);
|
||||
SetSize(WGT_RACK_NOZZLE_SIZE);
|
||||
Layout();
|
||||
};
|
||||
|
||||
void wgtDeviceNozzleRackNozzleItem::SetSelected(bool selected)
|
||||
{
|
||||
if (!m_enable_select){
|
||||
assert(false && "not support select");
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_is_selected != selected) {
|
||||
m_is_selected = selected;
|
||||
if (selected) {
|
||||
if (!m_nozzle_selected_image) {
|
||||
m_nozzle_selected_image = new ScalableBitmap(this, "dev_rack_nozzle_selected", 20);
|
||||
}
|
||||
|
||||
m_nozzle_selected_bitmap->SetBitmap(m_nozzle_selected_image->bmp());
|
||||
SetBorderColor(StateColor::darkModeColorFor(s_hgreen_clr));
|
||||
} else {
|
||||
m_nozzle_selected_bitmap->SetBitmap(wxNullBitmap);
|
||||
SetBorderColor(StateColor::darkModeColorFor(s_gray_clr));
|
||||
}
|
||||
|
||||
Refresh();
|
||||
}
|
||||
}
|
||||
|
||||
void wgtDeviceNozzleRackNozzleItem::Update(const std::shared_ptr<DevNozzleRack> rack, bool on_rack /*= true*/)
|
||||
{
|
||||
m_rack = rack;
|
||||
|
||||
if (rack) {
|
||||
const auto &nozzle_info = on_rack ? rack->GetNozzle(m_nozzle_id) : rack->GetNozzleSystem()->GetExtNozzle(m_nozzle_id);
|
||||
const wxString &diameter_str = nozzle_info.GetNozzleDiameterStr();
|
||||
const wxString &flowtype_str = nozzle_info.GetNozzleFlowTypeStr();
|
||||
const std::string &color = nozzle_info.GetFilamentColor();
|
||||
|
||||
/*check empty first*/
|
||||
if (nozzle_info.IsEmpty()) {
|
||||
SetNozzleStatus(NOZZLE_STATUS::NOZZLE_EMPTY, _L("Empty"), wxEmptyString, color);
|
||||
} else if (nozzle_info.IsNormal()) {
|
||||
SetNozzleStatus(NOZZLE_STATUS::NOZZLE_NORMAL, diameter_str, flowtype_str, color);
|
||||
} else if (nozzle_info.IsAbnormal()) {
|
||||
SetNozzleStatus(NOZZLE_STATUS::NOZZLE_ERROR, _L("Error"), wxEmptyString, color);
|
||||
} else if (nozzle_info.IsUnknown()) {
|
||||
SetNozzleStatus(NOZZLE_STATUS::NOZZLE_UNKNOWN, _L("Unknown"), wxEmptyString, color);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void wgtDeviceNozzleRackNozzleItem::SetNozzleStatus(NOZZLE_STATUS status, const wxString& str1, const wxString& str2, const std::string& color)
|
||||
{
|
||||
if (m_status != status || m_filament_color != color)
|
||||
{
|
||||
m_status = status;
|
||||
m_filament_color = color;
|
||||
switch (status)
|
||||
{
|
||||
case Slic3r::GUI::wgtDeviceNozzleRackNozzleItem::NOZZLE_EMPTY:
|
||||
{
|
||||
if (!m_nozzle_empty_image) { m_nozzle_empty_image = new ScalableBitmap(this, "dev_rack_nozzle_empty", 46);}
|
||||
m_nozzle_icon->SetBitmap(m_nozzle_empty_image->bmp());
|
||||
break;
|
||||
}
|
||||
case Slic3r::GUI::wgtDeviceNozzleRackNozzleItem::NOZZLE_NORMAL:
|
||||
{
|
||||
if (!m_nozzle_normal_image) { m_nozzle_normal_image = new ScalableBitmap(this, "dev_rack_nozzle_normal", 46);}
|
||||
m_nozzle_icon->SetBitmap(SetNozzleBmpColor(m_nozzle_normal_image->bmp(), m_filament_color));
|
||||
break;
|
||||
}
|
||||
case Slic3r::GUI::wgtDeviceNozzleRackNozzleItem::NOZZLE_UNKNOWN:
|
||||
{
|
||||
if (!m_nozzle_unknown_image) { m_nozzle_unknown_image = new ScalableBitmap(this, "dev_rack_nozzle_unknown", 46);}
|
||||
m_nozzle_icon->SetBitmap(m_nozzle_unknown_image->bmp());
|
||||
break;
|
||||
}
|
||||
case Slic3r::GUI::wgtDeviceNozzleRackNozzleItem::NOZZLE_ERROR:
|
||||
{
|
||||
if (!m_nozzle_error_image) { m_nozzle_error_image = new ScalableBitmap(this, "dev_rack_nozzle_error", 46);}
|
||||
m_nozzle_icon->SetBitmap(m_nozzle_error_image->bmp());
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (status == wgtDeviceNozzleRackNozzleItem::NOZZLE_ERROR)
|
||||
{
|
||||
m_nozzle_label_1->SetForegroundColour(StateColor::darkModeColorFor(s_red_clr));
|
||||
m_nozzle_status_icon->Show(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_nozzle_label_1->SetForegroundColour(StateColor::darkModeColorFor(*wxBLACK));
|
||||
m_nozzle_status_icon->Show(false);
|
||||
}
|
||||
}
|
||||
|
||||
bool update_layout = (m_nozzle_label_1->GetLabel() != str1 || m_nozzle_label_2->GetLabel() != str2);
|
||||
m_nozzle_label_1->SetLabel(str1);
|
||||
m_nozzle_label_2->SetLabel(str2);
|
||||
|
||||
if (update_layout) {
|
||||
Layout();
|
||||
}
|
||||
}
|
||||
|
||||
void wgtDeviceNozzleRackNozzleItem::OnBtnNozzleStatus(wxMouseEvent& evt)
|
||||
{
|
||||
if (m_is_disabled) {
|
||||
return;
|
||||
}
|
||||
|
||||
auto rack = m_rack.lock();
|
||||
if (rack && m_status == wgtDeviceNozzleRackNozzleItem::NOZZLE_ERROR)
|
||||
{
|
||||
// Orca: show the abnormal-hotend warning as an informational dialog only, with no
|
||||
// "Jump to the upgrade page" button, since Orca's MessageDialog and device Upgrade UI
|
||||
// have no such entry point. Fires when tapping an error-state rack nozzle's status icon.
|
||||
MessageDialog dlg(nullptr, _L("The hotend is in an abnormal state and currently unavailable. "
|
||||
"Please go to 'Device -> Upgrade' to upgrade firmware."), _L("Abnormal Hotend"), wxICON_WARNING | wxOK);
|
||||
dlg.ShowModal();
|
||||
}
|
||||
}
|
||||
|
||||
void wgtDeviceNozzleRackNozzleItem::Rescale()
|
||||
{
|
||||
if (m_nozzle_normal_image) { m_nozzle_normal_image->msw_rescale(); }
|
||||
if (m_nozzle_empty_image) { m_nozzle_empty_image->msw_rescale(); }
|
||||
if (m_nozzle_unknown_image) { m_nozzle_unknown_image->msw_rescale(); }
|
||||
if (m_nozzle_error_image) { m_nozzle_error_image->msw_rescale(); }
|
||||
|
||||
auto status_icon = create_scaled_bitmap("dev_rack_nozzle_error_icon", this, 14);
|
||||
m_nozzle_status_icon->SetBitmap(status_icon);
|
||||
m_nozzle_status_icon->Refresh();
|
||||
|
||||
if (m_nozzle_selected_image) {
|
||||
m_nozzle_selected_image->msw_rescale();
|
||||
if (m_is_selected) {
|
||||
m_nozzle_selected_bitmap->SetBitmap(m_nozzle_selected_image->bmp());
|
||||
}
|
||||
};
|
||||
|
||||
switch (m_status)
|
||||
{
|
||||
case Slic3r::GUI::wgtDeviceNozzleRackNozzleItem::NOZZLE_EMPTY:
|
||||
{
|
||||
m_nozzle_icon->SetBitmap(m_nozzle_empty_image->bmp());
|
||||
break;
|
||||
}
|
||||
case Slic3r::GUI::wgtDeviceNozzleRackNozzleItem::NOZZLE_NORMAL:
|
||||
{
|
||||
m_nozzle_icon->SetBitmap(SetNozzleBmpColor(m_nozzle_normal_image->bmp(), m_filament_color));
|
||||
break;
|
||||
}
|
||||
case Slic3r::GUI::wgtDeviceNozzleRackNozzleItem::NOZZLE_UNKNOWN:
|
||||
{
|
||||
m_nozzle_icon->SetBitmap(m_nozzle_unknown_image->bmp());
|
||||
break;
|
||||
}
|
||||
case Slic3r::GUI::wgtDeviceNozzleRackNozzleItem::NOZZLE_ERROR:
|
||||
{
|
||||
m_nozzle_icon->SetBitmap(m_nozzle_error_image->bmp());
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
break;
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
void wgtDeviceNozzleRackNozzleItem::EnableSelect()
|
||||
{
|
||||
if (m_enable_select == true) {
|
||||
return;
|
||||
};
|
||||
|
||||
m_enable_select = true;
|
||||
m_nozzle_icon->Bind(wxEVT_LEFT_DOWN, [this](auto& evt) { OnItemSelected(evt); });
|
||||
m_nozzle_label_id->Bind(wxEVT_LEFT_DOWN, [this](auto& evt) { OnItemSelected(evt); });
|
||||
m_nozzle_label_1->Bind(wxEVT_LEFT_DOWN, [this](auto& evt) { OnItemSelected(evt); });
|
||||
m_nozzle_label_2->Bind(wxEVT_LEFT_DOWN, [this](auto& evt) { OnItemSelected(evt); });
|
||||
Bind(wxEVT_LEFT_DOWN, [this](auto& evt) { OnItemSelected(evt); });
|
||||
}
|
||||
|
||||
void wgtDeviceNozzleRackNozzleItem::OnItemSelected(wxMouseEvent& evt)
|
||||
{
|
||||
if (m_enable_select && !m_is_disabled){
|
||||
SetSelected(true);
|
||||
wxCommandEvent command_evt(EVT_NOZZLE_RACK_NOZZLE_ITEM_SELECTED, GetId());
|
||||
command_evt.SetEventObject(this);
|
||||
ProcessEvent(command_evt);
|
||||
}
|
||||
|
||||
evt.Skip();
|
||||
}
|
||||
|
||||
|
||||
void wgtDeviceNozzleRackNozzleItem::SetDisable(bool disabled)
|
||||
{
|
||||
if (m_is_disabled == disabled) {
|
||||
return;
|
||||
}
|
||||
|
||||
m_is_disabled = disabled;
|
||||
|
||||
auto bg_clr = disabled ? StateColor::darkModeColorFor("#E5E7EB") : StateColor::darkModeColorFor(*wxWHITE);
|
||||
m_nozzle_icon->SetBackgroundColour(bg_clr);
|
||||
m_nozzle_label_id->SetBackgroundColour(bg_clr);
|
||||
m_nozzle_label_1->SetBackgroundColour(bg_clr);
|
||||
m_nozzle_status_icon->SetBackgroundColour(bg_clr);
|
||||
m_nozzle_label_2->SetBackgroundColour(bg_clr);
|
||||
m_nozzle_selected_bitmap->SetBackgroundColour(bg_clr);
|
||||
|
||||
SetBackgroundColor(bg_clr);
|
||||
Refresh();
|
||||
};
|
||||
|
||||
};// end of namespace Slic3r::GUI
|
||||
99
src/slic3r/GUI/DeviceTab/wgtDeviceNozzleRackNozzleItem.h
Normal file
99
src/slic3r/GUI/DeviceTab/wgtDeviceNozzleRackNozzleItem.h
Normal file
@@ -0,0 +1,99 @@
|
||||
//**********************************************************/
|
||||
/* File: wgtDeviceNozzleRackNozzleItem.h
|
||||
* Description: One nozzle cell of the H2C hotend rack view.
|
||||
*
|
||||
* This header defines only the single-nozzle-cell widget (and the selection event it emits), which
|
||||
* is the one dependency MultiNozzleSync's HotEndTable needs. The rest of the Device-tab rack panel
|
||||
* (wgtDeviceNozzleRack / ...Area / ...ToolHead / ...Pos) is not provided here.
|
||||
//**********************************************************/
|
||||
|
||||
#pragma once
|
||||
#include "slic3r/GUI/DeviceCore/DevNozzleRack.h"
|
||||
|
||||
#include "slic3r/GUI/Widgets/StaticBox.hpp"
|
||||
#include "slic3r/GUI/Widgets/Label.hpp" // complete type required by the inline SetDisplayIdText below
|
||||
|
||||
#include <wx/panel.h>
|
||||
#include <memory>
|
||||
|
||||
// Previous definitions
|
||||
class ScalableBitmap;
|
||||
namespace Slic3r
|
||||
{
|
||||
struct DevNozzle;
|
||||
class DevNozzleRack;
|
||||
};
|
||||
|
||||
// Events
|
||||
wxDECLARE_EVENT(EVT_NOZZLE_RACK_NOZZLE_ITEM_SELECTED, wxCommandEvent);
|
||||
|
||||
namespace Slic3r::GUI
|
||||
{
|
||||
class wgtDeviceNozzleRackNozzleItem : public StaticBox
|
||||
{
|
||||
public:
|
||||
enum NOZZLE_STATUS
|
||||
{
|
||||
NOZZLE_EMPTY,
|
||||
NOZZLE_NORMAL,
|
||||
NOZZLE_UNKNOWN,
|
||||
NOZZLE_ERROR
|
||||
};
|
||||
|
||||
public:
|
||||
wgtDeviceNozzleRackNozzleItem(wxWindow* parent, int nozzle_id);
|
||||
|
||||
public:
|
||||
void Update(const std::shared_ptr<DevNozzleRack> rack, bool on_rack = true); // on_rack is false means extruder nozzle
|
||||
|
||||
int GetNozzleId() const { return m_nozzle_id; }
|
||||
void SetDisplayIdText(const wxString& text) { m_nozzle_label_id->SetLabel(text);};
|
||||
|
||||
void EnableSelect();;
|
||||
void SetSelected(bool selected);
|
||||
bool IsSelected() const { return m_is_selected; }
|
||||
|
||||
bool IsDisabled() const { return m_is_disabled; }
|
||||
void SetDisable(bool disabled);
|
||||
|
||||
void Rescale();
|
||||
|
||||
private:
|
||||
void CreateGui();
|
||||
|
||||
void SetNozzleStatus(NOZZLE_STATUS status, const wxString& str1, const wxString& str2, const std::string& color);
|
||||
|
||||
void OnBtnNozzleStatus(wxMouseEvent& evt);
|
||||
void OnItemSelected(wxMouseEvent& evt);
|
||||
|
||||
private:
|
||||
std::weak_ptr<DevNozzleRack> m_rack;
|
||||
|
||||
int m_nozzle_id; // internal id, from 0 to 5
|
||||
std::string m_filament_color;
|
||||
NOZZLE_STATUS m_status = NOZZLE_STATUS::NOZZLE_EMPTY;
|
||||
|
||||
// select
|
||||
bool m_is_selected = false;
|
||||
bool m_enable_select = false;
|
||||
ScalableBitmap* m_nozzle_selected_image{ nullptr };
|
||||
wxStaticBitmap* m_nozzle_selected_bitmap{ nullptr };
|
||||
|
||||
// enable or disable
|
||||
bool m_is_disabled = false;
|
||||
|
||||
// Images
|
||||
ScalableBitmap* m_nozzle_normal_image{ nullptr };
|
||||
ScalableBitmap* m_nozzle_empty_image{ nullptr };
|
||||
ScalableBitmap* m_nozzle_unknown_image{ nullptr };
|
||||
ScalableBitmap* m_nozzle_error_image{ nullptr };
|
||||
|
||||
// GUI
|
||||
wxStaticBitmap* m_nozzle_icon{ nullptr };
|
||||
Label* m_nozzle_label_id { nullptr };
|
||||
Label* m_nozzle_label_1{ nullptr };
|
||||
wxStaticBitmap* m_nozzle_status_icon = nullptr;
|
||||
Label* m_nozzle_label_2{ nullptr };
|
||||
};
|
||||
|
||||
};// end of namespace Slic3r::GUI
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user