diff --git a/localization/i18n/OrcaSlicer.pot b/localization/i18n/OrcaSlicer.pot index cb9ab96460..f235c93772 100644 --- a/localization/i18n/OrcaSlicer.pot +++ b/localization/i18n/OrcaSlicer.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-07 16:50-0300\n" +"POT-Creation-Date: 2026-07-12 12:27-0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -187,6 +187,12 @@ msgstr "" msgid "Gap Fill" msgstr "" +msgid "Vertical" +msgstr "" + +msgid "Horizontal" +msgstr "" + #, possible-boost-format msgid "Allows painting only on facets selected by: \"%1%\"" msgstr "" @@ -279,12 +285,6 @@ msgstr "" msgid "Height Range" msgstr "" -msgid "Vertical" -msgstr "" - -msgid "Horizontal" -msgstr "" - msgid "Remove painted color" msgstr "" @@ -5472,15 +5472,6 @@ msgstr "" msgid "Export" msgstr "" -msgid "Sync Presets" -msgstr "" - -msgid "Pull and apply the latest presets from OrcaCloud" -msgstr "" - -msgid "You must be logged in to sync presets from cloud." -msgstr "" - msgid "Quit" msgstr "" @@ -5595,6 +5586,15 @@ msgstr "" msgid "Preset Bundle" msgstr "" +msgid "Sync Presets" +msgstr "" + +msgid "Pull and apply the latest presets from OrcaCloud" +msgstr "" + +msgid "You must be logged in to sync presets from cloud." +msgstr "" + msgid "Syncing presets from cloud…" msgstr "" @@ -9875,11 +9875,7 @@ msgstr "" msgid "Successfully synchronized nozzle and AMS number information." msgstr "" -msgid "Continue to sync filaments" -msgstr "" - -msgctxt "Sync_Nozzle_AMS" -msgid "Cancel" +msgid "Do you want to continue to sync filaments?" msgstr "" msgid "Successfully synchronized filament color from printer." @@ -11118,7 +11114,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 infill 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." @@ -11132,7 +11128,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 infill 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." @@ -11756,6 +11752,42 @@ msgstr "" msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion." msgstr "" +msgid "Top surface expansion" +msgstr "" + +msgid "" +"Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n" +"Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane.Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top.The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection." +msgstr "" + +msgid "Top expansion wall margin" +msgstr "" + +msgid "" +"Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n" +"This can cause contraction marks (such as the hull line) on the outer walls.\n" +"By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark." +msgstr "" + +msgid "Top expansion direction" +msgstr "" + +msgid "" +"Direction in which the top surface expansion grows.\n" +" - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n" +" - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n" +" - Inward and Outward does both." +msgstr "" + +msgid "Inward and Outward" +msgstr "" + +msgid "Inward" +msgstr "" + +msgid "Outward" +msgstr "" + msgid "Bottom surface pattern" msgstr "" @@ -12356,12 +12388,12 @@ msgstr "" msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used." msgstr "" -msgid "Align infill direction to model" +msgid "Align directions to model" msgstr "" msgid "" -"Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" -"When enabled, directions rotate with the model to maintain optimal strength characteristics." +"Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n" +"When enabled, these directions rotate together with the model so the printed features keep their intended orientation relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed." msgstr "" msgid "Insert solid layers" @@ -14302,6 +14334,18 @@ msgstr "" msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." msgstr "" +msgid "Toolchange ordering" +msgstr "" + +msgid "" +"Determines the order of tool changes on each layer.\n" +"- Default: Starts with the last used extruder to minimize tool changes.\n" +"- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool." +msgstr "" + +msgid "Cyclic" +msgstr "" + msgid "Slice gap closing radius" msgstr "" @@ -14705,6 +14749,45 @@ 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 "" + +msgid "" +"Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts (or distinct 3D objects) each get their own.\n" +"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n" +"Affects line and grid patterns and rotation-template infills.\n" +"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected." +msgstr "" + +msgid "Center surface pattern on" +msgstr "" + +msgid "" +"Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, Octagram Spiral) is placed.\n" +" - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n" +" - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; parts detached from the rest each get their own.\n" +" - Each Assembly: uses a single shared center for the whole object or assembly." +msgstr "" + +msgid "Each Surface" +msgstr "" + +msgid "Each Model" +msgstr "" + +msgid "Each Assembly" +msgstr "" + msgid "This is the speed at which traveling is done." msgstr "" diff --git a/localization/i18n/ca/OrcaSlicer_ca.po b/localization/i18n/ca/OrcaSlicer_ca.po index a509c7a89f..aeccdefcc1 100644 --- a/localization/i18n/ca/OrcaSlicer_ca.po +++ b/localization/i18n/ca/OrcaSlicer_ca.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-07 16:46-0300\n" +"POT-Creation-Date: 2026-07-12 12:27-0300\n" "PO-Revision-Date: 2025-03-15 10:55+0100\n" "Last-Translator: \n" "Language-Team: \n" @@ -167,6 +167,12 @@ msgstr "Farcir" msgid "Gap Fill" msgstr "Farcir el buit" +msgid "Vertical" +msgstr "" + +msgid "Horizontal" +msgstr "Horitzontal" + #, boost-format msgid "Allows painting only on facets selected by: \"%1%\"" msgstr "Permet pintar només les facetes seleccionades per: \"%1%\"" @@ -262,12 +268,6 @@ msgstr "" msgid "Height Range" msgstr "Rang d'alçada" -msgid "Vertical" -msgstr "" - -msgid "Horizontal" -msgstr "Horitzontal" - msgid "Remove painted color" msgstr "Elimina el color pintat" @@ -5721,15 +5721,6 @@ msgstr "Exportar la configuració actual a fitxers" msgid "Export" msgstr "Exportar" -msgid "Sync Presets" -msgstr "" - -msgid "Pull and apply the latest presets from OrcaCloud" -msgstr "" - -msgid "You must be logged in to sync presets from cloud." -msgstr "" - msgid "Quit" msgstr "Surt" @@ -5846,6 +5837,15 @@ msgstr "Vista" msgid "Preset Bundle" msgstr "" +msgid "Sync Presets" +msgstr "" + +msgid "Pull and apply the latest presets from OrcaCloud" +msgstr "" + +msgid "You must be logged in to sync presets from cloud." +msgstr "" + msgid "Syncing presets from cloud…" msgstr "" @@ -10346,12 +10346,8 @@ msgstr "Informació del broquet sincronitzada correctament." msgid "Successfully synchronized nozzle and AMS number information." msgstr "Informació del broquet i nombre d'AMS sincronitzats correctament." -msgid "Continue to sync filaments" -msgstr "Continua sincronitzant filaments" - -msgctxt "Sync_Nozzle_AMS" -msgid "Cancel" -msgstr "Cancel·la" +msgid "Do you want to continue to sync filaments?" +msgstr "" msgid "Successfully synchronized filament color from printer." msgstr "Color del filament sincronitzat correctament de la impressora." @@ -11676,7 +11672,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 infill 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." @@ -11690,7 +11686,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 infill 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." @@ -12422,6 +12418,42 @@ msgstr "Densitat de la superfície superior" msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion." msgstr "Densitat de la capa de superfície superior. Un valor del 100% crea una capa superior completament sòlida i llisa. Reduir aquest valor resulta en una superfície superior texturada, segons el patró de superfície superior triat. Un valor del 0% resultarà en la creació de només les parets a la capa superior. Destinat a fins estètics o funcionals, no per solucionar problemes com la sobreextrusió." +msgid "Top surface expansion" +msgstr "" + +msgid "" +"Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n" +"Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane.Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top.The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection." +msgstr "" + +msgid "Top expansion wall margin" +msgstr "" + +msgid "" +"Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n" +"This can cause contraction marks (such as the hull line) on the outer walls.\n" +"By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark." +msgstr "" + +msgid "Top expansion direction" +msgstr "" + +msgid "" +"Direction in which the top surface expansion grows.\n" +" - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n" +" - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n" +" - Inward and Outward does both." +msgstr "" + +msgid "Inward and Outward" +msgstr "" + +msgid "Inward" +msgstr "" + +msgid "Outward" +msgstr "" + msgid "Bottom surface pattern" msgstr "Patró de superfície inferior" @@ -13087,12 +13119,12 @@ msgstr "Densitat de farciment poc dens" msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used." msgstr "Densitat de farciment poc dens, converteix el 100% tu el teu farciment poc dens en farciment sòlid i s'utilitzarà el patró de farciment sòlid intern" -msgid "Align infill direction to model" -msgstr "Alinea la direcció del farciment al model" +msgid "Align directions to model" +msgstr "" msgid "" -"Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" -"When enabled, directions rotate with the model to maintain optimal strength characteristics." +"Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n" +"When enabled, these directions rotate together with the model so the printed features keep their intended orientation relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed." msgstr "" msgid "Insert solid layers" @@ -15187,6 +15219,18 @@ msgstr "Purgar tots els extrusors d'impressió" msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." msgstr "Si està habilitat, tots els extrusors d'impressió seran purgats a la vora frontal del llit d'impressió al començament de la impressió." +msgid "Toolchange ordering" +msgstr "" + +msgid "" +"Determines the order of tool changes on each layer.\n" +"- Default: Starts with the last used extruder to minimize tool changes.\n" +"- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool." +msgstr "" + +msgid "Cyclic" +msgstr "" + msgid "Slice gap closing radius" msgstr "Radi de tancament dels buits en laminar" @@ -15633,6 +15677,45 @@ 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 "" + +msgid "" +"Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts (or distinct 3D objects) each get their own.\n" +"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n" +"Affects line and grid patterns and rotation-template infills.\n" +"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected." +msgstr "" + +msgid "Center surface pattern on" +msgstr "" + +msgid "" +"Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, Octagram Spiral) is placed.\n" +" - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n" +" - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; parts detached from the rest each get their own.\n" +" - Each Assembly: uses a single shared center for the whole object or assembly." +msgstr "" + +msgid "Each Surface" +msgstr "" + +msgid "Each Model" +msgstr "" + +msgid "Each Assembly" +msgstr "" + # TODO: Review, changed by lang refactor. PR 14254 msgid "This is the speed at which traveling is done." msgstr "Velocitat de desplaçament més ràpida i sense extrusió" @@ -19668,6 +19751,16 @@ 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 "Continue to sync filaments" +#~ msgstr "Continua sincronitzant filaments" + +#~ msgctxt "Sync_Nozzle_AMS" +#~ msgid "Cancel" +#~ msgstr "Cancel·la" + +#~ msgid "Align infill direction to model" +#~ msgstr "Alinea la direcció del farciment al model" + #~ msgid "Print" #~ msgstr "Imprimir" diff --git a/localization/i18n/cs/OrcaSlicer_cs.po b/localization/i18n/cs/OrcaSlicer_cs.po index ec61a2c00d..8af562a28f 100644 --- a/localization/i18n/cs/OrcaSlicer_cs.po +++ b/localization/i18n/cs/OrcaSlicer_cs.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-07 16:46-0300\n" +"POT-Creation-Date: 2026-07-12 12:27-0300\n" "PO-Revision-Date: \n" "Last-Translator: Jakub Hencl\n" "Language-Team: \n" @@ -162,6 +162,12 @@ msgstr "Výplň" msgid "Gap Fill" msgstr "Vyplnění mezery" +msgid "Vertical" +msgstr "Vertikální" + +msgid "Horizontal" +msgstr "Vodorovně" + #, boost-format msgid "Allows painting only on facets selected by: \"%1%\"" msgstr "Umožňuje malování pouze na plochách vybraných podle: \"%1%\"" @@ -257,12 +263,6 @@ msgstr "Trojúhelník" msgid "Height Range" msgstr "Rozsah výšky" -msgid "Vertical" -msgstr "Vertikální" - -msgid "Horizontal" -msgstr "Vodorovně" - msgid "Remove painted color" msgstr "Odstranit nanesenou barvu" @@ -5717,15 +5717,6 @@ msgstr "Exportovat aktuální konfiguraci do souborů" msgid "Export" msgstr "" -msgid "Sync Presets" -msgstr "" - -msgid "Pull and apply the latest presets from OrcaCloud" -msgstr "" - -msgid "You must be logged in to sync presets from cloud." -msgstr "" - msgid "Quit" msgstr "Ukončit" @@ -5842,6 +5833,15 @@ msgstr "Zobrazit" msgid "Preset Bundle" msgstr "Balík předvoleb" +msgid "Sync Presets" +msgstr "" + +msgid "Pull and apply the latest presets from OrcaCloud" +msgstr "" + +msgid "You must be logged in to sync presets from cloud." +msgstr "" + msgid "Syncing presets from cloud…" msgstr "" @@ -10351,11 +10351,7 @@ msgstr "" msgid "Successfully synchronized nozzle and AMS number information." msgstr "" -msgid "Continue to sync filaments" -msgstr "" - -msgctxt "Sync_Nozzle_AMS" -msgid "Cancel" +msgid "Do you want to continue to sync filaments?" msgstr "" msgid "Successfully synchronized filament color from printer." @@ -11682,7 +11678,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 infill 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." @@ -11696,7 +11692,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 infill 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." @@ -12426,6 +12422,42 @@ msgstr "Hustota horního povrchu" msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion." msgstr "Hustota horní povrchové vrstvy. Hodnota 100 % vytvoří zcela plnou, hladkou horní vrstvu. Snížením této hodnoty vznikne texturovaný horní povrch podle zvoleného vzoru horního povrchu. Hodnota 0 % znamená, že na horní vrstvě budou vytvořeny pouze stěny. Určeno pro estetické nebo funkční účely, nikoli k řešení problémů jako je nadměrná extruze." +msgid "Top surface expansion" +msgstr "" + +msgid "" +"Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n" +"Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane.Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top.The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection." +msgstr "" + +msgid "Top expansion wall margin" +msgstr "" + +msgid "" +"Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n" +"This can cause contraction marks (such as the hull line) on the outer walls.\n" +"By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark." +msgstr "" + +msgid "Top expansion direction" +msgstr "" + +msgid "" +"Direction in which the top surface expansion grows.\n" +" - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n" +" - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n" +" - Inward and Outward does both." +msgstr "" + +msgid "Inward and Outward" +msgstr "" + +msgid "Inward" +msgstr "" + +msgid "Outward" +msgstr "" + msgid "Bottom surface pattern" msgstr "Vzor spodního povrchu" @@ -13093,12 +13125,12 @@ msgstr "Hustota řídké výplně" msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used." msgstr "Hustota vnitřní řídké výplně, 100 % přemění veškerou řídkou výplň na plnou a použije se vzor vnitřní plné výplně." -msgid "Align infill direction to model" -msgstr "Zarovnat směr výplně podle modelu" +msgid "Align directions to model" +msgstr "" msgid "" -"Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" -"When enabled, directions rotate with the model to maintain optimal strength characteristics." +"Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n" +"When enabled, these directions rotate together with the model so the printed features keep their intended orientation relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed." msgstr "" msgid "Insert solid layers" @@ -15236,6 +15268,18 @@ msgstr "Připravit všechny tiskové extrudery" msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." msgstr "Pokud je povoleno, všechny tiskové extrudery budou na začátku tisku připraveny na předním okraji tiskové podložky." +msgid "Toolchange ordering" +msgstr "" + +msgid "" +"Determines the order of tool changes on each layer.\n" +"- Default: Starts with the last used extruder to minimize tool changes.\n" +"- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool." +msgstr "" + +msgid "Cyclic" +msgstr "" + msgid "Slice gap closing radius" msgstr "Poloměr uzavření mezery řezu" @@ -15675,6 +15719,45 @@ 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 "" + +msgid "" +"Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts (or distinct 3D objects) each get their own.\n" +"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n" +"Affects line and grid patterns and rotation-template infills.\n" +"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected." +msgstr "" + +msgid "Center surface pattern on" +msgstr "" + +msgid "" +"Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, Octagram Spiral) is placed.\n" +" - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n" +" - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; parts detached from the rest each get their own.\n" +" - Each Assembly: uses a single shared center for the whole object or assembly." +msgstr "" + +msgid "Each Surface" +msgstr "" + +msgid "Each Model" +msgstr "" + +msgid "Each Assembly" +msgstr "" + # TODO: Review, changed by lang refactor. PR 14254 msgid "This is the speed at which traveling is done." msgstr "Rychlost přejezdu bez extruze." @@ -19702,6 +19785,9 @@ 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 "Align infill direction to model" +#~ msgstr "Zarovnat směr výplně podle modelu" + #~ msgid "Print" #~ msgstr "Tisk" diff --git a/localization/i18n/de/OrcaSlicer_de.po b/localization/i18n/de/OrcaSlicer_de.po index 55a9f38ea6..d8f3366d6d 100644 --- a/localization/i18n/de/OrcaSlicer_de.po +++ b/localization/i18n/de/OrcaSlicer_de.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-07 16:46-0300\n" +"POT-Creation-Date: 2026-07-12 12:27-0300\n" "PO-Revision-Date: \n" "Last-Translator: Heiko Liebscher \n" "Language-Team: \n" @@ -162,6 +162,12 @@ msgstr "Ausfüllen" msgid "Gap Fill" msgstr "Lücken füllen" +msgid "Vertical" +msgstr "Vertikal" + +msgid "Horizontal" +msgstr "Horizontal" + #, boost-format msgid "Allows painting only on facets selected by: \"%1%\"" msgstr "Erlaubt das malen nur auf Seiten, welche ausgewählt wurden durch: \"%1%\"" @@ -257,12 +263,6 @@ msgstr "Dreieck" msgid "Height Range" msgstr "Höhenbereich" -msgid "Vertical" -msgstr "Vertikal" - -msgid "Horizontal" -msgstr "Horizontal" - msgid "Remove painted color" msgstr "Gemalte Farbe entfernen" @@ -5719,15 +5719,6 @@ msgstr "Aktuelle Konfiguration in Dateien exportieren" msgid "Export" msgstr "Exportieren" -msgid "Sync Presets" -msgstr "Presets synchronisieren" - -msgid "Pull and apply the latest presets from OrcaCloud" -msgstr "Die neuesten Presets von OrcaCloud abrufen und anwenden" - -msgid "You must be logged in to sync presets from cloud." -msgstr "Sie müssen angemeldet sein, um Presets aus der Cloud zu synchronisieren." - msgid "Quit" msgstr "Beenden" @@ -5844,6 +5835,15 @@ msgstr "Ansicht" msgid "Preset Bundle" msgstr "Vorlagen-Bundle" +msgid "Sync Presets" +msgstr "Presets synchronisieren" + +msgid "Pull and apply the latest presets from OrcaCloud" +msgstr "Die neuesten Presets von OrcaCloud abrufen und anwenden" + +msgid "You must be logged in to sync presets from cloud." +msgstr "Sie müssen angemeldet sein, um Presets aus der Cloud zu synchronisieren." + msgid "Syncing presets from cloud…" msgstr "Synchronisiere Presets aus der Cloud…" @@ -10380,12 +10380,8 @@ msgstr "Düseninformationen erfolgreich synchronisiert." msgid "Successfully synchronized nozzle and AMS number information." msgstr "Düsen und AMS Nummer erfolgreich synchronisiert." -msgid "Continue to sync filaments" -msgstr "Weiter mit dem Synchronisieren der Filamente" - -msgctxt "Sync_Nozzle_AMS" -msgid "Cancel" -msgstr "Abbrechen" +msgid "Do you want to continue to sync filaments?" +msgstr "" msgid "Successfully synchronized filament color from printer." msgstr "Farbe des Filaments erfolgreich vom Drucker synchronisiert." @@ -11715,19 +11711,11 @@ 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 infill 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." msgstr "" -"Externe Brückenwinkelüberschreibung.\n" -"Wenn auf Null gelassen, wird der Brückenwinkel automatisch für jede spezifische Brücke berechnet.\n" -"Ansonsten wird der angegebene Winkel wie folgt verwendet:\n" -" - Die absoluten Koordinaten\n" -" - Die absoluten Koordinaten + Modellrotation: Wenn 'Füllrichtung an Modell ausrichten' aktiviert ist\n" -" - Der optimale automatische Winkel + dieser Wert: Wenn 'Relativer Brückenwinkel' aktiviert ist\n" -"\n" -"Verwenden Sie 180° für einen absoluten Winkel von Null." msgid "Internal bridge infill direction" msgstr "Interne Brücken Füllrichtung" @@ -11737,19 +11725,11 @@ 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 infill 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." msgstr "" -"Interne Brückenwinkelüberschreibung.\n" -"Wenn auf Null gelassen, wird der Brückenwinkel automatisch für jede spezifische Brücke berechnet.\n" -"Ansonsten wird der angegebene Winkel wie folgt verwendet:\n" -" - Die absoluten Koordinaten\n" -" - Die absoluten Koordinaten + Modellrotation: Wenn 'Füllrichtung an Modell ausrichten' aktiviert ist\n" -" - Der optimale automatische Winkel + dieser Wert: Wenn 'Relativer Brückenwinkel' aktiviert ist\n" -"\n" -"Verwenden Sie 180° für einen absoluten Winkel von Null." msgid "Relative bridge angle" msgstr "Relativer Brückenwinkel" @@ -12532,6 +12512,42 @@ msgstr "Dichte der oberen Oberfläche" msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion." msgstr "Dichte der oberen Oberflächenschicht. Ein Wert von 100 % erzeugt eine vollständig massive, glatte obere Schicht. Eine Reduzierung dieses Wertes führt zu einer strukturierten oberen Oberfläche, abhängig vom gewählten Oberflächenmuster. Ein Wert von 0 % führt dazu, dass nur die Wände der oberen Schicht erstellt werden. Diese Einstellung dient ästhetischen oder funktionalen Zwecken und nicht zur Behebung von Problemen wie Überextrusion." +msgid "Top surface expansion" +msgstr "" + +msgid "" +"Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n" +"Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane.Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top.The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection." +msgstr "" + +msgid "Top expansion wall margin" +msgstr "" + +msgid "" +"Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n" +"This can cause contraction marks (such as the hull line) on the outer walls.\n" +"By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark." +msgstr "" + +msgid "Top expansion direction" +msgstr "" + +msgid "" +"Direction in which the top surface expansion grows.\n" +" - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n" +" - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n" +" - Inward and Outward does both." +msgstr "" + +msgid "Inward and Outward" +msgstr "" + +msgid "Inward" +msgstr "" + +msgid "Outward" +msgstr "" + msgid "Bottom surface pattern" msgstr "Muster der unteren Fläche" @@ -13197,15 +13213,13 @@ msgstr "Fülldichte" msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used." msgstr "Dichte der internen Füllung, 100% verwandelt alle interne Füllung in massive Füllung und das interne massive Füllmuster wird verwendet." -msgid "Align infill direction to model" -msgstr "Füllrichtung am Modell ausrichten" +msgid "Align directions to model" +msgstr "" msgid "" -"Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" -"When enabled, directions rotate with the model to maintain optimal strength characteristics." +"Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n" +"When enabled, these directions rotate together with the model so the printed features keep their intended orientation relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed." msgstr "" -"Richtet die Richtungen von Füllung, Brücke, Glättung und Oberflächenfüllung so aus, dass sie der Orientierung des Modells auf der Bauplatte folgen.\n" -"Wenn aktiviert, drehen sich die Richtungen mit dem Modell, um optimale Festigkeitseigenschaften zu erhalten." msgid "Insert solid layers" msgstr "Massive Schichten einfügen" @@ -15355,6 +15369,18 @@ msgstr "Reinige alle Druckextruder" msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." msgstr "Wenn aktiviert, werden alle Druckextruder am vorderen Rand des Druckbetts am Anfang des Drucks gereinigt." +msgid "Toolchange ordering" +msgstr "" + +msgid "" +"Determines the order of tool changes on each layer.\n" +"- Default: Starts with the last used extruder to minimize tool changes.\n" +"- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool." +msgstr "" + +msgid "Cyclic" +msgstr "" + msgid "Slice gap closing radius" msgstr "Slice-Lückenschlussradius" @@ -15802,6 +15828,45 @@ 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 "" + +msgid "" +"Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts (or distinct 3D objects) each get their own.\n" +"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n" +"Affects line and grid patterns and rotation-template infills.\n" +"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected." +msgstr "" + +msgid "Center surface pattern on" +msgstr "" + +msgid "" +"Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, Octagram Spiral) is placed.\n" +" - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n" +" - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; parts detached from the rest each get their own.\n" +" - Each Assembly: uses a single shared center for the whole object or assembly." +msgstr "" + +msgid "Each Surface" +msgstr "" + +msgid "Each Model" +msgstr "" + +msgid "Each Assembly" +msgstr "" + # TODO: Review, changed by lang refactor. PR 14254 msgid "This is the speed at which traveling is done." msgstr "Eilgeschwindigkeit, wenn nicht extrudiert wird." @@ -19843,6 +19908,62 @@ 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 "Continue to sync filaments" +#~ msgstr "Weiter mit dem Synchronisieren der Filamente" + +#~ msgctxt "Sync_Nozzle_AMS" +#~ msgid "Cancel" +#~ msgstr "Abbrechen" + +#, no-c-format, no-boost-format +#~ msgid "" +#~ "External Bridging angle override.\n" +#~ "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 infill direction 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." +#~ msgstr "" +#~ "Externe Brückenwinkelüberschreibung.\n" +#~ "Wenn auf Null gelassen, wird der Brückenwinkel automatisch für jede spezifische Brücke berechnet.\n" +#~ "Ansonsten wird der angegebene Winkel wie folgt verwendet:\n" +#~ " - Die absoluten Koordinaten\n" +#~ " - Die absoluten Koordinaten + Modellrotation: Wenn 'Füllrichtung an Modell ausrichten' aktiviert ist\n" +#~ " - Der optimale automatische Winkel + dieser Wert: Wenn 'Relativer Brückenwinkel' aktiviert ist\n" +#~ "\n" +#~ "Verwenden Sie 180° für einen absoluten Winkel von Null." + +#~ msgid "" +#~ "Internal Bridging angle override.\n" +#~ "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 infill direction 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." +#~ msgstr "" +#~ "Interne Brückenwinkelüberschreibung.\n" +#~ "Wenn auf Null gelassen, wird der Brückenwinkel automatisch für jede spezifische Brücke berechnet.\n" +#~ "Ansonsten wird der angegebene Winkel wie folgt verwendet:\n" +#~ " - Die absoluten Koordinaten\n" +#~ " - Die absoluten Koordinaten + Modellrotation: Wenn 'Füllrichtung an Modell ausrichten' aktiviert ist\n" +#~ " - Der optimale automatische Winkel + dieser Wert: Wenn 'Relativer Brückenwinkel' aktiviert ist\n" +#~ "\n" +#~ "Verwenden Sie 180° für einen absoluten Winkel von Null." + +#~ msgid "Align infill direction to model" +#~ msgstr "Füllrichtung am Modell ausrichten" + +#~ msgid "" +#~ "Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" +#~ "When enabled, directions rotate with the model to maintain optimal strength characteristics." +#~ msgstr "" +#~ "Richtet die Richtungen von Füllung, Brücke, Glättung und Oberflächenfüllung so aus, dass sie der Orientierung des Modells auf der Bauplatte folgen.\n" +#~ "Wenn aktiviert, drehen sich die Richtungen mit dem Modell, um optimale Festigkeitseigenschaften zu erhalten." + #~ msgid "Print" #~ msgstr "aktuelle Platte drucken" diff --git a/localization/i18n/en/OrcaSlicer_en.po b/localization/i18n/en/OrcaSlicer_en.po index b314b99808..53412a51fe 100644 --- a/localization/i18n/en/OrcaSlicer_en.po +++ b/localization/i18n/en/OrcaSlicer_en.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-07 16:46-0300\n" +"POT-Creation-Date: 2026-07-12 12:27-0300\n" "PO-Revision-Date: 2026-06-17 15:44-0300\n" "Last-Translator: Alexandre Folle de Menezes\n" "Language-Team: \n" @@ -159,6 +159,12 @@ msgstr "" msgid "Gap Fill" msgstr "" +msgid "Vertical" +msgstr "" + +msgid "Horizontal" +msgstr "" + #, boost-format msgid "Allows painting only on facets selected by: \"%1%\"" msgstr "" @@ -251,12 +257,6 @@ msgstr "" msgid "Height Range" msgstr "" -msgid "Vertical" -msgstr "" - -msgid "Horizontal" -msgstr "" - msgid "Remove painted color" msgstr "" @@ -5444,15 +5444,6 @@ msgstr "" msgid "Export" msgstr "" -msgid "Sync Presets" -msgstr "" - -msgid "Pull and apply the latest presets from OrcaCloud" -msgstr "" - -msgid "You must be logged in to sync presets from cloud." -msgstr "" - msgid "Quit" msgstr "" @@ -5567,6 +5558,15 @@ msgstr "" msgid "Preset Bundle" msgstr "" +msgid "Sync Presets" +msgstr "" + +msgid "Pull and apply the latest presets from OrcaCloud" +msgstr "" + +msgid "You must be logged in to sync presets from cloud." +msgstr "" + msgid "Syncing presets from cloud…" msgstr "" @@ -9847,11 +9847,7 @@ msgstr "" msgid "Successfully synchronized nozzle and AMS number information." msgstr "" -msgid "Continue to sync filaments" -msgstr "" - -msgctxt "Sync_Nozzle_AMS" -msgid "Cancel" +msgid "Do you want to continue to sync filaments?" msgstr "" msgid "Successfully synchronized filament color from printer." @@ -11087,7 +11083,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 infill 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." @@ -11101,7 +11097,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 infill 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." @@ -11725,6 +11721,42 @@ msgstr "" msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion." msgstr "" +msgid "Top surface expansion" +msgstr "" + +msgid "" +"Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n" +"Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane.Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top.The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection." +msgstr "" + +msgid "Top expansion wall margin" +msgstr "" + +msgid "" +"Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n" +"This can cause contraction marks (such as the hull line) on the outer walls.\n" +"By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark." +msgstr "" + +msgid "Top expansion direction" +msgstr "" + +msgid "" +"Direction in which the top surface expansion grows.\n" +" - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n" +" - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n" +" - Inward and Outward does both." +msgstr "" + +msgid "Inward and Outward" +msgstr "" + +msgid "Inward" +msgstr "" + +msgid "Outward" +msgstr "" + msgid "Bottom surface pattern" msgstr "" @@ -12325,12 +12357,12 @@ msgstr "" msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used." msgstr "" -msgid "Align infill direction to model" +msgid "Align directions to model" msgstr "" msgid "" -"Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" -"When enabled, directions rotate with the model to maintain optimal strength characteristics." +"Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n" +"When enabled, these directions rotate together with the model so the printed features keep their intended orientation relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed." msgstr "" msgid "Insert solid layers" @@ -14271,6 +14303,18 @@ msgstr "" msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." msgstr "" +msgid "Toolchange ordering" +msgstr "" + +msgid "" +"Determines the order of tool changes on each layer.\n" +"- Default: Starts with the last used extruder to minimize tool changes.\n" +"- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool." +msgstr "" + +msgid "Cyclic" +msgstr "" + msgid "Slice gap closing radius" msgstr "" @@ -14674,6 +14718,45 @@ 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 "" + +msgid "" +"Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts (or distinct 3D objects) each get their own.\n" +"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n" +"Affects line and grid patterns and rotation-template infills.\n" +"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected." +msgstr "" + +msgid "Center surface pattern on" +msgstr "" + +msgid "" +"Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, Octagram Spiral) is placed.\n" +" - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n" +" - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; parts detached from the rest each get their own.\n" +" - Each Assembly: uses a single shared center for the whole object or assembly." +msgstr "" + +msgid "Each Surface" +msgstr "" + +msgid "Each Model" +msgstr "" + +msgid "Each Assembly" +msgstr "" + msgid "This is the speed at which traveling is done." msgstr "" diff --git a/localization/i18n/es/OrcaSlicer_es.po b/localization/i18n/es/OrcaSlicer_es.po index 0c2854113c..c404ce19a7 100644 --- a/localization/i18n/es/OrcaSlicer_es.po +++ b/localization/i18n/es/OrcaSlicer_es.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-07 16:46-0300\n" +"POT-Creation-Date: 2026-07-12 12:27-0300\n" "PO-Revision-Date: \n" "Last-Translator: Ian A. Bassi <>\n" "Language-Team: \n" @@ -159,6 +159,12 @@ msgstr "Llenar" msgid "Gap Fill" msgstr "Rellenar huecos" +msgid "Vertical" +msgstr "Vertical" + +msgid "Horizontal" +msgstr "Horizontal" + #, boost-format msgid "Allows painting only on facets selected by: \"%1%\"" msgstr "Permite pintar solo las facetas seleccionadas por: \"%1%\"" @@ -251,12 +257,6 @@ msgstr "Triángulo" msgid "Height Range" msgstr "Rango de altura" -msgid "Vertical" -msgstr "Vertical" - -msgid "Horizontal" -msgstr "Horizontal" - msgid "Remove painted color" msgstr "Eliminar color pintado" @@ -5607,15 +5607,6 @@ msgstr "Exportar configuración actual a archivos" msgid "Export" msgstr "Exportar" -msgid "Sync Presets" -msgstr "Sincronizar perfiles" - -msgid "Pull and apply the latest presets from OrcaCloud" -msgstr "Descarga y aplica los últimos ajustes preestablecidos de OrcaCloud" - -msgid "You must be logged in to sync presets from cloud." -msgstr "Debes haber iniciado sesión para sincronizar los ajustes preestablecidos desde la nube." - msgid "Quit" msgstr "Salir del programa" @@ -5730,6 +5721,15 @@ msgstr "Vista" msgid "Preset Bundle" msgstr "Paquete de perfiles" +msgid "Sync Presets" +msgstr "Sincronizar perfiles" + +msgid "Pull and apply the latest presets from OrcaCloud" +msgstr "Descarga y aplica los últimos ajustes preestablecidos de OrcaCloud" + +msgid "You must be logged in to sync presets from cloud." +msgstr "Debes haber iniciado sesión para sincronizar los ajustes preestablecidos desde la nube." + msgid "Syncing presets from cloud…" msgstr "Sincronizando perfiles desde la nube…" @@ -10191,12 +10191,8 @@ msgstr "Información de boquilla sincronizada con éxito." msgid "Successfully synchronized nozzle and AMS number information." msgstr "Información de boquilla y número AMS sincronizada con éxito." -msgid "Continue to sync filaments" -msgstr "Continuar sincronizando filamentos" - -msgctxt "Sync_Nozzle_AMS" -msgid "Cancel" -msgstr "Cancelar" +msgid "Do you want to continue to sync filaments?" +msgstr "" msgid "Successfully synchronized filament color from printer." msgstr "Color de filamento sincronizado desde la impresora con éxito." @@ -11464,19 +11460,11 @@ 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 infill 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." msgstr "" -"Anulación del ángulo de puente externo.\n" -"Si se deja en cero, el ángulo de puente se calculará automáticamente para cada puente concreto.\n" -"De lo contrario, se utilizará el ángulo indicado según:\n" -" - Las coordenadas absolutas\n" -" - Las coordenadas absolutas + rotación del modelo: si está activada la opción «Alinear la dirección de relleno al modelo»\n" -" - El ángulo automático óptimo + este valor: si está activada la opción «Ángulo de puente relativo»\n" -"\n" -"Utiliza 180° para un ángulo absoluto de cero." msgid "Internal bridge infill direction" msgstr "Dirección de relleno de puentes internos" @@ -11486,19 +11474,11 @@ 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 infill 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." msgstr "" -"Anulación del ángulo de puente interno.\n" -"Si se deja en cero, el ángulo de puente se calculará automáticamente para cada puente concreto.\n" -"De lo contrario, se utilizará el ángulo indicado según:\n" -" - Las coordenadas absolutas\n" -" - Las coordenadas absolutas + rotación del modelo: si está activada la opción «Alinear la dirección de relleno al modelo»\n" -" - El ángulo automático óptimo + este valor: si está activada la opción «Ángulo de puente relativo»\n" -"\n" -"Utiliza 180° para un ángulo absoluto de cero." msgid "Relative bridge angle" msgstr "Ángulo de puente relativo" @@ -12271,6 +12251,42 @@ msgstr "Densidad de la superficie superior" msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion." msgstr "Densidad de la capa superficial superior. Un valor de 100% crea una capa superior totalmente sólida y lisa. Reducir este valor produce una superficie superior texturada, según el patrón elegido. Un valor de 0% provocará que sólo se creen las paredes en la capa superior. Destinado a fines estéticos o funcionales, no para corregir problemas como la sobreextrusión." +msgid "Top surface expansion" +msgstr "" + +msgid "" +"Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n" +"Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane.Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top.The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection." +msgstr "" + +msgid "Top expansion wall margin" +msgstr "" + +msgid "" +"Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n" +"This can cause contraction marks (such as the hull line) on the outer walls.\n" +"By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark." +msgstr "" + +msgid "Top expansion direction" +msgstr "" + +msgid "" +"Direction in which the top surface expansion grows.\n" +" - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n" +" - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n" +" - Inward and Outward does both." +msgstr "" + +msgid "Inward and Outward" +msgstr "" + +msgid "Inward" +msgstr "" + +msgid "Outward" +msgstr "" + msgid "Bottom surface pattern" msgstr "Patrón de relleno de cubierta inferior" @@ -12935,15 +12951,13 @@ msgstr "Densidad de relleno de baja densidad" msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used." msgstr "Densidad del relleno de baja densidad interno, el 100% convierte el relleno de baja densidad en relleno sólido y se utilizará el patrón de relleno sólido interno." -msgid "Align infill direction to model" -msgstr "Alinear la dirección de relleno al modelo" +msgid "Align directions to model" +msgstr "" msgid "" -"Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" -"When enabled, directions rotate with the model to maintain optimal strength characteristics." +"Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n" +"When enabled, these directions rotate together with the model so the printed features keep their intended orientation relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed." msgstr "" -"Alinea las direcciones de relleno, puente, alisado y relleno superficial para que sigan la orientación del modelo sobre la placa de impresión.\n" -"Cuando está activada, las direcciones giran junto con el modelo para mantener sus características de resistencia óptimas." msgid "Insert solid layers" msgstr "Insertar capas sólidas" @@ -15033,6 +15047,18 @@ msgstr "Purgar todos los extrusores" msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." msgstr "Sí se activa, todos los extrusores serán purgados en el frontal de la cama de impresión al inicio de la impresión." +msgid "Toolchange ordering" +msgstr "" + +msgid "" +"Determines the order of tool changes on each layer.\n" +"- Default: Starts with the last used extruder to minimize tool changes.\n" +"- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool." +msgstr "" + +msgid "Cyclic" +msgstr "" + msgid "Slice gap closing radius" msgstr "Radio de cierre de laminado" @@ -15469,6 +15495,45 @@ 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 "" + +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 "" + +msgid "" +"Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts (or distinct 3D objects) each get their own.\n" +"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n" +"Affects line and grid patterns and rotation-template infills.\n" +"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected." +msgstr "" + +msgid "Center surface pattern on" +msgstr "" + +msgid "" +"Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, Octagram Spiral) is placed.\n" +" - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n" +" - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; parts detached from the rest each get their own.\n" +" - Each Assembly: uses a single shared center for the whole object or assembly." +msgstr "" + +msgid "Each Surface" +msgstr "" + +msgid "Each Model" +msgstr "" + +msgid "Each Assembly" +msgstr "" + msgid "This is the speed at which traveling is done." msgstr "Velocidad de desplazamiento más rápida y sin extrusión." @@ -19450,6 +19515,62 @@ 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 "Continue to sync filaments" +#~ msgstr "Continuar sincronizando filamentos" + +#~ msgctxt "Sync_Nozzle_AMS" +#~ msgid "Cancel" +#~ msgstr "Cancelar" + +#, no-c-format, no-boost-format +#~ msgid "" +#~ "External Bridging angle override.\n" +#~ "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 infill direction 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." +#~ msgstr "" +#~ "Anulación del ángulo de puente externo.\n" +#~ "Si se deja en cero, el ángulo de puente se calculará automáticamente para cada puente concreto.\n" +#~ "De lo contrario, se utilizará el ángulo indicado según:\n" +#~ " - Las coordenadas absolutas\n" +#~ " - Las coordenadas absolutas + rotación del modelo: si está activada la opción «Alinear la dirección de relleno al modelo»\n" +#~ " - El ángulo automático óptimo + este valor: si está activada la opción «Ángulo de puente relativo»\n" +#~ "\n" +#~ "Utiliza 180° para un ángulo absoluto de cero." + +#~ msgid "" +#~ "Internal Bridging angle override.\n" +#~ "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 infill direction 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." +#~ msgstr "" +#~ "Anulación del ángulo de puente interno.\n" +#~ "Si se deja en cero, el ángulo de puente se calculará automáticamente para cada puente concreto.\n" +#~ "De lo contrario, se utilizará el ángulo indicado según:\n" +#~ " - Las coordenadas absolutas\n" +#~ " - Las coordenadas absolutas + rotación del modelo: si está activada la opción «Alinear la dirección de relleno al modelo»\n" +#~ " - El ángulo automático óptimo + este valor: si está activada la opción «Ángulo de puente relativo»\n" +#~ "\n" +#~ "Utiliza 180° para un ángulo absoluto de cero." + +#~ msgid "Align infill direction to model" +#~ msgstr "Alinear la dirección de relleno al modelo" + +#~ msgid "" +#~ "Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" +#~ "When enabled, directions rotate with the model to maintain optimal strength characteristics." +#~ msgstr "" +#~ "Alinea las direcciones de relleno, puente, alisado y relleno superficial para que sigan la orientación del modelo sobre la placa de impresión.\n" +#~ "Cuando está activada, las direcciones giran junto con el modelo para mantener sus características de resistencia óptimas." + #~ msgid "Print" #~ msgstr "Imprimir" diff --git a/localization/i18n/fr/OrcaSlicer_fr.po b/localization/i18n/fr/OrcaSlicer_fr.po index 5cb37cf38f..f0ca6fdb73 100644 --- a/localization/i18n/fr/OrcaSlicer_fr.po +++ b/localization/i18n/fr/OrcaSlicer_fr.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-07 16:46-0300\n" +"POT-Creation-Date: 2026-07-12 12:27-0300\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: Guislain Cyril, Thomas Lété\n" @@ -162,6 +162,12 @@ msgstr "Remplir" msgid "Gap Fill" msgstr "Remplissage des espaces" +msgid "Vertical" +msgstr "Vertical" + +msgid "Horizontal" +msgstr "Horizontal" + #, boost-format msgid "Allows painting only on facets selected by: \"%1%\"" msgstr "Permet de peindre uniquement sur les facettes sélectionnées par : \"%1%\"" @@ -254,12 +260,6 @@ msgstr "Triangle" msgid "Height Range" msgstr "Plage de hauteur" -msgid "Vertical" -msgstr "Vertical" - -msgid "Horizontal" -msgstr "Horizontal" - msgid "Remove painted color" msgstr "Supprimer la couleur peinte" @@ -5593,15 +5593,6 @@ msgstr "Exporter la configuration actuelle vers des fichiers" msgid "Export" msgstr "Exporter" -msgid "Sync Presets" -msgstr "Synchroniser les préréglages" - -msgid "Pull and apply the latest presets from OrcaCloud" -msgstr "Récupérer et appliquer les derniers préréglages depuis OrcaCloud" - -msgid "You must be logged in to sync presets from cloud." -msgstr "Vous devez être connecté pour synchroniser les préréglages depuis le cloud." - msgid "Quit" msgstr "Quitter" @@ -5716,6 +5707,15 @@ msgstr "Affichage" msgid "Preset Bundle" msgstr "Paquet de préréglages" +msgid "Sync Presets" +msgstr "Synchroniser les préréglages" + +msgid "Pull and apply the latest presets from OrcaCloud" +msgstr "Récupérer et appliquer les derniers préréglages depuis OrcaCloud" + +msgid "You must be logged in to sync presets from cloud." +msgstr "Vous devez être connecté pour synchroniser les préréglages depuis le cloud." + msgid "Syncing presets from cloud…" msgstr "Synchronisation des préréglages depuis le cloud…" @@ -10166,12 +10166,8 @@ msgstr "Informations de buse synchronisées avec succès." msgid "Successfully synchronized nozzle and AMS number information." msgstr "Informations de buse et de nombre d'AMS synchronisées avec succès." -msgid "Continue to sync filaments" -msgstr "Continuer la synchronisation des filaments" - -msgctxt "Sync_Nozzle_AMS" -msgid "Cancel" -msgstr "Annuler" +msgid "Do you want to continue to sync filaments?" +msgstr "" msgid "Successfully synchronized filament color from printer." msgstr "Couleur de filament synchronisée avec succès depuis l'imprimante." @@ -11448,19 +11444,11 @@ 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 infill 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." msgstr "" -"Remplacement de l’angle des ponts externes.\n" -"Si laissé à zéro, l’angle des ponts est calculé automatiquement pour chaque pont.\n" -"Sinon, l’angle fourni est utilisé selon :\n" -" - les coordonnées absolues\n" -" - les coordonnées absolues + la rotation du modèle : si « Aligner la direction du remplissage sur le modèle » est activé\n" -" - l’angle automatique optimal + cette valeur : si « Angle de pont relatif » est activé\n" -"\n" -"Utilisez 180° pour un angle absolu nul." msgid "Internal bridge infill direction" msgstr "Direction du remplissage du pont interne" @@ -11470,19 +11458,11 @@ 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 infill 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." msgstr "" -"Remplacement de l’angle des ponts internes.\n" -"Si laissé à zéro, l’angle des ponts est calculé automatiquement pour chaque pont.\n" -"Sinon, l’angle fourni est utilisé selon :\n" -" - les coordonnées absolues\n" -" - les coordonnées absolues + la rotation du modèle : si « Aligner la direction du remplissage sur le modèle » est activé\n" -" - l’angle automatique optimal + cette valeur : si « Angle de pont relatif » est activé\n" -"\n" -"Utilisez 180° pour un angle absolu nul." msgid "Relative bridge angle" msgstr "Angle de pont relatif" @@ -12252,6 +12232,42 @@ msgstr "Densité de la surface supérieure" msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion." msgstr "Densité de la couche de surface supérieure. Une valeur de 100 % crée une couche supérieure entièrement solide et lisse. Réduire cette valeur donne une surface supérieure texturée, selon le motif de surface supérieure choisi. Une valeur de 0 % ne créera que les parois sur la couche supérieure. Destiné à des fins esthétiques ou fonctionnelles, pas pour corriger des problèmes comme la surextrusion." +msgid "Top surface expansion" +msgstr "" + +msgid "" +"Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n" +"Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane.Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top.The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection." +msgstr "" + +msgid "Top expansion wall margin" +msgstr "" + +msgid "" +"Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n" +"This can cause contraction marks (such as the hull line) on the outer walls.\n" +"By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark." +msgstr "" + +msgid "Top expansion direction" +msgstr "" + +msgid "" +"Direction in which the top surface expansion grows.\n" +" - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n" +" - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n" +" - Inward and Outward does both." +msgstr "" + +msgid "Inward and Outward" +msgstr "" + +msgid "Inward" +msgstr "" + +msgid "Outward" +msgstr "" + msgid "Bottom surface pattern" msgstr "Motif de surface inférieure" @@ -12903,15 +12919,13 @@ msgstr "Densité de remplissage" msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used." msgstr "Densité du remplissage interne, 100% transforme tous les remplissages en remplissages pleins et le modèle de remplissage interne sera utilisé" -msgid "Align infill direction to model" -msgstr "Aligner la direction du remplissage sur le modèle" +msgid "Align directions to model" +msgstr "" msgid "" -"Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" -"When enabled, directions rotate with the model to maintain optimal strength characteristics." +"Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n" +"When enabled, these directions rotate together with the model so the printed features keep their intended orientation relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed." msgstr "" -"Aligne les directions du remplissage, des ponts, du lissage et des surfaces sur l’orientation du modèle sur le plateau.\n" -"Lorsque cette option est activée, les directions pivotent avec le modèle afin de conserver des caractéristiques de résistance optimales." msgid "Insert solid layers" msgstr "Insérer des couches solides" @@ -15006,6 +15020,18 @@ msgstr "Amorcer tous les extrudeurs d’impression" msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." msgstr "Si cette option est activée, tous les extrudeurs d’impression seront amorcés sur le bord avant du plateau au début de l’impression." +msgid "Toolchange ordering" +msgstr "" + +msgid "" +"Determines the order of tool changes on each layer.\n" +"- Default: Starts with the last used extruder to minimize tool changes.\n" +"- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool." +msgstr "" + +msgid "Cyclic" +msgstr "" + msgid "Slice gap closing radius" msgstr "Rayon de fermeture de l’écart des tranches" @@ -15438,6 +15464,45 @@ 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 "" + +msgid "" +"Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts (or distinct 3D objects) each get their own.\n" +"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n" +"Affects line and grid patterns and rotation-template infills.\n" +"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected." +msgstr "" + +msgid "Center surface pattern on" +msgstr "" + +msgid "" +"Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, Octagram Spiral) is placed.\n" +" - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n" +" - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; parts detached from the rest each get their own.\n" +" - Each Assembly: uses a single shared center for the whole object or assembly." +msgstr "" + +msgid "Each Surface" +msgstr "" + +msgid "Each Model" +msgstr "" + +msgid "Each Assembly" +msgstr "" + msgid "This is the speed at which traveling is done." msgstr "Vitesse de déplacement plus rapide et sans extrusion" @@ -19418,6 +19483,62 @@ 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 "Continue to sync filaments" +#~ msgstr "Continuer la synchronisation des filaments" + +#~ msgctxt "Sync_Nozzle_AMS" +#~ msgid "Cancel" +#~ msgstr "Annuler" + +#, no-c-format, no-boost-format +#~ msgid "" +#~ "External Bridging angle override.\n" +#~ "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 infill direction 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." +#~ msgstr "" +#~ "Remplacement de l’angle des ponts externes.\n" +#~ "Si laissé à zéro, l’angle des ponts est calculé automatiquement pour chaque pont.\n" +#~ "Sinon, l’angle fourni est utilisé selon :\n" +#~ " - les coordonnées absolues\n" +#~ " - les coordonnées absolues + la rotation du modèle : si « Aligner la direction du remplissage sur le modèle » est activé\n" +#~ " - l’angle automatique optimal + cette valeur : si « Angle de pont relatif » est activé\n" +#~ "\n" +#~ "Utilisez 180° pour un angle absolu nul." + +#~ msgid "" +#~ "Internal Bridging angle override.\n" +#~ "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 infill direction 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." +#~ msgstr "" +#~ "Remplacement de l’angle des ponts internes.\n" +#~ "Si laissé à zéro, l’angle des ponts est calculé automatiquement pour chaque pont.\n" +#~ "Sinon, l’angle fourni est utilisé selon :\n" +#~ " - les coordonnées absolues\n" +#~ " - les coordonnées absolues + la rotation du modèle : si « Aligner la direction du remplissage sur le modèle » est activé\n" +#~ " - l’angle automatique optimal + cette valeur : si « Angle de pont relatif » est activé\n" +#~ "\n" +#~ "Utilisez 180° pour un angle absolu nul." + +#~ msgid "Align infill direction to model" +#~ msgstr "Aligner la direction du remplissage sur le modèle" + +#~ msgid "" +#~ "Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" +#~ "When enabled, directions rotate with the model to maintain optimal strength characteristics." +#~ msgstr "" +#~ "Aligne les directions du remplissage, des ponts, du lissage et des surfaces sur l’orientation du modèle sur le plateau.\n" +#~ "Lorsque cette option est activée, les directions pivotent avec le modèle afin de conserver des caractéristiques de résistance optimales." + #~ msgid "Print" #~ msgstr "Imprimer" diff --git a/localization/i18n/hu/OrcaSlicer_hu.po b/localization/i18n/hu/OrcaSlicer_hu.po index cfb2a6b72c..8ea9183187 100644 --- a/localization/i18n/hu/OrcaSlicer_hu.po +++ b/localization/i18n/hu/OrcaSlicer_hu.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-07 16:46-0300\n" +"POT-Creation-Date: 2026-07-12 12:27-0300\n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -159,6 +159,12 @@ msgstr "Kitöltés" msgid "Gap Fill" msgstr "Hézagok kitöltése" +msgid "Vertical" +msgstr "Függőleges" + +msgid "Horizontal" +msgstr "Vízszintes" + #, boost-format msgid "Allows painting only on facets selected by: \"%1%\"" msgstr "Csak a(z) \"%1%\" által kijelölt felületeken történik festés" @@ -254,12 +260,6 @@ msgstr "Háromszög" msgid "Height Range" msgstr "Magasságtartomány" -msgid "Vertical" -msgstr "Függőleges" - -msgid "Horizontal" -msgstr "Vízszintes" - msgid "Remove painted color" msgstr "Festett szín eltávolítása" @@ -5711,15 +5711,6 @@ msgstr "Aktuális konfiguráció exportálása fájlokba" msgid "Export" msgstr "Exportálás" -msgid "Sync Presets" -msgstr "Beállítások szinkronizálása" - -msgid "Pull and apply the latest presets from OrcaCloud" -msgstr "Hívd le és alkalmazd az OrcaCloud legújabb beállításait" - -msgid "You must be logged in to sync presets from cloud." -msgstr "A beállítások felhőből történő szinkronizálásához be kell jelentkezz." - msgid "Quit" msgstr "Kilépés" @@ -5836,6 +5827,15 @@ msgstr "Nézet" msgid "Preset Bundle" msgstr "Beállításcsomag" +msgid "Sync Presets" +msgstr "Beállítások szinkronizálása" + +msgid "Pull and apply the latest presets from OrcaCloud" +msgstr "Hívd le és alkalmazd az OrcaCloud legújabb beállításait" + +msgid "You must be logged in to sync presets from cloud." +msgstr "A beállítások felhőből történő szinkronizálásához be kell jelentkezz." + msgid "Syncing presets from cloud…" msgstr "Beállítások szinkronizálása a felhőből…" @@ -10360,12 +10360,8 @@ msgstr "A fúvókainformációk szinkronizálása sikerült." msgid "Successfully synchronized nozzle and AMS number information." msgstr "A fúvóka- és AMS-száminformációk szinkronizálása sikerült." -msgid "Continue to sync filaments" -msgstr "Filamentek szinkronizálásának folytatása" - -msgctxt "Sync_Nozzle_AMS" -msgid "Cancel" -msgstr "Mégse" +msgid "Do you want to continue to sync filaments?" +msgstr "" msgid "Successfully synchronized filament color from printer." msgstr "A filament színének szinkronizálása a nyomtatóról sikerült." @@ -11694,7 +11690,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 infill 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." @@ -11708,7 +11704,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 infill 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." @@ -12443,6 +12439,42 @@ msgstr "Felső felületi sűrűség" msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion." msgstr "A felső felületi réteg sűrűsége. A 100%-os érték teljesen tömör, sima felső réteget hoz létre. Ennek az értéknek a csökkentése a kiválasztott felső felületi mintázatnak megfelelően texturált felső felületet eredményez. A 0%-os érték azt eredményezi, hogy a felső rétegen csak a falak jönnek létre. 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." +msgid "Top surface expansion" +msgstr "" + +msgid "" +"Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n" +"Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane.Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top.The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection." +msgstr "" + +msgid "Top expansion wall margin" +msgstr "" + +msgid "" +"Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n" +"This can cause contraction marks (such as the hull line) on the outer walls.\n" +"By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark." +msgstr "" + +msgid "Top expansion direction" +msgstr "" + +msgid "" +"Direction in which the top surface expansion grows.\n" +" - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n" +" - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n" +" - Inward and Outward does both." +msgstr "" + +msgid "Inward and Outward" +msgstr "" + +msgid "Inward" +msgstr "" + +msgid "Outward" +msgstr "" + msgid "Bottom surface pattern" msgstr "Alsó felület mintázata" @@ -13110,12 +13142,12 @@ msgstr "Kitöltés sűrűsége" msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used." msgstr "A belső ritka kitöltés sűrűsége. A 100% minden ritka kitöltést tömör kitöltéssé alakít, és a belső tömör kitöltési minta kerül használatra." -msgid "Align infill direction to model" -msgstr "Kitöltési irány igazítása a modellhez" +msgid "Align directions to model" +msgstr "" msgid "" -"Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" -"When enabled, directions rotate with the model to maintain optimal strength characteristics." +"Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n" +"When enabled, these directions rotate together with the model so the printed features keep their intended orientation relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed." msgstr "" msgid "Insert solid layers" @@ -15265,6 +15297,18 @@ msgstr "Az összes nyomtató extruder előkészítése" msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." msgstr "Ha engedélyezve van, akkor a nyomtatás kezdetén az összes nyomtató extruder előkészítésre kerül a tárgyasztal elülső szélénél." +msgid "Toolchange ordering" +msgstr "" + +msgid "" +"Determines the order of tool changes on each layer.\n" +"- Default: Starts with the last used extruder to minimize tool changes.\n" +"- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool." +msgstr "" + +msgid "Cyclic" +msgstr "" + msgid "Slice gap closing radius" msgstr "Szeletelési hézag lezárási sugara" @@ -15712,6 +15756,45 @@ 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 "" + +msgid "" +"Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts (or distinct 3D objects) each get their own.\n" +"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n" +"Affects line and grid patterns and rotation-template infills.\n" +"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected." +msgstr "" + +msgid "Center surface pattern on" +msgstr "" + +msgid "" +"Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, Octagram Spiral) is placed.\n" +" - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n" +" - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; parts detached from the rest each get their own.\n" +" - Each Assembly: uses a single shared center for the whole object or assembly." +msgstr "" + +msgid "Each Surface" +msgstr "" + +msgid "Each Model" +msgstr "" + +msgid "Each Assembly" +msgstr "" + # TODO: Review, changed by lang refactor. PR 14254 msgid "This is the speed at which traveling is done." msgstr "Mozgási sebesség, amikor nem történik extrudálás" @@ -19733,6 +19816,16 @@ 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 "Continue to sync filaments" +#~ msgstr "Filamentek szinkronizálásának folytatása" + +#~ msgctxt "Sync_Nozzle_AMS" +#~ msgid "Cancel" +#~ msgstr "Mégse" + +#~ msgid "Align infill direction to model" +#~ msgstr "Kitöltési irány igazítása a modellhez" + #~ msgid "Print" #~ msgstr "Nyomtatás" diff --git a/localization/i18n/it/OrcaSlicer_it.po b/localization/i18n/it/OrcaSlicer_it.po index a76f393456..35beaf7049 100644 --- a/localization/i18n/it/OrcaSlicer_it.po +++ b/localization/i18n/it/OrcaSlicer_it.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-07 16:46-0300\n" +"POT-Creation-Date: 2026-07-12 12:27-0300\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -162,6 +162,12 @@ msgstr "Riempi" msgid "Gap Fill" msgstr "Riempi spazio vuoto" +msgid "Vertical" +msgstr "Verticale" + +msgid "Horizontal" +msgstr "Orizzontale" + #, boost-format msgid "Allows painting only on facets selected by: \"%1%\"" msgstr "Consente di dipingere solo sulle facce selezionate da: \"%1%\"" @@ -257,12 +263,6 @@ msgstr "Triangolo" msgid "Height Range" msgstr "Interv. altezza" -msgid "Vertical" -msgstr "Verticale" - -msgid "Horizontal" -msgstr "Orizzontale" - msgid "Remove painted color" msgstr "Rimuovi colore dipinto" @@ -5712,15 +5712,6 @@ msgstr "Esporta la configurazione corrente in un file" msgid "Export" msgstr "Esporta" -msgid "Sync Presets" -msgstr "" - -msgid "Pull and apply the latest presets from OrcaCloud" -msgstr "" - -msgid "You must be logged in to sync presets from cloud." -msgstr "" - msgid "Quit" msgstr "Esci" @@ -5837,6 +5828,15 @@ msgstr "Vista" msgid "Preset Bundle" msgstr "Pacchetto profili" +msgid "Sync Presets" +msgstr "" + +msgid "Pull and apply the latest presets from OrcaCloud" +msgstr "" + +msgid "You must be logged in to sync presets from cloud." +msgstr "" + msgid "Syncing presets from cloud…" msgstr "" @@ -10342,12 +10342,8 @@ msgstr "Informazioni ugello sincronizzate con successo." msgid "Successfully synchronized nozzle and AMS number information." msgstr "Informazioni ugello e numero AMS sincronizzate con successo." -msgid "Continue to sync filaments" -msgstr "Continua la sincronizzazione dei filamenti" - -msgctxt "Sync_Nozzle_AMS" -msgid "Cancel" -msgstr "Annulla" +msgid "Do you want to continue to sync filaments?" +msgstr "" msgid "Successfully synchronized filament color from printer." msgstr "Colore del filamento sincronizzato con successo dalla stampante." @@ -11676,7 +11672,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 infill 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." @@ -11690,7 +11686,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 infill 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." @@ -12426,6 +12422,42 @@ msgstr "Densità superficie superiore" msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion." msgstr "Densità dello strato superficiale superiore. Un valore del 100% crea uno strato superiore completamente solido e liscio. La riduzione di questo valore produce una superficie superiore texturizzata, secondo il pattern di superficie superiore scelto. Un valore dello 0% risulterà nella creazione delle sole pareti sullo strato superiore. Destinato a scopi estetici o funzionali, non per risolvere problemi come la sovraestrusione." +msgid "Top surface expansion" +msgstr "" + +msgid "" +"Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n" +"Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane.Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top.The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection." +msgstr "" + +msgid "Top expansion wall margin" +msgstr "" + +msgid "" +"Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n" +"This can cause contraction marks (such as the hull line) on the outer walls.\n" +"By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark." +msgstr "" + +msgid "Top expansion direction" +msgstr "" + +msgid "" +"Direction in which the top surface expansion grows.\n" +" - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n" +" - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n" +" - Inward and Outward does both." +msgstr "" + +msgid "Inward and Outward" +msgstr "" + +msgid "Inward" +msgstr "" + +msgid "Outward" +msgstr "" + msgid "Bottom surface pattern" msgstr "Motivo superficie inferiore" @@ -13093,12 +13125,12 @@ msgstr "Densità riempimento sparso" msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used." msgstr "Densità del riempimento sparso interno. 100% trasforma il riempimento sparso in riempimento solido e verrà utilizzato il motivo del riempimento solido interno." -msgid "Align infill direction to model" -msgstr "Allinea direzione riempimento al modello" +msgid "Align directions to model" +msgstr "" msgid "" -"Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" -"When enabled, directions rotate with the model to maintain optimal strength characteristics." +"Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n" +"When enabled, these directions rotate together with the model so the printed features keep their intended orientation relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed." msgstr "" msgid "Insert solid layers" @@ -15235,6 +15267,18 @@ msgstr "Prepara tutti gli estrusori di stampa" msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." msgstr "Se abilitata, tutti gli estrusori di stampa verranno preparati nel bordo frontale del piano di stampa all'inizio della stampa." +msgid "Toolchange ordering" +msgstr "" + +msgid "" +"Determines the order of tool changes on each layer.\n" +"- Default: Starts with the last used extruder to minimize tool changes.\n" +"- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool." +msgstr "" + +msgid "Cyclic" +msgstr "" + msgid "Slice gap closing radius" msgstr "Raggio di chiusura spazi vuoti" @@ -15680,6 +15724,45 @@ 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 "" + +msgid "" +"Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts (or distinct 3D objects) each get their own.\n" +"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n" +"Affects line and grid patterns and rotation-template infills.\n" +"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected." +msgstr "" + +msgid "Center surface pattern on" +msgstr "" + +msgid "" +"Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, Octagram Spiral) is placed.\n" +" - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n" +" - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; parts detached from the rest each get their own.\n" +" - Each Assembly: uses a single shared center for the whole object or assembly." +msgstr "" + +msgid "Each Surface" +msgstr "" + +msgid "Each Model" +msgstr "" + +msgid "Each Assembly" +msgstr "" + # TODO: Review, changed by lang refactor. PR 14254 msgid "This is the speed at which traveling is done." msgstr "Indica la velocità di spostamento più rapida e senza estrusione." @@ -19713,6 +19796,16 @@ 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 "Continue to sync filaments" +#~ msgstr "Continua la sincronizzazione dei filamenti" + +#~ msgctxt "Sync_Nozzle_AMS" +#~ msgid "Cancel" +#~ msgstr "Annulla" + +#~ msgid "Align infill direction to model" +#~ msgstr "Allinea direzione riempimento al modello" + #~ msgid "Print" #~ msgstr "Stampa" diff --git a/localization/i18n/ja/OrcaSlicer_ja.po b/localization/i18n/ja/OrcaSlicer_ja.po index acc3402250..8ece39308b 100644 --- a/localization/i18n/ja/OrcaSlicer_ja.po +++ b/localization/i18n/ja/OrcaSlicer_ja.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-07 16:46-0300\n" +"POT-Creation-Date: 2026-07-12 12:27-0300\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -162,6 +162,12 @@ msgstr "塗りつぶし" msgid "Gap Fill" msgstr "隙間充填" +msgid "Vertical" +msgstr "垂直" + +msgid "Horizontal" +msgstr "水平" + #, boost-format msgid "Allows painting only on facets selected by: \"%1%\"" msgstr "%1%で選択した面だけをペイントする" @@ -257,12 +263,6 @@ msgstr "三角形" msgid "Height Range" msgstr "高さ範囲" -msgid "Vertical" -msgstr "垂直" - -msgid "Horizontal" -msgstr "水平" - msgid "Remove painted color" msgstr "塗った色を消去" @@ -5679,15 +5679,6 @@ msgstr "現在の構成をエクスポート" msgid "Export" msgstr "エクスポート" -msgid "Sync Presets" -msgstr "" - -msgid "Pull and apply the latest presets from OrcaCloud" -msgstr "" - -msgid "You must be logged in to sync presets from cloud." -msgstr "" - msgid "Quit" msgstr "終了" @@ -5804,6 +5795,15 @@ msgstr "表示" msgid "Preset Bundle" msgstr "" +msgid "Sync Presets" +msgstr "" + +msgid "Pull and apply the latest presets from OrcaCloud" +msgstr "" + +msgid "You must be logged in to sync presets from cloud." +msgstr "" + msgid "Syncing presets from cloud…" msgstr "" @@ -10275,12 +10275,8 @@ msgstr "ノズル情報の同期に成功しました。" msgid "Successfully synchronized nozzle and AMS number information." msgstr "ノズルとAMS数の情報の同期に成功しました。" -msgid "Continue to sync filaments" -msgstr "フィラメントの同期を続行" - -msgctxt "Sync_Nozzle_AMS" -msgid "Cancel" -msgstr "キャンセル" +msgid "Do you want to continue to sync filaments?" +msgstr "" msgid "Successfully synchronized filament color from printer." msgstr "プリンターからフィラメントの色を正常に同期しました。" @@ -11573,7 +11569,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 infill 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." @@ -11587,7 +11583,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 infill 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." @@ -12231,6 +12227,42 @@ msgstr "上面密度" msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion." msgstr "" +msgid "Top surface expansion" +msgstr "" + +msgid "" +"Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n" +"Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane.Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top.The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection." +msgstr "" + +msgid "Top expansion wall margin" +msgstr "" + +msgid "" +"Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n" +"This can cause contraction marks (such as the hull line) on the outer walls.\n" +"By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark." +msgstr "" + +msgid "Top expansion direction" +msgstr "" + +msgid "" +"Direction in which the top surface expansion grows.\n" +" - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n" +" - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n" +" - Inward and Outward does both." +msgstr "" + +msgid "Inward and Outward" +msgstr "" + +msgid "Inward" +msgstr "" + +msgid "Outward" +msgstr "" + msgid "Bottom surface pattern" msgstr "底面パターン" @@ -12854,12 +12886,12 @@ msgstr "充填密度" msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used." msgstr "" -msgid "Align infill direction to model" -msgstr "インフィル方向をモデルに合わせる" +msgid "Align directions to model" +msgstr "" msgid "" -"Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" -"When enabled, directions rotate with the model to maintain optimal strength characteristics." +"Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n" +"When enabled, these directions rotate together with the model so the printed features keep their intended orientation relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed." msgstr "" msgid "Insert solid layers" @@ -14865,6 +14897,18 @@ msgstr "全てのエクストルーダーでプライムを実施" msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." msgstr "有効にすると、すべてのプリントエクストルーダーは、プリント開始時にプリントベッドの前端で準備されます。" +msgid "Toolchange ordering" +msgstr "" + +msgid "" +"Determines the order of tool changes on each layer.\n" +"- Default: Starts with the last used extruder to minimize tool changes.\n" +"- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool." +msgstr "" + +msgid "Cyclic" +msgstr "" + msgid "Slice gap closing radius" msgstr "隙間充填半径" @@ -15293,6 +15337,45 @@ 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 "" + +msgid "" +"Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts (or distinct 3D objects) each get their own.\n" +"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n" +"Affects line and grid patterns and rotation-template infills.\n" +"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected." +msgstr "" + +msgid "Center surface pattern on" +msgstr "" + +msgid "" +"Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, Octagram Spiral) is placed.\n" +" - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n" +" - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; parts detached from the rest each get their own.\n" +" - Each Assembly: uses a single shared center for the whole object or assembly." +msgstr "" + +msgid "Each Surface" +msgstr "" + +msgid "Each Model" +msgstr "" + +msgid "Each Assembly" +msgstr "" + # TODO: Review, changed by lang refactor. PR 14254 msgid "This is the speed at which traveling is done." msgstr "移動完了時の速度です。" @@ -19181,6 +19264,16 @@ msgstr "" "反りを避ける\n" "ABSのような反りやすい素材を印刷する場合、ヒートベッドの温度を適切に上げることで、反りが発生する確率を下げることができることをご存知ですか?" +#~ msgid "Continue to sync filaments" +#~ msgstr "フィラメントの同期を続行" + +#~ msgctxt "Sync_Nozzle_AMS" +#~ msgid "Cancel" +#~ msgstr "キャンセル" + +#~ msgid "Align infill direction to model" +#~ msgstr "インフィル方向をモデルに合わせる" + #~ msgid "Print" #~ msgstr "造形する" diff --git a/localization/i18n/ko/OrcaSlicer_ko.po b/localization/i18n/ko/OrcaSlicer_ko.po index 87ef3a0fae..f514abf4ba 100644 --- a/localization/i18n/ko/OrcaSlicer_ko.po +++ b/localization/i18n/ko/OrcaSlicer_ko.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-07 16:46-0300\n" +"POT-Creation-Date: 2026-07-12 12:27-0300\n" "PO-Revision-Date: 2025-06-02 17:12+0900\n" "Last-Translator: crwusiz \n" "Language-Team: \n" @@ -166,6 +166,12 @@ msgstr "채우기" msgid "Gap Fill" msgstr "간격 채우기" +msgid "Vertical" +msgstr "수직" + +msgid "Horizontal" +msgstr "수평" + #, boost-format msgid "Allows painting only on facets selected by: \"%1%\"" msgstr "\"%1%\"에서 선택한 영역에만 칠하기 허용" @@ -261,12 +267,6 @@ msgstr "삼각형" msgid "Height Range" msgstr "높이 범위" -msgid "Vertical" -msgstr "수직" - -msgid "Horizontal" -msgstr "수평" - msgid "Remove painted color" msgstr "칠한 색 제거" @@ -5707,15 +5707,6 @@ msgstr "현재 설정을 파일로 내보내기" msgid "Export" msgstr "내보내기" -msgid "Sync Presets" -msgstr "" - -msgid "Pull and apply the latest presets from OrcaCloud" -msgstr "" - -msgid "You must be logged in to sync presets from cloud." -msgstr "" - msgid "Quit" msgstr "종료" @@ -5832,6 +5823,15 @@ msgstr "시점" msgid "Preset Bundle" msgstr "" +msgid "Sync Presets" +msgstr "" + +msgid "Pull and apply the latest presets from OrcaCloud" +msgstr "" + +msgid "You must be logged in to sync presets from cloud." +msgstr "" + msgid "Syncing presets from cloud…" msgstr "" @@ -10308,12 +10308,8 @@ msgstr "노즐 정보를 성공적으로 동기화했습니다." msgid "Successfully synchronized nozzle and AMS number information." msgstr "노즐 및 AMS 번호 정보를 성공적으로 동기화했습니다." -msgid "Continue to sync filaments" -msgstr "필라멘트 동기화 계속하기" - -msgctxt "Sync_Nozzle_AMS" -msgid "Cancel" -msgstr "취소" +msgid "Do you want to continue to sync filaments?" +msgstr "" msgid "Successfully synchronized filament color from printer." msgstr "" @@ -11635,7 +11631,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 infill 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." @@ -11649,7 +11645,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 infill 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." @@ -12354,6 +12350,42 @@ msgstr "상단 표면 밀도" msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion." msgstr "" +msgid "Top surface expansion" +msgstr "" + +msgid "" +"Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n" +"Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane.Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top.The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection." +msgstr "" + +msgid "Top expansion wall margin" +msgstr "" + +msgid "" +"Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n" +"This can cause contraction marks (such as the hull line) on the outer walls.\n" +"By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark." +msgstr "" + +msgid "Top expansion direction" +msgstr "" + +msgid "" +"Direction in which the top surface expansion grows.\n" +" - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n" +" - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n" +" - Inward and Outward does both." +msgstr "" + +msgid "Inward and Outward" +msgstr "" + +msgid "Inward" +msgstr "" + +msgid "Outward" +msgstr "" + msgid "Bottom surface pattern" msgstr "하단 표면 패턴" @@ -13008,12 +13040,12 @@ msgstr "드문 채우기 밀도" msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used." msgstr "내부 드문 채우기의 밀도, 100%는 모든 드문 채우기를 꽉찬 내부 채우기로 변경하고 채우기에는 패턴이 사용됩니다" -msgid "Align infill direction to model" +msgid "Align directions to model" msgstr "" msgid "" -"Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" -"When enabled, directions rotate with the model to maintain optimal strength characteristics." +"Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n" +"When enabled, these directions rotate together with the model so the printed features keep their intended orientation relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed." msgstr "" msgid "Insert solid layers" @@ -15103,6 +15135,18 @@ msgstr "모든 활성화된 압출기 프라이밍" msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." msgstr "활성화되면 모든 활성화된 압출기는 출력 시작 시 출력 베드의 앞쪽 가장자리에서 프라이밍합니다." +msgid "Toolchange ordering" +msgstr "" + +msgid "" +"Determines the order of tool changes on each layer.\n" +"- Default: Starts with the last used extruder to minimize tool changes.\n" +"- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool." +msgstr "" + +msgid "Cyclic" +msgstr "" + msgid "Slice gap closing radius" msgstr "슬라이스 간격 폐쇄 반경" @@ -15542,6 +15586,45 @@ 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 "" + +msgid "" +"Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts (or distinct 3D objects) each get their own.\n" +"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n" +"Affects line and grid patterns and rotation-template infills.\n" +"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected." +msgstr "" + +msgid "Center surface pattern on" +msgstr "" + +msgid "" +"Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, Octagram Spiral) is placed.\n" +" - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n" +" - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; parts detached from the rest each get their own.\n" +" - Each Assembly: uses a single shared center for the whole object or assembly." +msgstr "" + +msgid "Each Surface" +msgstr "" + +msgid "Each Model" +msgstr "" + +msgid "Each Assembly" +msgstr "" + # TODO: Review, changed by lang refactor. PR 14254 msgid "This is the speed at which traveling is done." msgstr "압출이 없을 때의 이동 속도" @@ -19549,6 +19632,13 @@ msgstr "" "뒤틀림 방지\n" "ABS와 같이 뒤틀림이 발생하기 쉬운 소재를 출력할 때, 히트베드 온도를 적절하게 높이면 뒤틀림 가능성을 줄일 수 있다는 사실을 알고 계셨나요?" +#~ msgid "Continue to sync filaments" +#~ msgstr "필라멘트 동기화 계속하기" + +#~ msgctxt "Sync_Nozzle_AMS" +#~ msgid "Cancel" +#~ msgstr "취소" + #~ msgid "Print" #~ msgstr "출력" diff --git a/localization/i18n/lt/OrcaSlicer_lt.po b/localization/i18n/lt/OrcaSlicer_lt.po index 99cb03a620..909c087630 100644 --- a/localization/i18n/lt/OrcaSlicer_lt.po +++ b/localization/i18n/lt/OrcaSlicer_lt.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-07 16:46-0300\n" +"POT-Creation-Date: 2026-07-12 12:27-0300\n" "PO-Revision-Date: 2026-07-02 14:13+0300\n" "Last-Translator: Gintaras Kučinskas \n" "Language-Team: \n" @@ -164,6 +164,12 @@ msgstr "Užpildymas" msgid "Gap Fill" msgstr "Plyšių užpildymas" +msgid "Vertical" +msgstr "Vertikaliai" + +msgid "Horizontal" +msgstr "Horizontaliai" + #, boost-format msgid "Allows painting only on facets selected by: \"%1%\"" msgstr "Leidžia piešti tik ant paviršių, kuriuos pasirinko: „%1%“" @@ -256,12 +262,6 @@ msgstr "Trikampis" msgid "Height Range" msgstr "Aukščio diapazonas" -msgid "Vertical" -msgstr "Vertikaliai" - -msgid "Horizontal" -msgstr "Horizontaliai" - msgid "Remove painted color" msgstr "Pašalinti dažytą spalvą" @@ -5587,15 +5587,6 @@ msgstr "Eksportuoti dabartinę konfigūraciją į failus" msgid "Export" msgstr "Eksportuoti" -msgid "Sync Presets" -msgstr "Sinchronizuoti profilius" - -msgid "Pull and apply the latest presets from OrcaCloud" -msgstr "Atsisiųsti ir pritaikyti naujausius profilius iš „OrcaCloud“" - -msgid "You must be logged in to sync presets from cloud." -msgstr "Norėdami sinchronizuoti profilius iš debesies, turite būti prisijungę." - msgid "Quit" msgstr "Išeiti" @@ -5710,6 +5701,15 @@ msgstr "Vaizdas" msgid "Preset Bundle" msgstr "Profilių rinkinys" +msgid "Sync Presets" +msgstr "Sinchronizuoti profilius" + +msgid "Pull and apply the latest presets from OrcaCloud" +msgstr "Atsisiųsti ir pritaikyti naujausius profilius iš „OrcaCloud“" + +msgid "You must be logged in to sync presets from cloud." +msgstr "Norėdami sinchronizuoti profilius iš debesies, turite būti prisijungę." + msgid "Syncing presets from cloud…" msgstr "Sinchronizuojami profiliai iš debesies…" @@ -10161,12 +10161,8 @@ msgstr "Purkštuko informacija sėkmingai sinchronizuota." msgid "Successfully synchronized nozzle and AMS number information." msgstr "Purkštuko ir AMS skaičiaus informacija sėkmingai sinchronizuota." -msgid "Continue to sync filaments" -msgstr "Tęsti gijų sinchronizavimą" - -msgctxt "Sync_Nozzle_AMS" -msgid "Cancel" -msgstr "Atšaukti" +msgid "Do you want to continue to sync filaments?" +msgstr "" msgid "Successfully synchronized filament color from printer." msgstr "Gijos spalva sėkmingai sinchronizuota iš spausdintuvo." @@ -11443,19 +11439,11 @@ 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 infill 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." msgstr "" -"Išorinių tiltelių kampo perrašymas.\n" -"Palikus 0, tiltelio kampas bus apskaičiuojamas automatiškai kiekvienam konkrečiam tilteliui.\n" -"Kitu atveju nurodytas kampas bus naudojamas pagal:\n" -" - absoliučiąsias koordinates;\n" -" - absoliučiąsias koordinates + modelio pasukimą: jei įjungta „Sulygiuoti užpildo kryptį su modeliu“;\n" -" - optimalų automatinį kampą + šią reikšmę: jei įjungta „Santykinis tiltelio kampas“.\n" -"\n" -"Naudokite 180° nulinėms absoliučiosioms koordinatėms." msgid "Internal bridge infill direction" msgstr "Vidinio tilto užpildo kryptis" @@ -11465,19 +11453,11 @@ 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 infill 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." msgstr "" -"Vidinių tiltelių kampo perrašymas.\n" -"Palikus 0, tiltelio kampas bus apskaičiuojamas automatiškai kiekvienam konkrečiam tilteliui.\n" -"Kitu atveju nurodytas kampas bus naudojamas pagal:\n" -" - absoliučiąsias koordinates;\n" -" - absoliučiąsias koordinates + modelio pasukimą: jei įjungta „Sulygiuoti užpildo kryptį su modeliu“;\n" -" - optimalų automatinį kampą + šią reikšmę: jei įjungta „Santykinis tiltelio kampas“.\n" -"\n" -"Naudokite 180° nulinėms absoliučiosioms koordinatėms." msgid "Relative bridge angle" msgstr "Santykinis tiltelio kampas" @@ -12246,6 +12226,42 @@ msgstr "Viršutinio paviršiaus tankis" msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion." msgstr "Viršutinio paviršiaus sluoksnio tankis. Nustačius 100 %, sukuriamas visiškai vientisas ir lygus viršutinis sluoksnis. Sumažinus šią reikšmę, gaunamas tekstūruotas viršutinis paviršius pagal pasirinktą raštą. Nustačius 0 %, viršutiniame sluoksnyje bus spausdinamos tik sienelės. Funkcija skirta estetiniais arba funkciniais tikslais, o ne tokioms problemoms kaip perteklinė ekstruzija (over-extrusion) spręsti." +msgid "Top surface expansion" +msgstr "" + +msgid "" +"Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n" +"Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane.Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top.The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection." +msgstr "" + +msgid "Top expansion wall margin" +msgstr "" + +msgid "" +"Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n" +"This can cause contraction marks (such as the hull line) on the outer walls.\n" +"By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark." +msgstr "" + +msgid "Top expansion direction" +msgstr "" + +msgid "" +"Direction in which the top surface expansion grows.\n" +" - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n" +" - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n" +" - Inward and Outward does both." +msgstr "" + +msgid "Inward and Outward" +msgstr "" + +msgid "Inward" +msgstr "" + +msgid "Outward" +msgstr "" + msgid "Bottom surface pattern" msgstr "Apatinio paviršiaus raštas" @@ -12896,15 +12912,13 @@ msgstr "Reto užpildo tankis" msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used." msgstr "Vidinio reto užpildo tankis. 100% paverčia visą retą užpildą vientisu užpildu ir tuomet bus naudojamas vidinio vientiso užpildo raštas." -msgid "Align infill direction to model" -msgstr "Suderinti užpildo kryptį su modeliu" +msgid "Align directions to model" +msgstr "" msgid "" -"Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" -"When enabled, directions rotate with the model to maintain optimal strength characteristics." +"Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n" +"When enabled, these directions rotate together with the model so the printed features keep their intended orientation relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed." msgstr "" -"Sulygiuoja užpildo, tiltelių, lyginimo ir paviršiaus užpildymo kryptis pagal modelio orientaciją ant pagrindo.\n" -"Kai įjungta, kryptys sukasi kartu su modeliu, kad būtų išlaikytos optimalios tvirtumo charakteristikos." msgid "Insert solid layers" msgstr "Įterpti vientisus sluoksnius" @@ -14982,6 +14996,18 @@ msgstr "Paruošti (prime) visus spausdinimo ekstruderius" msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." msgstr "Jei įjungta, visi spausdinimo ekstruderiai spausdinimo pradžioje bus paruošti (primed) prie priekinio spausdinimo pagrindo krašto." +msgid "Toolchange ordering" +msgstr "" + +msgid "" +"Determines the order of tool changes on each layer.\n" +"- Default: Starts with the last used extruder to minimize tool changes.\n" +"- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool." +msgstr "" + +msgid "Cyclic" +msgstr "" + msgid "Slice gap closing radius" msgstr "Sluoksniavimo tarpo uždarymo spindulys" @@ -15409,6 +15435,45 @@ msgstr "Viršutinio apvalkalo storis" 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 "" + +msgid "" +"Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts (or distinct 3D objects) each get their own.\n" +"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n" +"Affects line and grid patterns and rotation-template infills.\n" +"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected." +msgstr "" + +msgid "Center surface pattern on" +msgstr "" + +msgid "" +"Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, Octagram Spiral) is placed.\n" +" - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n" +" - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; parts detached from the rest each get their own.\n" +" - Each Assembly: uses a single shared center for the whole object or assembly." +msgstr "" + +msgid "Each Surface" +msgstr "" + +msgid "Each Model" +msgstr "" + +msgid "Each Assembly" +msgstr "" + msgid "This is the speed at which traveling is done." msgstr "" @@ -19367,6 +19432,62 @@ msgstr "" "Venkite deformacijų (warping)\n" "Ar žinojote, kad spausdinant medžiagas, kurios yra linkusios trauktis ir riestis (pvz., ABS), tinkamas kaitinamojo pagrindo temperatūros padidinimas gali sumažinti deformacijų (warping) tikimybę?" +#~ msgid "Continue to sync filaments" +#~ msgstr "Tęsti gijų sinchronizavimą" + +#~ msgctxt "Sync_Nozzle_AMS" +#~ msgid "Cancel" +#~ msgstr "Atšaukti" + +#, no-c-format, no-boost-format +#~ msgid "" +#~ "External Bridging angle override.\n" +#~ "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 infill direction 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." +#~ msgstr "" +#~ "Išorinių tiltelių kampo perrašymas.\n" +#~ "Palikus 0, tiltelio kampas bus apskaičiuojamas automatiškai kiekvienam konkrečiam tilteliui.\n" +#~ "Kitu atveju nurodytas kampas bus naudojamas pagal:\n" +#~ " - absoliučiąsias koordinates;\n" +#~ " - absoliučiąsias koordinates + modelio pasukimą: jei įjungta „Sulygiuoti užpildo kryptį su modeliu“;\n" +#~ " - optimalų automatinį kampą + šią reikšmę: jei įjungta „Santykinis tiltelio kampas“.\n" +#~ "\n" +#~ "Naudokite 180° nulinėms absoliučiosioms koordinatėms." + +#~ msgid "" +#~ "Internal Bridging angle override.\n" +#~ "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 infill direction 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." +#~ msgstr "" +#~ "Vidinių tiltelių kampo perrašymas.\n" +#~ "Palikus 0, tiltelio kampas bus apskaičiuojamas automatiškai kiekvienam konkrečiam tilteliui.\n" +#~ "Kitu atveju nurodytas kampas bus naudojamas pagal:\n" +#~ " - absoliučiąsias koordinates;\n" +#~ " - absoliučiąsias koordinates + modelio pasukimą: jei įjungta „Sulygiuoti užpildo kryptį su modeliu“;\n" +#~ " - optimalų automatinį kampą + šią reikšmę: jei įjungta „Santykinis tiltelio kampas“.\n" +#~ "\n" +#~ "Naudokite 180° nulinėms absoliučiosioms koordinatėms." + +#~ msgid "Align infill direction to model" +#~ msgstr "Suderinti užpildo kryptį su modeliu" + +#~ msgid "" +#~ "Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" +#~ "When enabled, directions rotate with the model to maintain optimal strength characteristics." +#~ msgstr "" +#~ "Sulygiuoja užpildo, tiltelių, lyginimo ir paviršiaus užpildymo kryptis pagal modelio orientaciją ant pagrindo.\n" +#~ "Kai įjungta, kryptys sukasi kartu su modeliu, kad būtų išlaikytos optimalios tvirtumo charakteristikos." + #~ msgid "Print" #~ msgstr "Spausdinti" diff --git a/localization/i18n/nl/OrcaSlicer_nl.po b/localization/i18n/nl/OrcaSlicer_nl.po index b9d6e1870e..4eccc8413a 100644 --- a/localization/i18n/nl/OrcaSlicer_nl.po +++ b/localization/i18n/nl/OrcaSlicer_nl.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-07 16:46-0300\n" +"POT-Creation-Date: 2026-07-12 12:27-0300\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -162,6 +162,12 @@ msgstr "Vullen" msgid "Gap Fill" msgstr "Gatvulling" +msgid "Vertical" +msgstr "Verticaal" + +msgid "Horizontal" +msgstr "Horizontaal" + #, boost-format msgid "Allows painting only on facets selected by: \"%1%\"" msgstr "Staat alleen schilderen toe op facetten geselecteerd met: \"%1%\"" @@ -257,12 +263,6 @@ msgstr "Driehoek" msgid "Height Range" msgstr "Hoogtebereik" -msgid "Vertical" -msgstr "Verticaal" - -msgid "Horizontal" -msgstr "Horizontaal" - msgid "Remove painted color" msgstr "Geschilderd kleur verwijderen" @@ -5647,15 +5647,6 @@ msgstr "Huidige configuratie exporteren naar bestanden" msgid "Export" msgstr "Exporteren" -msgid "Sync Presets" -msgstr "" - -msgid "Pull and apply the latest presets from OrcaCloud" -msgstr "" - -msgid "You must be logged in to sync presets from cloud." -msgstr "" - msgid "Quit" msgstr "Stop" @@ -5772,6 +5763,15 @@ msgstr "Weergave" msgid "Preset Bundle" msgstr "" +msgid "Sync Presets" +msgstr "" + +msgid "Pull and apply the latest presets from OrcaCloud" +msgstr "" + +msgid "You must be logged in to sync presets from cloud." +msgstr "" + msgid "Syncing presets from cloud…" msgstr "" @@ -10202,13 +10202,9 @@ msgstr "" msgid "Successfully synchronized nozzle and AMS number information." msgstr "" -msgid "Continue to sync filaments" +msgid "Do you want to continue to sync filaments?" msgstr "" -msgctxt "Sync_Nozzle_AMS" -msgid "Cancel" -msgstr "Annuleren" - msgid "Successfully synchronized filament color from printer." msgstr "" @@ -11505,7 +11501,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 infill 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." @@ -11519,7 +11515,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 infill 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." @@ -12163,6 +12159,42 @@ msgstr "" msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion." msgstr "" +msgid "Top surface expansion" +msgstr "" + +msgid "" +"Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n" +"Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane.Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top.The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection." +msgstr "" + +msgid "Top expansion wall margin" +msgstr "" + +msgid "" +"Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n" +"This can cause contraction marks (such as the hull line) on the outer walls.\n" +"By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark." +msgstr "" + +msgid "Top expansion direction" +msgstr "" + +msgid "" +"Direction in which the top surface expansion grows.\n" +" - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n" +" - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n" +" - Inward and Outward does both." +msgstr "" + +msgid "Inward and Outward" +msgstr "" + +msgid "Inward" +msgstr "" + +msgid "Outward" +msgstr "" + msgid "Bottom surface pattern" msgstr "Bodem oppvlakte patroon" @@ -12779,12 +12811,12 @@ msgstr "Vulling percentage" msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used." msgstr "" -msgid "Align infill direction to model" +msgid "Align directions to model" msgstr "" msgid "" -"Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" -"When enabled, directions rotate with the model to maintain optimal strength characteristics." +"Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n" +"When enabled, these directions rotate together with the model so the printed features keep their intended orientation relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed." msgstr "" msgid "Insert solid layers" @@ -14791,6 +14823,18 @@ msgstr "Veeg alle printextruders af" msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." msgstr "Alle extruders worden afgeveegd aan de voorzijde van het printbed aan het begin van de print als dit is ingeschakeld." +msgid "Toolchange ordering" +msgstr "" + +msgid "" +"Determines the order of tool changes on each layer.\n" +"- Default: Starts with the last used extruder to minimize tool changes.\n" +"- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool." +msgstr "" + +msgid "Cyclic" +msgstr "" + msgid "Slice gap closing radius" msgstr "Sluitingsradius van de gap" @@ -15220,6 +15264,45 @@ 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 "" + +msgid "" +"Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts (or distinct 3D objects) each get their own.\n" +"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n" +"Affects line and grid patterns and rotation-template infills.\n" +"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected." +msgstr "" + +msgid "Center surface pattern on" +msgstr "" + +msgid "" +"Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, Octagram Spiral) is placed.\n" +" - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n" +" - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; parts detached from the rest each get their own.\n" +" - Each Assembly: uses a single shared center for the whole object or assembly." +msgstr "" + +msgid "Each Surface" +msgstr "" + +msgid "Each Model" +msgstr "" + +msgid "Each Assembly" +msgstr "" + # TODO: Review, changed by lang refactor. PR 14254 msgid "This is the speed at which traveling is done." msgstr "Dit is de snelheid waarmee verplaatsingen zullen worden gedaan." @@ -19136,6 +19219,10 @@ 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?" +#~ msgctxt "Sync_Nozzle_AMS" +#~ msgid "Cancel" +#~ msgstr "Annuleren" + #~ msgid "in" #~ msgstr "in" diff --git a/localization/i18n/pl/OrcaSlicer_pl.po b/localization/i18n/pl/OrcaSlicer_pl.po index efce20933f..b068fedc43 100644 --- a/localization/i18n/pl/OrcaSlicer_pl.po +++ b/localization/i18n/pl/OrcaSlicer_pl.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: OrcaSlicer 2.3.0-rc\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-07 16:46-0300\n" +"POT-Creation-Date: 2026-07-12 12:27-0300\n" "PO-Revision-Date: \n" "Last-Translator: Krzysztof Morga <>\n" "Language-Team: \n" @@ -163,6 +163,13 @@ msgstr "Wypełnienie" msgid "Gap Fill" msgstr "Wypełnienie szczelin" +# +++++++++++++++++++++ +msgid "Vertical" +msgstr "Pionowa linia" + +msgid "Horizontal" +msgstr "Pozioma linia" + #, boost-format msgid "Allows painting only on facets selected by: \"%1%\"" msgstr "Pozwala malować tylko na wybranych powierzchniach za pomocą: „%1%”" @@ -258,13 +265,6 @@ msgstr "Trójkąt" msgid "Height Range" msgstr "Przedział" -# +++++++++++++++++++++ -msgid "Vertical" -msgstr "Pionowa linia" - -msgid "Horizontal" -msgstr "Pozioma linia" - msgid "Remove painted color" msgstr "Usuń pomalowany kolor" @@ -5708,15 +5708,6 @@ msgstr "Eksportuj bieżącą konfigurację do plików" msgid "Export" msgstr "Eksportuj" -msgid "Sync Presets" -msgstr "" - -msgid "Pull and apply the latest presets from OrcaCloud" -msgstr "" - -msgid "You must be logged in to sync presets from cloud." -msgstr "" - msgid "Quit" msgstr "Zakończ" @@ -5833,6 +5824,15 @@ msgstr "Widok" msgid "Preset Bundle" msgstr "" +msgid "Sync Presets" +msgstr "" + +msgid "Pull and apply the latest presets from OrcaCloud" +msgstr "" + +msgid "You must be logged in to sync presets from cloud." +msgstr "" + msgid "Syncing presets from cloud…" msgstr "" @@ -10325,12 +10325,8 @@ msgstr "Pomyślnie zsynchronizowano informacje o dyszy." msgid "Successfully synchronized nozzle and AMS number information." msgstr "Pomyślnie zsynchronizowano dyszę z informacjami numeru AMS." -msgid "Continue to sync filaments" -msgstr "Kontynuuj aby zsynchronizować filamenty" - -msgctxt "Sync_Nozzle_AMS" -msgid "Cancel" -msgstr "Anuluj" +msgid "Do you want to continue to sync filaments?" +msgstr "" msgid "Successfully synchronized filament color from printer." msgstr "" @@ -11650,7 +11646,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 infill 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." @@ -11664,7 +11660,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 infill 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." @@ -12373,6 +12369,42 @@ msgstr "Gęstość górnej powierzchni" msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion." msgstr "" +msgid "Top surface expansion" +msgstr "" + +msgid "" +"Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n" +"Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane.Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top.The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection." +msgstr "" + +msgid "Top expansion wall margin" +msgstr "" + +msgid "" +"Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n" +"This can cause contraction marks (such as the hull line) on the outer walls.\n" +"By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark." +msgstr "" + +msgid "Top expansion direction" +msgstr "" + +msgid "" +"Direction in which the top surface expansion grows.\n" +" - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n" +" - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n" +" - Inward and Outward does both." +msgstr "" + +msgid "Inward and Outward" +msgstr "" + +msgid "Inward" +msgstr "" + +msgid "Outward" +msgstr "" + msgid "Bottom surface pattern" msgstr "Wzór dolnej powierzchni" @@ -13023,12 +13055,12 @@ msgstr "Gęstość wypełnienia" msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used." msgstr "Gęstość wewnętrznego rzadkiego wypełnienia, 100% przekształca całe rzadkie wypełnienie w wypełnienie pełne, a użyty zostanie wzór wewnętrznego pełnego wypełnienia" -msgid "Align infill direction to model" +msgid "Align directions to model" msgstr "" msgid "" -"Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" -"When enabled, directions rotate with the model to maintain optimal strength characteristics." +"Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n" +"When enabled, these directions rotate together with the model so the printed features keep their intended orientation relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed." msgstr "" msgid "Insert solid layers" @@ -15121,6 +15153,18 @@ msgstr "Wyczyść wszystkie używane ekstrudery" msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." msgstr "Jeśli włączone, wszystkie extrudery do drukowania będą przygotowane na przedniej krawędzi stołu drukującego na początku druku." +msgid "Toolchange ordering" +msgstr "" + +msgid "" +"Determines the order of tool changes on each layer.\n" +"- Default: Starts with the last used extruder to minimize tool changes.\n" +"- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool." +msgstr "" + +msgid "Cyclic" +msgstr "" + msgid "Slice gap closing radius" msgstr "Promień zamykania szpar" @@ -15559,6 +15603,45 @@ 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 "" + +msgid "" +"Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts (or distinct 3D objects) each get their own.\n" +"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n" +"Affects line and grid patterns and rotation-template infills.\n" +"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected." +msgstr "" + +msgid "Center surface pattern on" +msgstr "" + +msgid "" +"Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, Octagram Spiral) is placed.\n" +" - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n" +" - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; parts detached from the rest each get their own.\n" +" - Each Assembly: uses a single shared center for the whole object or assembly." +msgstr "" + +msgid "Each Surface" +msgstr "" + +msgid "Each Model" +msgstr "" + +msgid "Each Assembly" +msgstr "" + # TODO: Review, changed by lang refactor. PR 14254 msgid "This is the speed at which traveling is done." msgstr "Prędkość przemieszczania, która jest szybsza i bez ekstruzji" @@ -19563,6 +19646,13 @@ 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 "Continue to sync filaments" +#~ msgstr "Kontynuuj aby zsynchronizować filamenty" + +#~ msgctxt "Sync_Nozzle_AMS" +#~ msgid "Cancel" +#~ msgstr "Anuluj" + #~ msgid "Print" #~ msgstr "Drukuj" diff --git a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po index 6ae978621f..9e52cc130f 100644 --- a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po +++ b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-07 16:46-0300\n" +"POT-Creation-Date: 2026-07-12 12:27-0300\n" "PO-Revision-Date: 2026-07-04 11:51-0300\n" "Last-Translator: Alexandre Folle de Menezes\n" "Language-Team: Portuguese, Brazilian\n" @@ -164,6 +164,12 @@ msgstr "Preencher" msgid "Gap Fill" msgstr "Preencher vão" +msgid "Vertical" +msgstr "Vertical" + +msgid "Horizontal" +msgstr "Horizontal" + #, boost-format msgid "Allows painting only on facets selected by: \"%1%\"" msgstr "Permite pintura apenas em facetas selecionadas por: \"%1%\"" @@ -256,12 +262,6 @@ msgstr "Triângulo" msgid "Height Range" msgstr "Intervalo de Altura" -msgid "Vertical" -msgstr "Vertical" - -msgid "Horizontal" -msgstr "Horizontal" - msgid "Remove painted color" msgstr "Remover cor pintada" @@ -5624,15 +5624,6 @@ msgstr "Exportar configuração atual para arquivos" msgid "Export" msgstr "Exportar" -msgid "Sync Presets" -msgstr "Sincronizar Predefinições" - -msgid "Pull and apply the latest presets from OrcaCloud" -msgstr "Baixar e aplicar as predefinições mais recentes do OrcaCloud" - -msgid "You must be logged in to sync presets from cloud." -msgstr "Você precisa estar logado para sincronizar as predefinições da nuvem." - msgid "Quit" msgstr "Sair" @@ -5749,6 +5740,15 @@ msgstr "Visualizar" msgid "Preset Bundle" msgstr "Pacote de Predefinições" +msgid "Sync Presets" +msgstr "Sincronizar Predefinições" + +msgid "Pull and apply the latest presets from OrcaCloud" +msgstr "Baixar e aplicar as predefinições mais recentes do OrcaCloud" + +msgid "You must be logged in to sync presets from cloud." +msgstr "Você precisa estar logado para sincronizar as predefinições da nuvem." + msgid "Syncing presets from cloud…" msgstr "Sincronizando predefinições da nuvem…" @@ -10247,12 +10247,8 @@ msgstr "Informações do bico sincronizadas com sucesso." msgid "Successfully synchronized nozzle and AMS number information." msgstr "Informações do bico e do número de AMS sincronizadas com sucesso." -msgid "Continue to sync filaments" -msgstr "Continue a sincronizar os filamentos" - -msgctxt "Sync_Nozzle_AMS" -msgid "Cancel" -msgstr "Cancelar" +msgid "Do you want to continue to sync filaments?" +msgstr "" msgid "Successfully synchronized filament color from printer." msgstr "Cor de filamento da impressora sincronizado com sucesso." @@ -11558,7 +11554,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 infill 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." @@ -11572,7 +11568,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 infill 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." @@ -12304,6 +12300,42 @@ msgstr "Densidade da superfície superior" msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion." msgstr "Densidade da camada superior. Um valor de 100% cria uma camada superior totalmente sólida e lisa. Reduzir esse valor resulta em uma superfície superior texturizada, de acordo com o padrão de superfície superior escolhido. Um valor de 0% resultará na criação apenas das paredes da camada superior. Destinado a fins estéticos ou funcionais, não para corrigir problemas como extrusão excessiva." +msgid "Top surface expansion" +msgstr "" + +msgid "" +"Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n" +"Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane.Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top.The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection." +msgstr "" + +msgid "Top expansion wall margin" +msgstr "" + +msgid "" +"Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n" +"This can cause contraction marks (such as the hull line) on the outer walls.\n" +"By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark." +msgstr "" + +msgid "Top expansion direction" +msgstr "" + +msgid "" +"Direction in which the top surface expansion grows.\n" +" - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n" +" - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n" +" - Inward and Outward does both." +msgstr "" + +msgid "Inward and Outward" +msgstr "" + +msgid "Inward" +msgstr "" + +msgid "Outward" +msgstr "" + msgid "Bottom surface pattern" msgstr "Padrão de superfície inferior" @@ -12953,15 +12985,13 @@ msgstr "Densidade do preenchimento esparso" msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used." msgstr "Densidade do preenchimento esparso interno, 100% transforma todo o preenchimento esparso em preenchimento sólido e será usado o padrão de preenchimento sólido interno." -msgid "Align infill direction to model" -msgstr "Alinhar direção do preenchimento ao modelo" +msgid "Align directions to model" +msgstr "" msgid "" -"Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" -"When enabled, directions rotate with the model to maintain optimal strength characteristics." +"Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n" +"When enabled, these directions rotate together with the model so the printed features keep their intended orientation relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed." msgstr "" -"Alinha as direções do preenchimento, das pontes, do alisamento e do preenchimento de superfícies à orientação do modelo na mesa de impressão.\n" -"Quando ativado, as direções giram com o modelo para manter características ideais de resistência." msgid "Insert solid layers" msgstr "Inserir camadas sólidas" @@ -15107,6 +15137,18 @@ msgstr "Preparar todas as extrusoras de impressão" msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." msgstr "Se ativado, todos as extrusoras de impressão serão preparados na borda frontal da mesa de impressão no início da impressão." +msgid "Toolchange ordering" +msgstr "" + +msgid "" +"Determines the order of tool changes on each layer.\n" +"- Default: Starts with the last used extruder to minimize tool changes.\n" +"- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool." +msgstr "" + +msgid "Cyclic" +msgstr "" + msgid "Slice gap closing radius" msgstr "Raio de fechamento de vãos de fatiamento" @@ -15534,6 +15576,45 @@ 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 "" + +msgid "" +"Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts (or distinct 3D objects) each get their own.\n" +"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n" +"Affects line and grid patterns and rotation-template infills.\n" +"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected." +msgstr "" + +msgid "Center surface pattern on" +msgstr "" + +msgid "" +"Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, Octagram Spiral) is placed.\n" +" - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n" +" - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; parts detached from the rest each get their own.\n" +" - Each Assembly: uses a single shared center for the whole object or assembly." +msgstr "" + +msgid "Each Surface" +msgstr "" + +msgid "Each Model" +msgstr "" + +msgid "Each Assembly" +msgstr "" + # TODO: Review, changed by lang refactor. PR 14254 msgid "This is the speed at which traveling is done." msgstr "Essa é a velocidade em que o deslocamento é feito." @@ -19510,6 +19591,23 @@ 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 "Continue to sync filaments" +#~ msgstr "Continue a sincronizar os filamentos" + +#~ msgctxt "Sync_Nozzle_AMS" +#~ msgid "Cancel" +#~ msgstr "Cancelar" + +#~ msgid "Align infill direction to model" +#~ msgstr "Alinhar direção do preenchimento ao modelo" + +#~ msgid "" +#~ "Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" +#~ "When enabled, directions rotate with the model to maintain optimal strength characteristics." +#~ msgstr "" +#~ "Alinha as direções do preenchimento, das pontes, do alisamento e do preenchimento de superfícies à orientação do modelo na mesa de impressão.\n" +#~ "Quando ativado, as direções giram com o modelo para manter características ideais de resistência." + #~ msgid "Print" #~ msgstr "Imprimir" diff --git a/localization/i18n/ru/OrcaSlicer_ru.po b/localization/i18n/ru/OrcaSlicer_ru.po index 4e6f9ba35d..3835274559 100644 --- a/localization/i18n/ru/OrcaSlicer_ru.po +++ b/localization/i18n/ru/OrcaSlicer_ru.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: OrcaSlicer V2.5.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-07 16:46-0300\n" +"POT-Creation-Date: 2026-07-12 12:27-0300\n" "PO-Revision-Date: 2026-02-25 13:38+0300\n" "Last-Translator: Felix14_v2\n" "Language-Team: Felix14_v2 (ДС/ТГ: @felix14_v2, почта: aleks111001@list.ru), Andylg \n" @@ -173,6 +173,12 @@ msgstr "Заливка" msgid "Gap Fill" msgstr "Заливка вкраплений" +msgid "Vertical" +msgstr "Вертикальная линия" + +msgid "Horizontal" +msgstr "Горизонтальная линия" + #, boost-format msgid "Allows painting only on facets selected by: \"%1%\"" msgstr "Ограничить область работы инструмента настройкой «%1%»" @@ -267,12 +273,6 @@ msgstr "Треугольник" msgid "Height Range" msgstr "Диапазон высот" -msgid "Vertical" -msgstr "Вертикальная линия" - -msgid "Horizontal" -msgstr "Горизонтальная линия" - msgid "Remove painted color" msgstr "Удаление окрашенного участка" @@ -5781,15 +5781,6 @@ msgstr "Экспортировать текущую конфигурацию в msgid "Export" msgstr "Экспорт" -msgid "Sync Presets" -msgstr "" - -msgid "Pull and apply the latest presets from OrcaCloud" -msgstr "" - -msgid "You must be logged in to sync presets from cloud." -msgstr "" - msgid "Quit" msgstr "Выход" @@ -5904,6 +5895,15 @@ msgstr "Вид" msgid "Preset Bundle" msgstr "" +msgid "Sync Presets" +msgstr "" + +msgid "Pull and apply the latest presets from OrcaCloud" +msgstr "" + +msgid "You must be logged in to sync presets from cloud." +msgstr "" + msgid "Syncing presets from cloud…" msgstr "" @@ -10442,12 +10442,8 @@ msgstr "Информация о сопле успешно синхронизир msgid "Successfully synchronized nozzle and AMS number information." msgstr "Информация о сопле и количестве AMS успешно синхронизирована." -msgid "Continue to sync filaments" -msgstr "Продолжить синхронизацию филаментов" - -msgctxt "Sync_Nozzle_AMS" -msgid "Cancel" -msgstr "Отмена" +msgid "Do you want to continue to sync filaments?" +msgstr "" msgid "Successfully synchronized filament color from printer." msgstr "Цвет материала успешно синхронизирован с принтером." @@ -11736,7 +11732,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 infill 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." @@ -11750,7 +11746,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 infill 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." @@ -12507,6 +12503,42 @@ msgstr "Плотность верхней поверхности" msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion." msgstr "Плотность верхней поверхности. Если установить 100%, поверхность будет сплошной и гладкой. Уменьшение этого параметра создаст текстурированную поверхность в соответствии с выбранным шаблоном заполнения верхней поверхности. При значении 0% останутся только стенки верхнего слоя. Эта функция предназначена для улучшения внешнего вида или функциональности объекта, но не для решения проблем, таких как чрезмерная экструзия." +msgid "Top surface expansion" +msgstr "" + +msgid "" +"Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n" +"Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane.Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top.The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection." +msgstr "" + +msgid "Top expansion wall margin" +msgstr "" + +msgid "" +"Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n" +"This can cause contraction marks (such as the hull line) on the outer walls.\n" +"By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark." +msgstr "" + +msgid "Top expansion direction" +msgstr "" + +msgid "" +"Direction in which the top surface expansion grows.\n" +" - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n" +" - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n" +" - Inward and Outward does both." +msgstr "" + +msgid "Inward and Outward" +msgstr "" + +msgid "Inward" +msgstr "" + +msgid "Outward" +msgstr "" + msgid "Bottom surface pattern" msgstr "Шаблон заполнения нижней поверхности" @@ -13229,12 +13261,12 @@ msgstr "Плотность заполнения" msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used." msgstr "Плотность внутреннего заполнения, выраженная в процентах. 100% означает сплошное заполнение." -msgid "Align infill direction to model" -msgstr "Вращать заполнение с моделью" +msgid "Align directions to model" +msgstr "" msgid "" -"Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" -"When enabled, directions rotate with the model to maintain optimal strength characteristics." +"Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n" +"When enabled, these directions rotate together with the model so the printed features keep their intended orientation relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed." msgstr "" msgid "Insert solid layers" @@ -15508,6 +15540,18 @@ msgstr "Подготовка всех печатающих экструдеро msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." msgstr "Если этот параметр включён, все печатающие экструдеры в начале печати будут подготавливаться на переднем крае стола." +msgid "Toolchange ordering" +msgstr "" + +msgid "" +"Determines the order of tool changes on each layer.\n" +"- Default: Starts with the last used extruder to minimize tool changes.\n" +"- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool." +msgstr "" + +msgid "Cyclic" +msgstr "" + msgid "Slice gap closing radius" msgstr "Радиус закрытия зазоров полигональной сетки" @@ -15991,6 +16035,45 @@ 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 "" + +msgid "" +"Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts (or distinct 3D objects) each get their own.\n" +"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n" +"Affects line and grid patterns and rotation-template infills.\n" +"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected." +msgstr "" + +msgid "Center surface pattern on" +msgstr "" + +msgid "" +"Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, Octagram Spiral) is placed.\n" +" - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n" +" - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; parts detached from the rest each get their own.\n" +" - Each Assembly: uses a single shared center for the whole object or assembly." +msgstr "" + +msgid "Each Surface" +msgstr "" + +msgid "Each Model" +msgstr "" + +msgid "Each Assembly" +msgstr "" + msgid "This is the speed at which traveling is done." msgstr "Ограничение скорости холостых перемещений печатающей головы." @@ -20117,6 +20200,16 @@ msgstr "" "Предотвращение коробления материала\n" "Знаете ли вы, что при печати материалами, склонными к короблению, таких как ABS, повышение температуры подогреваемого стола может снизить эту вероятность?" +#~ msgid "Continue to sync filaments" +#~ msgstr "Продолжить синхронизацию филаментов" + +#~ msgctxt "Sync_Nozzle_AMS" +#~ msgid "Cancel" +#~ msgstr "Отмена" + +#~ msgid "Align infill direction to model" +#~ msgstr "Вращать заполнение с моделью" + #~ msgid "Print" #~ msgstr "Печать" diff --git a/localization/i18n/sv/OrcaSlicer_sv.po b/localization/i18n/sv/OrcaSlicer_sv.po index 19c2ae1ec6..80a654debd 100644 --- a/localization/i18n/sv/OrcaSlicer_sv.po +++ b/localization/i18n/sv/OrcaSlicer_sv.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-07 16:46-0300\n" +"POT-Creation-Date: 2026-07-12 12:27-0300\n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -159,6 +159,12 @@ msgstr "Fyll" msgid "Gap Fill" msgstr "Gap Fyllning" +msgid "Vertical" +msgstr "Vertikal" + +msgid "Horizontal" +msgstr "Horisontell" + #, boost-format msgid "Allows painting only on facets selected by: \"%1%\"" msgstr "Tillåter målning endast på fasetter som valts av: ”%1%”" @@ -254,12 +260,6 @@ msgstr "Triangel" msgid "Height Range" msgstr "Höjd intervall" -msgid "Vertical" -msgstr "Vertikal" - -msgid "Horizontal" -msgstr "Horisontell" - msgid "Remove painted color" msgstr "Ta bort färgläggning" @@ -5638,15 +5638,6 @@ msgstr "Exportera aktuell konfiguration till filer" msgid "Export" msgstr "Exportera" -msgid "Sync Presets" -msgstr "" - -msgid "Pull and apply the latest presets from OrcaCloud" -msgstr "" - -msgid "You must be logged in to sync presets from cloud." -msgstr "" - msgid "Quit" msgstr "Avsluta" @@ -5763,6 +5754,15 @@ msgstr "Vy" msgid "Preset Bundle" msgstr "" +msgid "Sync Presets" +msgstr "" + +msgid "Pull and apply the latest presets from OrcaCloud" +msgstr "" + +msgid "You must be logged in to sync presets from cloud." +msgstr "" + msgid "Syncing presets from cloud…" msgstr "" @@ -10181,13 +10181,9 @@ msgstr "" msgid "Successfully synchronized nozzle and AMS number information." msgstr "" -msgid "Continue to sync filaments" +msgid "Do you want to continue to sync filaments?" msgstr "" -msgctxt "Sync_Nozzle_AMS" -msgid "Cancel" -msgstr "Avbryt" - msgid "Successfully synchronized filament color from printer." msgstr "" @@ -11481,7 +11477,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 infill 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." @@ -11495,7 +11491,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 infill 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." @@ -12137,6 +12133,42 @@ msgstr "" msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion." msgstr "" +msgid "Top surface expansion" +msgstr "" + +msgid "" +"Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n" +"Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane.Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top.The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection." +msgstr "" + +msgid "Top expansion wall margin" +msgstr "" + +msgid "" +"Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n" +"This can cause contraction marks (such as the hull line) on the outer walls.\n" +"By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark." +msgstr "" + +msgid "Top expansion direction" +msgstr "" + +msgid "" +"Direction in which the top surface expansion grows.\n" +" - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n" +" - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n" +" - Inward and Outward does both." +msgstr "" + +msgid "Inward and Outward" +msgstr "" + +msgid "Inward" +msgstr "" + +msgid "Outward" +msgstr "" + msgid "Bottom surface pattern" msgstr "Botten ytans mönster" @@ -12752,12 +12784,12 @@ msgstr "Sparsam ifyllnads densitet" msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used." msgstr "" -msgid "Align infill direction to model" +msgid "Align directions to model" msgstr "" msgid "" -"Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" -"When enabled, directions rotate with the model to maintain optimal strength characteristics." +"Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n" +"When enabled, these directions rotate together with the model so the printed features keep their intended orientation relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed." msgstr "" msgid "Insert solid layers" @@ -14764,6 +14796,18 @@ msgstr "" msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." msgstr "" +msgid "Toolchange ordering" +msgstr "" + +msgid "" +"Determines the order of tool changes on each layer.\n" +"- Default: Starts with the last used extruder to minimize tool changes.\n" +"- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool." +msgstr "" + +msgid "Cyclic" +msgstr "" + msgid "Slice gap closing radius" msgstr "Bered spaltens stängningsradie" @@ -15191,6 +15235,45 @@ 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 "" + +msgid "" +"Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts (or distinct 3D objects) each get their own.\n" +"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n" +"Affects line and grid patterns and rotation-template infills.\n" +"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected." +msgstr "" + +msgid "Center surface pattern on" +msgstr "" + +msgid "" +"Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, Octagram Spiral) is placed.\n" +" - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n" +" - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; parts detached from the rest each get their own.\n" +" - Each Assembly: uses a single shared center for the whole object or assembly." +msgstr "" + +msgid "Each Surface" +msgstr "" + +msgid "Each Model" +msgstr "" + +msgid "Each Assembly" +msgstr "" + # TODO: Review, changed by lang refactor. PR 14254 msgid "This is the speed at which traveling is done." msgstr "Förflyttnings hastighet" @@ -19076,6 +19159,10 @@ 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?" +#~ msgctxt "Sync_Nozzle_AMS" +#~ msgid "Cancel" +#~ msgstr "Avbryt" + #~ msgid "Print" #~ msgstr "Skriv ut" diff --git a/localization/i18n/th/OrcaSlicer_th.po b/localization/i18n/th/OrcaSlicer_th.po index 0e1b189984..7459512c18 100644 --- a/localization/i18n/th/OrcaSlicer_th.po +++ b/localization/i18n/th/OrcaSlicer_th.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-07 16:46-0300\n" +"POT-Creation-Date: 2026-07-12 12:27-0300\n" "PO-Revision-Date: 2026-06-19 13:40+0700\n" "Last-Translator: Icezaza\n" "Language-Team: Thai\n" @@ -162,6 +162,12 @@ msgstr "เติม" msgid "Gap Fill" msgstr "เติมช่องว่าง" +msgid "Vertical" +msgstr "แนวตั้ง" + +msgid "Horizontal" +msgstr "แนวนอน" + #, boost-format msgid "Allows painting only on facets selected by: \"%1%\"" msgstr "อนุญาตให้วาดภาพเฉพาะด้านที่เลือกโดย: \"%1%\"" @@ -254,12 +260,6 @@ msgstr "สามเหลี่ยม" msgid "Height Range" msgstr "ช่วงความสูง" -msgid "Vertical" -msgstr "แนวตั้ง" - -msgid "Horizontal" -msgstr "แนวนอน" - msgid "Remove painted color" msgstr "ลบสีที่ทาสี" @@ -5584,15 +5584,6 @@ msgstr "ส่งออกการกำหนดค่าปัจจุบั msgid "Export" msgstr "ส่งออก" -msgid "Sync Presets" -msgstr "ซิงค์พรีเซ็ต" - -msgid "Pull and apply the latest presets from OrcaCloud" -msgstr "ดึงและใช้ค่าที่ตั้งล่วงหน้าล่าสุดจาก OrcaCloud" - -msgid "You must be logged in to sync presets from cloud." -msgstr "คุณต้องเข้าสู่ระบบเพื่อซิงค์ค่าที่ตั้งล่วงหน้าจากคลาวด์" - msgid "Quit" msgstr "ออก" @@ -5707,6 +5698,15 @@ msgstr "มุมมอง" msgid "Preset Bundle" msgstr "ชุดที่ตั้งไว้ล่วงหน้า" +msgid "Sync Presets" +msgstr "ซิงค์พรีเซ็ต" + +msgid "Pull and apply the latest presets from OrcaCloud" +msgstr "ดึงและใช้ค่าที่ตั้งล่วงหน้าล่าสุดจาก OrcaCloud" + +msgid "You must be logged in to sync presets from cloud." +msgstr "คุณต้องเข้าสู่ระบบเพื่อซิงค์ค่าที่ตั้งล่วงหน้าจากคลาวด์" + msgid "Syncing presets from cloud…" msgstr "กำลังซิงค์ค่าที่ตั้งล่วงหน้าจากคลาวด์..." @@ -10141,12 +10141,8 @@ msgstr "ซิงโครไนซ์ข้อมูลหัวฉีดสำ msgid "Successfully synchronized nozzle and AMS number information." msgstr "ซิงโครไนซ์ข้อมูลหัวฉีดและหมายเลข AMS เรียบร้อยแล้ว" -msgid "Continue to sync filaments" -msgstr "ทำการซิงค์ฟิลาเมนต์ต่อไป" - -msgctxt "Sync_Nozzle_AMS" -msgid "Cancel" -msgstr "ยกเลิก" +msgid "Do you want to continue to sync filaments?" +msgstr "" msgid "Successfully synchronized filament color from printer." msgstr "ซิงโครไนซ์สีฟิลาเมนต์จากเครื่องพิมพ์สำเร็จแล้ว" @@ -11418,19 +11414,11 @@ 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 infill 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." msgstr "" -"แทนที่มุมสะพานด้านนอก\n" -"หากปล่อยเป็นศูนย์ มุมสะพานจะคำนวณอัตโนมัติสำหรับสะพานแต่ละจุด\n" -"มิฉะนั้นจะใช้มุมที่กำหนดตาม:\n" -" - พิกัดสัมบูรณ์\n" -" - พิกัดสัมบูรณ์ + การหมุนโมเดล: หากเปิดใช้งานจัดทิศทางไส้ในให้สอดคล้องกับโมเดล\n" -" - มุมอัตโนมัติที่เหมาะสม + ค่านี้: หากเปิดใช้งาน 'มุมสะพานแบบสัมพันธ์'\n" -"\n" -"ใช้ 180° สำหรับมุมสัมบูรณ์ศูนย์" msgid "Internal bridge infill direction" msgstr "ทิศทางไส้ในสะพานภายใน" @@ -11440,19 +11428,11 @@ 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 infill 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." msgstr "" -"แทนที่มุมสะพานด้านใน\n" -"หากปล่อยเป็นศูนย์ มุมสะพานจะคำนวณอัตโนมัติสำหรับสะพานแต่ละจุด\n" -"มิฉะนั้นจะใช้มุมที่กำหนดตาม:\n" -" - พิกัดสัมบูรณ์\n" -" - พิกัดสัมบูรณ์ + การหมุนโมเดล: หากเปิดใช้งานจัดทิศทางไส้ในให้สอดคล้องกับโมเดล\n" -" - มุมอัตโนมัติที่เหมาะสม + ค่านี้: หากเปิดใช้งาน 'มุมสะพานแบบสัมพันธ์'\n" -"\n" -"ใช้ 180° สำหรับมุมสัมบูรณ์ศูนย์" msgid "Relative bridge angle" msgstr "มุมสะพานแบบสัมพันธ์" @@ -12222,6 +12202,42 @@ msgstr "ความหนาแน่นผิวด้านบน" msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion." msgstr "ความหนาแน่นของชั้นผิวด้านบน ค่า 100% จะสร้างชั้นบนสุดที่เรียบและแข็งเต็มที่ การลดค่านี้ส่งผลให้พื้นผิวด้านบนมีพื้นผิวตามรูปแบบพื้นผิวด้านบนที่เลือก ค่า 0% จะส่งผลให้มีการสร้างเฉพาะผนังชั้นบนสุดเท่านั้น มีวัตถุประสงค์เพื่อความสวยงามหรือการใช้งาน ไม่ใช่เพื่อแก้ไขปัญหา เช่น การอัดขึ้นรูปมากเกินไป" +msgid "Top surface expansion" +msgstr "" + +msgid "" +"Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n" +"Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane.Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top.The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection." +msgstr "" + +msgid "Top expansion wall margin" +msgstr "" + +msgid "" +"Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n" +"This can cause contraction marks (such as the hull line) on the outer walls.\n" +"By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark." +msgstr "" + +msgid "Top expansion direction" +msgstr "" + +msgid "" +"Direction in which the top surface expansion grows.\n" +" - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n" +" - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n" +" - Inward and Outward does both." +msgstr "" + +msgid "Inward and Outward" +msgstr "" + +msgid "Inward" +msgstr "" + +msgid "Outward" +msgstr "" + msgid "Bottom surface pattern" msgstr "รูปแบบผิวด้านล่าง" @@ -12872,15 +12888,13 @@ msgstr "ความหนาแน่นไส้ในแบบโปร่ง msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used." msgstr "ความหนาแน่นของไส้ในแบบโปร่งภายใน 100% จะเปลี่ยนไส้ในแบบโปร่งทั้งหมดให้เป็นไส้ในแบบทึบ และจะใช้รูปแบบไส้ในแบบทึบภายใน" -msgid "Align infill direction to model" -msgstr "จัดทิศทาง ไส้ใน ให้ตรงกับโมเดล" +msgid "Align directions to model" +msgstr "" msgid "" -"Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" -"When enabled, directions rotate with the model to maintain optimal strength characteristics." +"Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n" +"When enabled, these directions rotate together with the model so the printed features keep their intended orientation relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed." msgstr "" -"จัดทิศทางไส้ใน สะพาน การรีดเรียบ และการเติมผิวให้สอดคล้องกับการวางแนวของโมเดลบนฐานรองพิมพ์\n" -"เมื่อเปิดใช้งาน ทิศทางจะหมุนตามโมเดลเพื่อรักษาคุณสมบัติความแข็งแรงที่เหมาะสม" msgid "Insert solid layers" msgstr "แทรกชั้นทึบ" @@ -14969,6 +14983,18 @@ msgstr "ใช้ชุดดันเส้นการพิมพ์ทั้ msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." msgstr "หากเปิดใช้งาน ชุดดันเส้นการพิมพ์ทั้งหมดจะถูกลงสีพื้นที่ขอบด้านหน้าของฐานพิมพ์เมื่อเริ่มต้นการพิมพ์" +msgid "Toolchange ordering" +msgstr "" + +msgid "" +"Determines the order of tool changes on each layer.\n" +"- Default: Starts with the last used extruder to minimize tool changes.\n" +"- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool." +msgstr "" + +msgid "Cyclic" +msgstr "" + msgid "Slice gap closing radius" msgstr "รัศมีการปิดช่องว่างของ Slice" @@ -15392,6 +15418,45 @@ 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 "" + +msgid "" +"Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts (or distinct 3D objects) each get their own.\n" +"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n" +"Affects line and grid patterns and rotation-template infills.\n" +"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected." +msgstr "" + +msgid "Center surface pattern on" +msgstr "" + +msgid "" +"Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, Octagram Spiral) is placed.\n" +" - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n" +" - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; parts detached from the rest each get their own.\n" +" - Each Assembly: uses a single shared center for the whole object or assembly." +msgstr "" + +msgid "Each Surface" +msgstr "" + +msgid "Each Model" +msgstr "" + +msgid "Each Assembly" +msgstr "" + msgid "This is the speed at which traveling is done." msgstr "ความเร็วที่ใช้ในการเคลื่อนที่แบบไม่อัดเส้น" @@ -19366,6 +19431,62 @@ msgstr "" "หลีกเลี่ยงการบิดเบี้ยว\n" "คุณรู้หรือไม่ว่าเมื่อพิมพ์วัสดุที่มีแนวโน้มที่จะเกิดการบิดเบี้ยว เช่น ABS การเพิ่มอุณหภูมิฐานพิมพ์อย่างเหมาะสมสามารถลดความน่าจะเป็นของการบิดเบี้ยวได้" +#~ msgid "Continue to sync filaments" +#~ msgstr "ทำการซิงค์ฟิลาเมนต์ต่อไป" + +#~ msgctxt "Sync_Nozzle_AMS" +#~ msgid "Cancel" +#~ msgstr "ยกเลิก" + +#, no-c-format, no-boost-format +#~ msgid "" +#~ "External Bridging angle override.\n" +#~ "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 infill direction 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." +#~ msgstr "" +#~ "แทนที่มุมสะพานด้านนอก\n" +#~ "หากปล่อยเป็นศูนย์ มุมสะพานจะคำนวณอัตโนมัติสำหรับสะพานแต่ละจุด\n" +#~ "มิฉะนั้นจะใช้มุมที่กำหนดตาม:\n" +#~ " - พิกัดสัมบูรณ์\n" +#~ " - พิกัดสัมบูรณ์ + การหมุนโมเดล: หากเปิดใช้งานจัดทิศทางไส้ในให้สอดคล้องกับโมเดล\n" +#~ " - มุมอัตโนมัติที่เหมาะสม + ค่านี้: หากเปิดใช้งาน 'มุมสะพานแบบสัมพันธ์'\n" +#~ "\n" +#~ "ใช้ 180° สำหรับมุมสัมบูรณ์ศูนย์" + +#~ msgid "" +#~ "Internal Bridging angle override.\n" +#~ "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 infill direction 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." +#~ msgstr "" +#~ "แทนที่มุมสะพานด้านใน\n" +#~ "หากปล่อยเป็นศูนย์ มุมสะพานจะคำนวณอัตโนมัติสำหรับสะพานแต่ละจุด\n" +#~ "มิฉะนั้นจะใช้มุมที่กำหนดตาม:\n" +#~ " - พิกัดสัมบูรณ์\n" +#~ " - พิกัดสัมบูรณ์ + การหมุนโมเดล: หากเปิดใช้งานจัดทิศทางไส้ในให้สอดคล้องกับโมเดล\n" +#~ " - มุมอัตโนมัติที่เหมาะสม + ค่านี้: หากเปิดใช้งาน 'มุมสะพานแบบสัมพันธ์'\n" +#~ "\n" +#~ "ใช้ 180° สำหรับมุมสัมบูรณ์ศูนย์" + +#~ msgid "Align infill direction to model" +#~ msgstr "จัดทิศทาง ไส้ใน ให้ตรงกับโมเดล" + +#~ msgid "" +#~ "Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" +#~ "When enabled, directions rotate with the model to maintain optimal strength characteristics." +#~ msgstr "" +#~ "จัดทิศทางไส้ใน สะพาน การรีดเรียบ และการเติมผิวให้สอดคล้องกับการวางแนวของโมเดลบนฐานรองพิมพ์\n" +#~ "เมื่อเปิดใช้งาน ทิศทางจะหมุนตามโมเดลเพื่อรักษาคุณสมบัติความแข็งแรงที่เหมาะสม" + #~ msgid "Print" #~ msgstr "พิมพ์" diff --git a/localization/i18n/tr/OrcaSlicer_tr.po b/localization/i18n/tr/OrcaSlicer_tr.po index 29c2c26115..50c2dd4e78 100644 --- a/localization/i18n/tr/OrcaSlicer_tr.po +++ b/localization/i18n/tr/OrcaSlicer_tr.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-07 16:46-0300\n" +"POT-Creation-Date: 2026-07-12 12:27-0300\n" "PO-Revision-Date: 2026-04-08 23:59+0300\n" "Last-Translator: GlauTech\n" "Language-Team: \n" @@ -162,6 +162,12 @@ msgstr "Doldur" msgid "Gap Fill" msgstr "Boşluk doldurma" +msgid "Vertical" +msgstr "Dikey" + +msgid "Horizontal" +msgstr "Yatay" + #, boost-format msgid "Allows painting only on facets selected by: \"%1%\"" msgstr "Yalnızca şu kişi tarafından seçilen yüzeylerde boyamaya izin verir: \"%1%\"" @@ -257,12 +263,6 @@ msgstr "Üçgen" msgid "Height Range" msgstr "Yükseklik Aralığı" -msgid "Vertical" -msgstr "Dikey" - -msgid "Horizontal" -msgstr "Yatay" - msgid "Remove painted color" msgstr "Boyalı rengi kaldır" @@ -5712,15 +5712,6 @@ msgstr "Geçerli yapılandırmayı dosyalara aktar" msgid "Export" msgstr "Dışa Aktar" -msgid "Sync Presets" -msgstr "" - -msgid "Pull and apply the latest presets from OrcaCloud" -msgstr "" - -msgid "You must be logged in to sync presets from cloud." -msgstr "" - msgid "Quit" msgstr "Çıkış" @@ -5837,6 +5828,15 @@ msgstr "Görünüm" msgid "Preset Bundle" msgstr "" +msgid "Sync Presets" +msgstr "" + +msgid "Pull and apply the latest presets from OrcaCloud" +msgstr "" + +msgid "You must be logged in to sync presets from cloud." +msgstr "" + msgid "Syncing presets from cloud…" msgstr "" @@ -10325,12 +10325,8 @@ msgstr "Püskürtme ucu bilgileri başarıyla senkronize edildi." msgid "Successfully synchronized nozzle and AMS number information." msgstr "Nozul ve AMS numarası bilgileri başarıyla senkronize edildi." -msgid "Continue to sync filaments" -msgstr "Filamentleri senkronize etmeye devam edin" - -msgctxt "Sync_Nozzle_AMS" -msgid "Cancel" -msgstr "İptal etmek" +msgid "Do you want to continue to sync filaments?" +msgstr "" msgid "Successfully synchronized filament color from printer." msgstr "Filament rengi yazıcıdan başarıyla senkronize edildi." @@ -11655,7 +11651,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 infill 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." @@ -11669,7 +11665,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 infill 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." @@ -12395,6 +12391,42 @@ msgstr "Üst yüzey yoğunluğu" msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion." msgstr "Üst yüzey katmanının yoğunluğu. %100 değeri, tamamen sağlam ve pürüzsüz bir üst katman oluşturur. Bu değerin düşürülmesi, seçilen üst yüzey desenine göre dokulu bir üst yüzey elde edilmesini sağlar. %0 değeri ise yalnızca üst katmandaki duvarların oluşturulmasını sağlar. Estetik veya işlevsel amaçlar için tasarlanmıştır, aşırı ekstrüzyon gibi sorunları gidermek için değildir." +msgid "Top surface expansion" +msgstr "" + +msgid "" +"Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n" +"Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane.Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top.The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection." +msgstr "" + +msgid "Top expansion wall margin" +msgstr "" + +msgid "" +"Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n" +"This can cause contraction marks (such as the hull line) on the outer walls.\n" +"By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark." +msgstr "" + +msgid "Top expansion direction" +msgstr "" + +msgid "" +"Direction in which the top surface expansion grows.\n" +" - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n" +" - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n" +" - Inward and Outward does both." +msgstr "" + +msgid "Inward and Outward" +msgstr "" + +msgid "Inward" +msgstr "" + +msgid "Outward" +msgstr "" + msgid "Bottom surface pattern" msgstr "Alt yüzey deseni" @@ -13057,12 +13089,12 @@ msgstr "Dolgu yoğunluğu" msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used." msgstr "İç seyrek dolgunun yoğunluğu, %100 tüm seyrek dolguyu katı dolguya dönüştürür ve iç katı dolgu modeli kullanılacaktır." -msgid "Align infill direction to model" -msgstr "Dolgu yönünü modele hizalayın" +msgid "Align directions to model" +msgstr "" msgid "" -"Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" -"When enabled, directions rotate with the model to maintain optimal strength characteristics." +"Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n" +"When enabled, these directions rotate together with the model so the printed features keep their intended orientation relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed." msgstr "" msgid "Insert solid layers" @@ -15157,6 +15189,18 @@ msgstr "Tüm ekstruderleri temizle" msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." msgstr "Etkinleştirilirse, tüm baskı ekstruderleri baskının başlangıcında baskı yatağının ön kenarında temizlenecektir." +msgid "Toolchange ordering" +msgstr "" + +msgid "" +"Determines the order of tool changes on each layer.\n" +"- Default: Starts with the last used extruder to minimize tool changes.\n" +"- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool." +msgstr "" + +msgid "Cyclic" +msgstr "" + msgid "Slice gap closing radius" msgstr "Dilim aralığı kapanma yarıçapı" @@ -15602,6 +15646,45 @@ 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 "" + +msgid "" +"Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts (or distinct 3D objects) each get their own.\n" +"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n" +"Affects line and grid patterns and rotation-template infills.\n" +"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected." +msgstr "" + +msgid "Center surface pattern on" +msgstr "" + +msgid "" +"Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, Octagram Spiral) is placed.\n" +" - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n" +" - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; parts detached from the rest each get their own.\n" +" - Each Assembly: uses a single shared center for the whole object or assembly." +msgstr "" + +msgid "Each Surface" +msgstr "" + +msgid "Each Model" +msgstr "" + +msgid "Each Assembly" +msgstr "" + # TODO: Review, changed by lang refactor. PR 14254 msgid "This is the speed at which traveling is done." msgstr "Daha hızlı ve ekstrüzyonsuz seyahat hızı." @@ -19631,6 +19714,16 @@ 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 "Continue to sync filaments" +#~ msgstr "Filamentleri senkronize etmeye devam edin" + +#~ msgctxt "Sync_Nozzle_AMS" +#~ msgid "Cancel" +#~ msgstr "İptal etmek" + +#~ msgid "Align infill direction to model" +#~ msgstr "Dolgu yönünü modele hizalayın" + #~ msgid "Print" #~ msgstr "Yazdır" diff --git a/localization/i18n/uk/OrcaSlicer_uk.po b/localization/i18n/uk/OrcaSlicer_uk.po index 7de6f123b9..313d526f7d 100644 --- a/localization/i18n/uk/OrcaSlicer_uk.po +++ b/localization/i18n/uk/OrcaSlicer_uk.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: orcaslicerua\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-07 16:46-0300\n" +"POT-Creation-Date: 2026-07-12 12:27-0300\n" "PO-Revision-Date: 2025-03-07 09:30+0200\n" "Last-Translator: \n" "Language-Team: Ukrainian\n" @@ -167,6 +167,12 @@ msgstr "Заповнення" msgid "Gap Fill" msgstr "Заповнення прогалин" +msgid "Vertical" +msgstr "Вертикальний" + +msgid "Horizontal" +msgstr "Горизонтальний" + #, boost-format msgid "Allows painting only on facets selected by: \"%1%\"" msgstr "Малювання лише на вибраних гранях: \"%1%\"" @@ -262,12 +268,6 @@ msgstr "Трикутник" msgid "Height Range" msgstr "Діапазон висот" -msgid "Vertical" -msgstr "Вертикальний" - -msgid "Horizontal" -msgstr "Горизонтальний" - msgid "Remove painted color" msgstr "Видалити зафарбований колір" @@ -5713,15 +5713,6 @@ msgstr "Експорт поточної конфігурації до файлі msgid "Export" msgstr "Експорт" -msgid "Sync Presets" -msgstr "" - -msgid "Pull and apply the latest presets from OrcaCloud" -msgstr "" - -msgid "You must be logged in to sync presets from cloud." -msgstr "" - msgid "Quit" msgstr "Вихід" @@ -5838,6 +5829,15 @@ msgstr "Вид" msgid "Preset Bundle" msgstr "" +msgid "Sync Presets" +msgstr "" + +msgid "Pull and apply the latest presets from OrcaCloud" +msgstr "" + +msgid "You must be logged in to sync presets from cloud." +msgstr "" + msgid "Syncing presets from cloud…" msgstr "" @@ -10331,13 +10331,9 @@ msgstr "" msgid "Successfully synchronized nozzle and AMS number information." msgstr "" -msgid "Continue to sync filaments" +msgid "Do you want to continue to sync filaments?" msgstr "" -msgctxt "Sync_Nozzle_AMS" -msgid "Cancel" -msgstr "Скасувати" - msgid "Successfully synchronized filament color from printer." msgstr "" @@ -11665,7 +11661,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 infill 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." @@ -11679,7 +11675,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 infill 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." @@ -12380,6 +12376,42 @@ msgstr "" msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion." msgstr "" +msgid "Top surface expansion" +msgstr "" + +msgid "" +"Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n" +"Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane.Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top.The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection." +msgstr "" + +msgid "Top expansion wall margin" +msgstr "" + +msgid "" +"Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n" +"This can cause contraction marks (such as the hull line) on the outer walls.\n" +"By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark." +msgstr "" + +msgid "Top expansion direction" +msgstr "" + +msgid "" +"Direction in which the top surface expansion grows.\n" +" - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n" +" - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n" +" - Inward and Outward does both." +msgstr "" + +msgid "Inward and Outward" +msgstr "" + +msgid "Inward" +msgstr "" + +msgid "Outward" +msgstr "" + msgid "Bottom surface pattern" msgstr "Шаблон нижньої поверхні" @@ -13039,12 +13071,12 @@ msgstr "Щільність часткового заповнення" msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used." msgstr "Щільність внутрішнього часткового заповнення, 100% перетворює все часткове заповнення на суцільне заповнення, і буде застосовано шаблон внутрішнього суцільного заповнення" -msgid "Align infill direction to model" +msgid "Align directions to model" msgstr "" msgid "" -"Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" -"When enabled, directions rotate with the model to maintain optimal strength characteristics." +"Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n" +"When enabled, these directions rotate together with the model so the printed features keep their intended orientation relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed." msgstr "" msgid "Insert solid layers" @@ -15138,6 +15170,18 @@ msgstr "Підготовка всіх друкуючих екструдерів" msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." msgstr "Якщо увімкнено, усі друкуючі екструдери будуть отестовані на передньому краї друкарського столу перед початком друку." +msgid "Toolchange ordering" +msgstr "" + +msgid "" +"Determines the order of tool changes on each layer.\n" +"- Default: Starts with the last used extruder to minimize tool changes.\n" +"- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool." +msgstr "" + +msgid "Cyclic" +msgstr "" + msgid "Slice gap closing radius" msgstr "Радіус закриття пробілів під час нарізування" @@ -15579,6 +15623,45 @@ 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 "" + +msgid "" +"Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts (or distinct 3D objects) each get their own.\n" +"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n" +"Affects line and grid patterns and rotation-template infills.\n" +"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected." +msgstr "" + +msgid "Center surface pattern on" +msgstr "" + +msgid "" +"Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, Octagram Spiral) is placed.\n" +" - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n" +" - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; parts detached from the rest each get their own.\n" +" - Each Assembly: uses a single shared center for the whole object or assembly." +msgstr "" + +msgid "Each Surface" +msgstr "" + +msgid "Each Model" +msgstr "" + +msgid "Each Assembly" +msgstr "" + # TODO: Review, changed by lang refactor. PR 14254 msgid "This is the speed at which traveling is done." msgstr "Швидкість переміщення, яка є швидше і без екструзії" @@ -19575,6 +19658,10 @@ msgstr "" "Уникнення деформації\n" "Чи знаєте ви, що при друку матеріалами, схильними до деформації, такими як ABS, відповідне підвищення температури гарячого ліжка може зменшити ймовірність деформації?" +#~ msgctxt "Sync_Nozzle_AMS" +#~ msgid "Cancel" +#~ msgstr "Скасувати" + #~ msgid "Print" #~ msgstr "Друк" diff --git a/localization/i18n/vi/OrcaSlicer_vi.po b/localization/i18n/vi/OrcaSlicer_vi.po index a25cc186c6..2de15a856f 100644 --- a/localization/i18n/vi/OrcaSlicer_vi.po +++ b/localization/i18n/vi/OrcaSlicer_vi.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-07 16:46-0300\n" +"POT-Creation-Date: 2026-07-12 12:27-0300\n" "PO-Revision-Date: 2025-10-02 17:43+0700\n" "Last-Translator: \n" "Language-Team: hainguyen.ts13@gmail.com\n" @@ -163,6 +163,12 @@ msgstr "Tô" msgid "Gap Fill" msgstr "Lấp khe" +msgid "Vertical" +msgstr "Dọc" + +msgid "Horizontal" +msgstr "Ngang" + #, boost-format msgid "Allows painting only on facets selected by: \"%1%\"" msgstr "Chỉ cho phép vẽ trên mặt được chọn bởi: \"%1%\"" @@ -258,12 +264,6 @@ msgstr "Tam giác" msgid "Height Range" msgstr "Phạm vi chiều cao" -msgid "Vertical" -msgstr "Dọc" - -msgid "Horizontal" -msgstr "Ngang" - msgid "Remove painted color" msgstr "Xóa màu đã vẽ" @@ -5680,15 +5680,6 @@ msgstr "Xuất cấu hình hiện tại ra file" msgid "Export" msgstr "Xuất" -msgid "Sync Presets" -msgstr "" - -msgid "Pull and apply the latest presets from OrcaCloud" -msgstr "" - -msgid "You must be logged in to sync presets from cloud." -msgstr "" - msgid "Quit" msgstr "Thoát" @@ -5805,6 +5796,15 @@ msgstr "Xem" msgid "Preset Bundle" msgstr "" +msgid "Sync Presets" +msgstr "" + +msgid "Pull and apply the latest presets from OrcaCloud" +msgstr "" + +msgid "You must be logged in to sync presets from cloud." +msgstr "" + msgid "Syncing presets from cloud…" msgstr "" @@ -10248,13 +10248,9 @@ msgstr "" msgid "Successfully synchronized nozzle and AMS number information." msgstr "" -msgid "Continue to sync filaments" +msgid "Do you want to continue to sync filaments?" msgstr "" -msgctxt "Sync_Nozzle_AMS" -msgid "Cancel" -msgstr "Hủy" - msgid "Successfully synchronized filament color from printer." msgstr "" @@ -11578,7 +11574,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 infill 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." @@ -11592,7 +11588,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 infill 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." @@ -12291,6 +12287,42 @@ msgstr "Mật độ bề mặt trên" msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion." msgstr "Mật độ lớp bề mặt trên. Giá trị 100% tạo ra lớp trên hoàn toàn đặc, mịn . Giảm giá trị này dẫn đến bề mặt trên có kết cấu, theo mẫu bề mặt trên được chọn. Giá trị 0% sẽ dẫn đến chỉ thành trên lớp trên được tạo. 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ư." +msgid "Top surface expansion" +msgstr "" + +msgid "" +"Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n" +"Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane.Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top.The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection." +msgstr "" + +msgid "Top expansion wall margin" +msgstr "" + +msgid "" +"Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n" +"This can cause contraction marks (such as the hull line) on the outer walls.\n" +"By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark." +msgstr "" + +msgid "Top expansion direction" +msgstr "" + +msgid "" +"Direction in which the top surface expansion grows.\n" +" - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n" +" - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n" +" - Inward and Outward does both." +msgstr "" + +msgid "Inward and Outward" +msgstr "" + +msgid "Inward" +msgstr "" + +msgid "Outward" +msgstr "" + msgid "Bottom surface pattern" msgstr "Mẫu bề mặt dưới" @@ -12951,12 +12983,12 @@ msgstr "Mật độ infill thưa" msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used." msgstr "Mật độ của infill thưa bên trong, 100% biến tất cả infill thưa thành infill đặc và mẫu infill đặc bên trong sẽ được sử dụng." -msgid "Align infill direction to model" -msgstr "Căn chỉnh hướng infill với model" +msgid "Align directions to model" +msgstr "" msgid "" -"Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" -"When enabled, directions rotate with the model to maintain optimal strength characteristics." +"Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n" +"When enabled, these directions rotate together with the model so the printed features keep their intended orientation relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed." msgstr "" msgid "Insert solid layers" @@ -15049,6 +15081,18 @@ msgstr "Nạp tất cả extruder in" msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." msgstr "Nếu được bật, tất cả extruder in sẽ được nạp ở mép trước của bàn in lúc bắt đầu in." +msgid "Toolchange ordering" +msgstr "" + +msgid "" +"Determines the order of tool changes on each layer.\n" +"- Default: Starts with the last used extruder to minimize tool changes.\n" +"- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool." +msgstr "" + +msgid "Cyclic" +msgstr "" + msgid "Slice gap closing radius" msgstr "Bán kính đóng khe slice" @@ -15490,6 +15534,45 @@ 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 "" + +msgid "" +"Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts (or distinct 3D objects) each get their own.\n" +"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n" +"Affects line and grid patterns and rotation-template infills.\n" +"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected." +msgstr "" + +msgid "Center surface pattern on" +msgstr "" + +msgid "" +"Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, Octagram Spiral) is placed.\n" +" - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n" +" - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; parts detached from the rest each get their own.\n" +" - Each Assembly: uses a single shared center for the whole object or assembly." +msgstr "" + +msgid "Each Surface" +msgstr "" + +msgid "Each Model" +msgstr "" + +msgid "Each Assembly" +msgstr "" + # TODO: Review, changed by lang refactor. PR 14254 msgid "This is the speed at which traveling is done." msgstr "Tốc độ di chuyển nhanh hơn và không có đùn." @@ -19496,6 +19579,13 @@ 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?" +#~ msgctxt "Sync_Nozzle_AMS" +#~ msgid "Cancel" +#~ msgstr "Hủy" + +#~ msgid "Align infill direction to model" +#~ msgstr "Căn chỉnh hướng infill với model" + #~ msgid "Print" #~ msgstr "In" diff --git a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po index 733ccf70d7..3fe65798f5 100644 --- a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po +++ b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Slic3rPE\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-07 16:46-0300\n" +"POT-Creation-Date: 2026-07-12 12:27-0300\n" "PO-Revision-Date: 2026-06-11 12:37-0300\n" "Last-Translator: Handle \n" "Language-Team: \n" @@ -165,6 +165,12 @@ msgstr "填充" msgid "Gap Fill" msgstr "缝隙填充" +msgid "Vertical" +msgstr "垂直" + +msgid "Horizontal" +msgstr "水平" + #, boost-format msgid "Allows painting only on facets selected by: \"%1%\"" msgstr "绘制仅对由%1%选中的面片生效" @@ -260,12 +266,6 @@ msgstr "三角形" msgid "Height Range" msgstr "高度范围" -msgid "Vertical" -msgstr "垂直" - -msgid "Horizontal" -msgstr "水平" - msgid "Remove painted color" msgstr "移除已绘制的颜色" @@ -5700,15 +5700,6 @@ msgstr "导出当前选择的预设" msgid "Export" msgstr "导出" -msgid "Sync Presets" -msgstr "同步预设" - -msgid "Pull and apply the latest presets from OrcaCloud" -msgstr "从 OrcaCloud 拉取并应用最新的预设" - -msgid "You must be logged in to sync presets from cloud." -msgstr "您必须登录后才能从云端同步预设。" - msgid "Quit" msgstr "退出程序" @@ -5825,6 +5816,15 @@ msgstr "视图" msgid "Preset Bundle" msgstr "预设包" +msgid "Sync Presets" +msgstr "同步预设" + +msgid "Pull and apply the latest presets from OrcaCloud" +msgstr "从 OrcaCloud 拉取并应用最新的预设" + +msgid "You must be logged in to sync presets from cloud." +msgstr "您必须登录后才能从云端同步预设。" + msgid "Syncing presets from cloud…" msgstr "正在从云端同步预设…" @@ -10328,12 +10328,8 @@ msgstr "成功同步喷嘴信息。" msgid "Successfully synchronized nozzle and AMS number information." msgstr "已成功同步喷嘴和 AMS 编号信息。" -msgid "Continue to sync filaments" -msgstr "继续同步耗材丝" - -msgctxt "Sync_Nozzle_AMS" -msgid "Cancel" -msgstr "取消" +msgid "Do you want to continue to sync filaments?" +msgstr "" msgid "Successfully synchronized filament color from printer." msgstr "已成功同步打印机的耗材丝颜色。" @@ -11661,19 +11657,11 @@ 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 infill 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." msgstr "" -"外部桥接角度覆盖。\n" -"如果保持为零,每个具体桥接的桥接角度都会自动计算。\n" -"否则将按以下方式使用所提供的角度:\n" -" - 绝对坐标\n" -" - 绝对坐标 + 模型旋转:如果启用了“对齐填充方向到模型”\n" -" - 最佳自动角度 + 此值:如果启用了“相对桥接角度”\n" -"\n" -"使用 180° 表示绝对角度为零。" msgid "Internal bridge infill direction" msgstr "内部桥接填充方向" @@ -11683,19 +11671,11 @@ 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 infill 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." msgstr "" -"内部桥接角度覆盖。\n" -"如果保持为零,每个具体桥接的桥接角度都会自动计算。\n" -"否则将按以下方式使用所提供的角度:\n" -" - 绝对坐标\n" -" - 绝对坐标 + 模型旋转:如果启用了“对齐填充方向到模型”\n" -" - 最佳自动角度 + 此值:如果启用了“相对桥接角度”\n" -"\n" -"使用 180° 表示绝对角度为零。" msgid "Relative bridge angle" msgstr "相对桥接角度" @@ -12454,6 +12434,42 @@ msgstr "" "100% 的值会创建一个完全实心、平滑的顶面。降低此值会根据所选的顶面图案生成有纹理的顶面。0% 的值将只生成顶层的墙。\n" "此选项仅为美观或功能性目的,而不是为了解决过量挤出等问题。" +msgid "Top surface expansion" +msgstr "" + +msgid "" +"Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n" +"Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane.Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top.The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection." +msgstr "" + +msgid "Top expansion wall margin" +msgstr "" + +msgid "" +"Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n" +"This can cause contraction marks (such as the hull line) on the outer walls.\n" +"By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark." +msgstr "" + +msgid "Top expansion direction" +msgstr "" + +msgid "" +"Direction in which the top surface expansion grows.\n" +" - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n" +" - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n" +" - Inward and Outward does both." +msgstr "" + +msgid "Inward and Outward" +msgstr "" + +msgid "Inward" +msgstr "" + +msgid "Outward" +msgstr "" + msgid "Bottom surface pattern" msgstr "底面图案" @@ -13127,15 +13143,13 @@ msgstr "稀疏填充密度" msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used." msgstr "内部稀疏填充的密度,100%会将所有稀疏填充变为实心填充,并将使用内部实心填充图案。" -msgid "Align infill direction to model" -msgstr "对齐填充方向到模型" +msgid "Align directions to model" +msgstr "" msgid "" -"Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" -"When enabled, directions rotate with the model to maintain optimal strength characteristics." +"Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n" +"When enabled, these directions rotate together with the model so the printed features keep their intended orientation relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed." msgstr "" -"使填充、桥接、熨烫和表面填充的方向跟随模型在打印板上的朝向。\n" -"启用后,这些方向会随模型一起旋转,以保持最佳的强度特性。" msgid "Insert solid layers" msgstr "插入实心层" @@ -15283,6 +15297,18 @@ msgstr "所有挤出机画线" msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." msgstr "如果启用,所有挤出机将在打印开始时在床前画线" +msgid "Toolchange ordering" +msgstr "" + +msgid "" +"Determines the order of tool changes on each layer.\n" +"- Default: Starts with the last used extruder to minimize tool changes.\n" +"- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool." +msgstr "" + +msgid "Cyclic" +msgstr "" + msgid "Slice gap closing radius" msgstr "切片间隙闭合半径" @@ -15725,6 +15751,45 @@ 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 "" + +msgid "" +"Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts (or distinct 3D objects) each get their own.\n" +"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n" +"Affects line and grid patterns and rotation-template infills.\n" +"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected." +msgstr "" + +msgid "Center surface pattern on" +msgstr "" + +msgid "" +"Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, Octagram Spiral) is placed.\n" +" - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n" +" - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; parts detached from the rest each get their own.\n" +" - Each Assembly: uses a single shared center for the whole object or assembly." +msgstr "" + +msgid "Each Surface" +msgstr "" + +msgid "Each Model" +msgstr "" + +msgid "Each Assembly" +msgstr "" + # TODO: Review, changed by lang refactor. PR 14254 msgid "This is the speed at which traveling is done." msgstr "空驶的速度。空驶是无挤出量的快速移动。" @@ -19758,6 +19823,62 @@ msgstr "" "避免翘曲\n" "您知道吗?打印ABS这类易翘曲材料时,适当提高热床温度可以降低翘曲的概率。" +#~ msgid "Continue to sync filaments" +#~ msgstr "继续同步耗材丝" + +#~ msgctxt "Sync_Nozzle_AMS" +#~ msgid "Cancel" +#~ msgstr "取消" + +#, no-c-format, no-boost-format +#~ msgid "" +#~ "External Bridging angle override.\n" +#~ "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 infill direction 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." +#~ msgstr "" +#~ "外部桥接角度覆盖。\n" +#~ "如果保持为零,每个具体桥接的桥接角度都会自动计算。\n" +#~ "否则将按以下方式使用所提供的角度:\n" +#~ " - 绝对坐标\n" +#~ " - 绝对坐标 + 模型旋转:如果启用了“对齐填充方向到模型”\n" +#~ " - 最佳自动角度 + 此值:如果启用了“相对桥接角度”\n" +#~ "\n" +#~ "使用 180° 表示绝对角度为零。" + +#~ msgid "" +#~ "Internal Bridging angle override.\n" +#~ "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 infill direction 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." +#~ msgstr "" +#~ "内部桥接角度覆盖。\n" +#~ "如果保持为零,每个具体桥接的桥接角度都会自动计算。\n" +#~ "否则将按以下方式使用所提供的角度:\n" +#~ " - 绝对坐标\n" +#~ " - 绝对坐标 + 模型旋转:如果启用了“对齐填充方向到模型”\n" +#~ " - 最佳自动角度 + 此值:如果启用了“相对桥接角度”\n" +#~ "\n" +#~ "使用 180° 表示绝对角度为零。" + +#~ msgid "Align infill direction to model" +#~ msgstr "对齐填充方向到模型" + +#~ msgid "" +#~ "Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" +#~ "When enabled, directions rotate with the model to maintain optimal strength characteristics." +#~ msgstr "" +#~ "使填充、桥接、熨烫和表面填充的方向跟随模型在打印板上的朝向。\n" +#~ "启用后,这些方向会随模型一起旋转,以保持最佳的强度特性。" + #~ msgid "Print" #~ msgstr "打印" diff --git a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po index ff2196690d..0114bc1081 100644 --- a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po +++ b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-07 16:46-0300\n" +"POT-Creation-Date: 2026-07-12 12:27-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" @@ -168,6 +168,12 @@ msgstr "填充" msgid "Gap Fill" msgstr "縫隙填充" +msgid "Vertical" +msgstr "垂直" + +msgid "Horizontal" +msgstr "水平" + #, boost-format msgid "Allows painting only on facets selected by: \"%1%\"" msgstr "僅允許在由以下條件選擇的平面上進行繪製:「%1%」" @@ -263,12 +269,6 @@ msgstr "三角形" msgid "Height Range" msgstr "高度範圍" -msgid "Vertical" -msgstr "垂直" - -msgid "Horizontal" -msgstr "水平" - msgid "Remove painted color" msgstr "移除已繪製的顏色" @@ -5743,15 +5743,6 @@ msgstr "匯出目前選擇的設定檔" msgid "Export" msgstr "匯出" -msgid "Sync Presets" -msgstr "同步預設" - -msgid "Pull and apply the latest presets from OrcaCloud" -msgstr "從 OrcaCloud 拉取並套用最新的預設" - -msgid "You must be logged in to sync presets from cloud." -msgstr "您必須登入才能從雲端同步預設。" - msgid "Quit" msgstr "結束" @@ -5868,6 +5859,15 @@ msgstr "視角" msgid "Preset Bundle" msgstr "設定檔組" +msgid "Sync Presets" +msgstr "同步預設" + +msgid "Pull and apply the latest presets from OrcaCloud" +msgstr "從 OrcaCloud 拉取並套用最新的預設" + +msgid "You must be logged in to sync presets from cloud." +msgstr "您必須登入才能從雲端同步預設。" + msgid "Syncing presets from cloud…" msgstr "正在從雲端同步預設…" @@ -10392,12 +10392,8 @@ msgstr "成功同步噴嘴資訊。" msgid "Successfully synchronized nozzle and AMS number information." msgstr "成功同步噴嘴和 AMS 數量資訊。" -msgid "Continue to sync filaments" -msgstr "繼續同步線材" - -msgctxt "Sync_Nozzle_AMS" -msgid "Cancel" -msgstr "取消" +msgid "Do you want to continue to sync filaments?" +msgstr "" msgid "Successfully synchronized filament color from printer." msgstr "成功從列印設備同步線材顏色。" @@ -11728,19 +11724,11 @@ 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 infill 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." msgstr "" -"外部橋接角度覆蓋。\n" -"若保持為零,將為每個特定橋接自動計算橋接角度。\n" -"否則將依下列方式使用所提供的角度:\n" -" - 絕對座標\n" -" - 絕對座標 + 模型旋轉:若已啟用「對齊填充方向至模型」\n" -" - 最佳自動角度 + 此數值:若已啟用「相對橋接角度」\n" -"\n" -"若要設定絕對角度為零,請使用 180°。" msgid "Internal bridge infill direction" msgstr "內部橋接結構的填充方向" @@ -11750,19 +11738,11 @@ 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 infill 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." msgstr "" -"內部橋接角度覆寫。\n" -"若保持為零,將為每個特定橋接自動計算橋接角度。\n" -"否則將依照下列方式使用所提供的角度:\n" -" - 絕對座標\n" -" - 絕對座標 + 模型旋轉:若啟用「將填充方向對齊模型」\n" -" - 最佳自動角度 + 此值:若啟用「相對橋接角度」\n" -"\n" -"使用 180° 表示零絕對角度。" msgid "Relative bridge angle" msgstr "相對橋接角度" @@ -12521,6 +12501,42 @@ msgstr "頂面密度" msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion." msgstr "頂面層的密度。100% 將建立完全實心且平滑的頂層。降低此數值會根據所選的頂面圖案產生紋理表面。0% 則只會建立頂層的牆體。此功能旨在實現美觀或功能需求,而非修正過擠等問題" +msgid "Top surface expansion" +msgstr "" + +msgid "" +"Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n" +"Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane.Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top.The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection." +msgstr "" + +msgid "Top expansion wall margin" +msgstr "" + +msgid "" +"Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n" +"This can cause contraction marks (such as the hull line) on the outer walls.\n" +"By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark." +msgstr "" + +msgid "Top expansion direction" +msgstr "" + +msgid "" +"Direction in which the top surface expansion grows.\n" +" - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n" +" - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n" +" - Inward and Outward does both." +msgstr "" + +msgid "Inward and Outward" +msgstr "" + +msgid "Inward" +msgstr "" + +msgid "Outward" +msgstr "" + msgid "Bottom surface pattern" msgstr "底面圖案" @@ -13181,15 +13197,13 @@ msgstr "稀疏填充密度" msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used." msgstr "設定內部稀疏填充的密度,當密度為 100% 時,所有稀疏填充將變為實心填充,並套用內部實心填充的圖案" -msgid "Align infill direction to model" -msgstr "對齊填充方向至模型" +msgid "Align directions to model" +msgstr "" msgid "" -"Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" -"When enabled, directions rotate with the model to maintain optimal strength characteristics." +"Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n" +"When enabled, these directions rotate together with the model so the printed features keep their intended orientation relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed." msgstr "" -"使填充、橋接、熨燙與表面填充的方向對齊,以跟隨模型在列印板上的方向。\n" -"啟用後,方向會隨模型一同旋轉,以維持最佳的強度特性。" msgid "Insert solid layers" msgstr "插入實心層" @@ -15333,6 +15347,18 @@ msgstr "所有擠出機畫線" msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." msgstr "如果啟用,所有擠出機將在列印開始時在列印板前方畫線。" +msgid "Toolchange ordering" +msgstr "" + +msgid "" +"Determines the order of tool changes on each layer.\n" +"- Default: Starts with the last used extruder to minimize tool changes.\n" +"- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool." +msgstr "" + +msgid "Cyclic" +msgstr "" + msgid "Slice gap closing radius" msgstr "切片間隙閉合半徑" @@ -15773,6 +15799,45 @@ 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 "" + +msgid "" +"Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts (or distinct 3D objects) each get their own.\n" +"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n" +"Affects line and grid patterns and rotation-template infills.\n" +"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected." +msgstr "" + +msgid "Center surface pattern on" +msgstr "" + +msgid "" +"Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, Octagram Spiral) is placed.\n" +" - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n" +" - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; parts detached from the rest each get their own.\n" +" - Each Assembly: uses a single shared center for the whole object or assembly." +msgstr "" + +msgid "Each Surface" +msgstr "" + +msgid "Each Model" +msgstr "" + +msgid "Each Assembly" +msgstr "" + # TODO: Review, changed by lang refactor. PR 14254 msgid "This is the speed at which traveling is done." msgstr "空駛的速度。空駛是無擠出量的快速移動" @@ -19829,6 +19894,62 @@ msgstr "" "您知道嗎?當列印容易翹曲的材料(如 ABS)時,適當提高熱床溫度\n" "可以降低翹曲的機率。" +#~ msgid "Continue to sync filaments" +#~ msgstr "繼續同步線材" + +#~ msgctxt "Sync_Nozzle_AMS" +#~ msgid "Cancel" +#~ msgstr "取消" + +#, no-c-format, no-boost-format +#~ msgid "" +#~ "External Bridging angle override.\n" +#~ "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 infill direction 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." +#~ msgstr "" +#~ "外部橋接角度覆蓋。\n" +#~ "若保持為零,將為每個特定橋接自動計算橋接角度。\n" +#~ "否則將依下列方式使用所提供的角度:\n" +#~ " - 絕對座標\n" +#~ " - 絕對座標 + 模型旋轉:若已啟用「對齊填充方向至模型」\n" +#~ " - 最佳自動角度 + 此數值:若已啟用「相對橋接角度」\n" +#~ "\n" +#~ "若要設定絕對角度為零,請使用 180°。" + +#~ msgid "" +#~ "Internal Bridging angle override.\n" +#~ "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 infill direction 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." +#~ msgstr "" +#~ "內部橋接角度覆寫。\n" +#~ "若保持為零,將為每個特定橋接自動計算橋接角度。\n" +#~ "否則將依照下列方式使用所提供的角度:\n" +#~ " - 絕對座標\n" +#~ " - 絕對座標 + 模型旋轉:若啟用「將填充方向對齊模型」\n" +#~ " - 最佳自動角度 + 此值:若啟用「相對橋接角度」\n" +#~ "\n" +#~ "使用 180° 表示零絕對角度。" + +#~ msgid "Align infill direction to model" +#~ msgstr "對齊填充方向至模型" + +#~ msgid "" +#~ "Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" +#~ "When enabled, directions rotate with the model to maintain optimal strength characteristics." +#~ msgstr "" +#~ "使填充、橋接、熨燙與表面填充的方向對齊,以跟隨模型在列印板上的方向。\n" +#~ "啟用後,方向會隨模型一同旋轉,以維持最佳的強度特性。" + #~ msgid "Print" #~ msgstr "列印" diff --git a/resources/images/advanced_option3.svg b/resources/images/advanced_option3.svg index d60800be11..20ba7ba0c7 100644 --- a/resources/images/advanced_option3.svg +++ b/resources/images/advanced_option3.svg @@ -1,3 +1,3 @@ - + diff --git a/resources/images/advanced_option4.svg b/resources/images/advanced_option4.svg index c4bf14ed8f..9b3aedbf0a 100644 --- a/resources/images/advanced_option4.svg +++ b/resources/images/advanced_option4.svg @@ -1,3 +1,3 @@ - + diff --git a/resources/images/param_z_contouring.svg b/resources/images/param_z_contouring.svg new file mode 100644 index 0000000000..38fc8f1a00 --- /dev/null +++ b/resources/images/param_z_contouring.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/shaders/110/gouraud.fs b/resources/shaders/110/gouraud.fs index 01190dea02..010baaa0dd 100644 --- a/resources/shaders/110/gouraud.fs +++ b/resources/shaders/110/gouraud.fs @@ -55,6 +55,15 @@ const float ONE_OVER_EPSILON = 1e4; uniform float z_far; uniform float z_near; +// Depth-based shadow map (object-on-object and self shadows). shadow_intensity == 0 disables it. +uniform sampler2D shadow_map; +uniform mat4 shadow_light_vp; +uniform float shadow_intensity; +uniform float shadow_map_texel; + +// LIGHT_TOP_DIR in eye space (matches the diffuse light used for shading in gouraud.vs). +const vec3 SHADOW_LIGHT_DIR = vec3(-0.4574957, 0.4574957, 0.7624929); + varying vec3 clipping_planes_dots; varying float color_clip_plane_dot; @@ -130,6 +139,35 @@ float DetectSilho(vec2 fragCoord) ); } +// Returns a lighting multiplier in [1 - shadow_intensity, 1]: < 1 where the fragment is +// occluded from the light in the shadow map. 3x3 PCF softens the edges. +float shadow_shade() +{ + if (shadow_intensity <= 0.0) + return 1.0; + + vec4 lp = shadow_light_vp * world_pos; + vec3 proj = lp.xyz / lp.w; + proj = proj * 0.5 + 0.5; + if (proj.z > 1.0) + return 1.0; + + // Slope-scaled depth bias: larger where the surface grazes / faces away from the light. This + // suppresses self-shadow acne without discarding real shadows cast by other objects onto + // back-facing surfaces (e.g. the shaded back/tip of a cone sitting inside a larger shadow). + float NdotL = dot(normalize(eye_normal), SHADOW_LIGHT_DIR); + float bias = mix(0.0004, 0.004, clamp(1.0 - NdotL, 0.0, 1.0)); + // 5x5 PCF: softens shadow edges into a smooth penumbra and blurs residual facet acne. + float sum = 0.0; + for (int x = -2; x <= 2; ++x) { + for (int y = -2; y <= 2; ++y) { + float closest = texture2D(shadow_map, proj.xy + vec2(float(x), float(y)) * shadow_map_texel).r; + sum += (proj.z - bias > closest) ? 1.0 : 0.0; + } + } + return 1.0 - shadow_intensity * (sum / 25.0); +} + void main() { if (any(lessThan(clipping_planes_dots, ZERO))) @@ -180,10 +218,11 @@ void main() bool is_out_printable_height = (all(greaterThan(eph_check_min, vec3(1.0))) && all(lessThan(eph_check_max, vec3(1.0)))); color.rgb = is_out_printable_height ? mix(color.rgb, ZERO, 0.7) : color.rgb; } + float shade = shadow_shade(); //BBS: add outline_color if (is_outline) { - color = vec4(vec3(intensity.y) + color.rgb * intensity.x, color.a); + color = vec4((vec3(intensity.y) + color.rgb * intensity.x) * shade, color.a); vec2 fragCoord = gl_FragCoord.xy; float s = DetectSilho(fragCoord); // Makes silhouettes thicker. @@ -191,13 +230,13 @@ void main() { s = max(s, DetectSilho(fragCoord.xy + vec2(i, 0))); s = max(s, DetectSilho(fragCoord.xy + vec2(0, i))); - } + } gl_FragColor = vec4(mix(color.rgb, getBackfaceColor(color.rgb), s), color.a); } #ifdef ENABLE_ENVIRONMENT_MAP else if (use_environment_tex) - gl_FragColor = vec4(0.45 * texture(environment_tex, normalize(eye_normal).xy * 0.5 + 0.5).xyz + 0.8 * color.rgb * intensity.x, color.a); + gl_FragColor = vec4((0.45 * texture(environment_tex, normalize(eye_normal).xy * 0.5 + 0.5).xyz + 0.8 * color.rgb * intensity.x) * shade, color.a); #endif else - gl_FragColor = vec4(vec3(intensity.y) + color.rgb * intensity.x, color.a); + gl_FragColor = vec4((vec3(intensity.y) + color.rgb * intensity.x) * shade, color.a); } \ No newline at end of file diff --git a/resources/shaders/110/phong.fs b/resources/shaders/110/phong.fs index a0c6372ca5..a5c1c5b8ab 100644 --- a/resources/shaders/110/phong.fs +++ b/resources/shaders/110/phong.fs @@ -65,6 +65,12 @@ uniform float z_far; uniform float z_near; uniform bool enable_ssao; +// Depth-based shadow map (object-on-object and self shadows). shadow_intensity == 0 disables it. +uniform sampler2D shadow_map; +uniform mat4 shadow_light_vp; +uniform float shadow_intensity; +uniform float shadow_map_texel; + varying vec3 clipping_planes_dots; varying float color_clip_plane_dot; @@ -167,10 +173,39 @@ vec3 compute_window_reflection(vec3 normal, vec3 view_dir) float intensity = window_light * bars * (0.15 + 0.15 * fresnel) * facing; intensity = clamp(intensity, 0.0, 0.25); - + return vec3(intensity); } +// Returns a lighting multiplier in [1 - shadow_intensity, 1]: < 1 where the fragment is +// occluded from the light in the shadow map. 3x3 PCF softens the edges. +float shadow_shade() +{ + if (shadow_intensity <= 0.0) + return 1.0; + + vec4 lp = shadow_light_vp * world_pos; + vec3 proj = lp.xyz / lp.w; + proj = proj * 0.5 + 0.5; + if (proj.z > 1.0) + return 1.0; + + // Slope-scaled depth bias: larger where the surface grazes / faces away from the light. This + // suppresses self-shadow acne without discarding real shadows cast by other objects onto + // back-facing surfaces (e.g. the shaded back/tip of a cone sitting inside a larger shadow). + float NdotL = dot(normalize(eye_normal), LIGHT_TOP_DIR); + float bias = mix(0.0004, 0.004, clamp(1.0 - NdotL, 0.0, 1.0)); + // 5x5 PCF: softens shadow edges into a smooth penumbra and blurs residual facet acne. + float sum = 0.0; + for (int x = -2; x <= 2; ++x) { + for (int y = -2; y <= 2; ++y) { + float closest = texture2D(shadow_map, proj.xy + vec2(float(x), float(y)) * shadow_map_texel).r; + sum += (proj.z - bias > closest) ? 1.0 : 0.0; + } + } + return 1.0 - shadow_intensity * (sum / 25.0); +} + void main() { if (any(lessThan(clipping_planes_dots, ZERO))) @@ -226,8 +261,10 @@ void main() // SSAO is applied in post-process pass. Keep base lighting unchanged here. + float shade = shadow_shade(); + if (is_outline) { - vec3 shaded_rgb = (vec3(specular) + window_reflection + color.rgb * diffuse) * PHONG_BRIGHTNESS; + vec3 shaded_rgb = (vec3(specular) + window_reflection + color.rgb * diffuse) * PHONG_BRIGHTNESS * shade; vec4 shaded_color = vec4(clamp(shaded_rgb, vec3(0.0), vec3(1.0)), color.a); vec2 fragCoord = gl_FragCoord.xy; float s = DetectSilho(fragCoord); @@ -240,8 +277,8 @@ void main() } #ifdef ENABLE_ENVIRONMENT_MAP else if (use_environment_tex) - gl_FragColor = vec4(clamp((0.45 * texture2D(environment_tex, normalize(eye_normal).xy * 0.5 + 0.5).xyz + window_reflection + 0.8 * color.rgb * diffuse) * PHONG_BRIGHTNESS, vec3(0.0), vec3(1.0)), color.a); + gl_FragColor = vec4(clamp((0.45 * texture2D(environment_tex, normalize(eye_normal).xy * 0.5 + 0.5).xyz + window_reflection + 0.8 * color.rgb * diffuse) * PHONG_BRIGHTNESS * shade, vec3(0.0), vec3(1.0)), color.a); #endif else - gl_FragColor = vec4(clamp((vec3(specular) + window_reflection + color.rgb * diffuse) * PHONG_BRIGHTNESS, vec3(0.0), vec3(1.0)), color.a); + gl_FragColor = vec4(clamp((vec3(specular) + window_reflection + color.rgb * diffuse) * PHONG_BRIGHTNESS * shade, vec3(0.0), vec3(1.0)), color.a); } \ No newline at end of file diff --git a/resources/shaders/110/printbed_shadow.fs b/resources/shaders/110/printbed_shadow.fs new file mode 100644 index 0000000000..a4fd6801dd --- /dev/null +++ b/resources/shaders/110/printbed_shadow.fs @@ -0,0 +1,40 @@ +#version 110 + +// Draws the build-plate as a receiver of the same depth shadow map used for object/self shadows, +// so the plate, objects, and self-shadows all come from one unified technique. +uniform sampler2D shadow_map; +uniform mat4 shadow_light_vp; +uniform float shadow_intensity; +uniform float shadow_map_texel; + +varying vec4 world_pos; + +// Fraction of the 5x5 PCF kernel occluded from the light. Matches the object shadow shader. +float shadow_occlusion() +{ + vec4 lp = shadow_light_vp * world_pos; + vec3 proj = lp.xyz / lp.w; + proj = proj * 0.5 + 0.5; + if (proj.z > 1.0) + return 0.0; + + // The plate is a pure receiver (never rendered into the shadow map), so a tiny constant + // bias for numerical safety is enough here. + float bias = 0.0004; + float sum = 0.0; + for (int x = -2; x <= 2; ++x) { + for (int y = -2; y <= 2; ++y) { + float closest = texture2D(shadow_map, proj.xy + vec2(float(x), float(y)) * shadow_map_texel).r; + sum += (proj.z - bias > closest) ? 1.0 : 0.0; + } + } + return sum / 25.0; +} + +void main() +{ + float occ = shadow_occlusion(); + if (occ <= 0.0) + discard; + gl_FragColor = vec4(0.0, 0.0, 0.0, shadow_intensity * occ); +} diff --git a/resources/shaders/110/printbed_shadow.vs b/resources/shaders/110/printbed_shadow.vs new file mode 100644 index 0000000000..d004fac7c9 --- /dev/null +++ b/resources/shaders/110/printbed_shadow.vs @@ -0,0 +1,16 @@ +#version 110 + +uniform mat4 view_model_matrix; +uniform mat4 projection_matrix; + +attribute vec3 v_position; + +// The plate mask quad is authored directly in world coordinates (z = 0 plane), +// so v_position is already the world position of the fragment. +varying vec4 world_pos; + +void main() +{ + world_pos = vec4(v_position, 1.0); + gl_Position = projection_matrix * view_model_matrix * vec4(v_position, 1.0); +} diff --git a/resources/shaders/140/gouraud.fs b/resources/shaders/140/gouraud.fs index 415abdbf51..8ebb1d8a60 100644 --- a/resources/shaders/140/gouraud.fs +++ b/resources/shaders/140/gouraud.fs @@ -54,6 +54,15 @@ const float ONE_OVER_EPSILON = 1e4; uniform float z_far; uniform float z_near; +// Depth-based shadow map (object-on-object and self shadows). shadow_intensity == 0 disables it. +uniform sampler2D shadow_map; +uniform mat4 shadow_light_vp; +uniform float shadow_intensity; +uniform float shadow_map_texel; + +// LIGHT_TOP_DIR in eye space (matches the diffuse light used for shading in gouraud.vs). +const vec3 SHADOW_LIGHT_DIR = vec3(-0.4574957, 0.4574957, 0.7624929); + in vec3 clipping_planes_dots; in float color_clip_plane_dot; @@ -129,6 +138,35 @@ float DetectSilho(vec2 fragCoord) ); } +// Returns a lighting multiplier in [1 - shadow_intensity, 1]: < 1 where the fragment is +// occluded from the light in the shadow map. 3x3 PCF softens the edges. +float shadow_shade() +{ + if (shadow_intensity <= 0.0) + return 1.0; + + vec4 lp = shadow_light_vp * world_pos; + vec3 proj = lp.xyz / lp.w; + proj = proj * 0.5 + 0.5; + if (proj.z > 1.0) + return 1.0; + + // Slope-scaled depth bias: larger where the surface grazes / faces away from the light. This + // suppresses self-shadow acne without discarding real shadows cast by other objects onto + // back-facing surfaces (e.g. the shaded back/tip of a cone sitting inside a larger shadow). + float NdotL = dot(normalize(eye_normal), SHADOW_LIGHT_DIR); + float bias = mix(0.0004, 0.004, clamp(1.0 - NdotL, 0.0, 1.0)); + // 5x5 PCF: softens shadow edges into a smooth penumbra and blurs residual facet acne. + float sum = 0.0; + for (int x = -2; x <= 2; ++x) { + for (int y = -2; y <= 2; ++y) { + float closest = texture(shadow_map, proj.xy + vec2(float(x), float(y)) * shadow_map_texel).r; + sum += (proj.z - bias > closest) ? 1.0 : 0.0; + } + } + return 1.0 - shadow_intensity * (sum / 25.0); +} + out vec4 out_color; void main() @@ -181,10 +219,11 @@ void main() bool is_out_printable_height = (all(greaterThan(eph_check_min, vec3(1.0))) && all(lessThan(eph_check_max, vec3(1.0)))); color.rgb = is_out_printable_height ? mix(color.rgb, ZERO, 0.7) : color.rgb; } + float shade = shadow_shade(); //BBS: add outline_color if (is_outline) { - color = vec4(vec3(intensity.y) + color.rgb * intensity.x, color.a); + color = vec4((vec3(intensity.y) + color.rgb * intensity.x) * shade, color.a); vec2 fragCoord = gl_FragCoord.xy; float s = DetectSilho(fragCoord); // Makes silhouettes thicker. @@ -192,13 +231,13 @@ void main() { s = max(s, DetectSilho(fragCoord.xy + vec2(i, 0))); s = max(s, DetectSilho(fragCoord.xy + vec2(0, i))); - } + } out_color = vec4(mix(color.rgb, getBackfaceColor(color.rgb), s), color.a); } #ifdef ENABLE_ENVIRONMENT_MAP else if (use_environment_tex) - out_color = vec4(0.45 * texture(environment_tex, normalize(eye_normal).xy * 0.5 + 0.5).xyz + 0.8 * color.rgb * intensity.x, color.a); + out_color = vec4((0.45 * texture(environment_tex, normalize(eye_normal).xy * 0.5 + 0.5).xyz + 0.8 * color.rgb * intensity.x) * shade, color.a); #endif else - out_color = vec4(vec3(intensity.y) + color.rgb * intensity.x, color.a); + out_color = vec4((vec3(intensity.y) + color.rgb * intensity.x) * shade, color.a); } \ No newline at end of file diff --git a/resources/shaders/140/phong.fs b/resources/shaders/140/phong.fs index d7456663ec..894e3eb863 100644 --- a/resources/shaders/140/phong.fs +++ b/resources/shaders/140/phong.fs @@ -65,6 +65,12 @@ uniform float z_far; uniform float z_near; uniform bool enable_ssao; +// Depth-based shadow map (object-on-object and self shadows). shadow_intensity == 0 disables it. +uniform sampler2D shadow_map; +uniform mat4 shadow_light_vp; +uniform float shadow_intensity; +uniform float shadow_map_texel; + in vec3 clipping_planes_dots; in float color_clip_plane_dot; @@ -170,11 +176,40 @@ vec3 compute_window_reflection(vec3 normal, vec3 view_dir) float intensity = window_light * bars * (0.15 + 0.15 * fresnel) * facing; - intensity = clamp(intensity, 0.0, 0.25); - + intensity = clamp(intensity, 0.0, 0.25); + return vec3(intensity); } +// Returns a lighting multiplier in [1 - shadow_intensity, 1]: < 1 where the fragment is +// occluded from the light in the shadow map. 3x3 PCF softens the edges. +float shadow_shade() +{ + if (shadow_intensity <= 0.0) + return 1.0; + + vec4 lp = shadow_light_vp * world_pos; + vec3 proj = lp.xyz / lp.w; + proj = proj * 0.5 + 0.5; + if (proj.z > 1.0) + return 1.0; + + // Slope-scaled depth bias: larger where the surface grazes / faces away from the light. This + // suppresses self-shadow acne without discarding real shadows cast by other objects onto + // back-facing surfaces (e.g. the shaded back/tip of a cone sitting inside a larger shadow). + float NdotL = dot(normalize(eye_normal), LIGHT_TOP_DIR); + float bias = mix(0.0004, 0.004, clamp(1.0 - NdotL, 0.0, 1.0)); + // 5x5 PCF: softens shadow edges into a smooth penumbra and blurs residual facet acne. + float sum = 0.0; + for (int x = -2; x <= 2; ++x) { + for (int y = -2; y <= 2; ++y) { + float closest = texture(shadow_map, proj.xy + vec2(float(x), float(y)) * shadow_map_texel).r; + sum += (proj.z - bias > closest) ? 1.0 : 0.0; + } + } + return 1.0 - shadow_intensity * (sum / 25.0); +} + void main() { if (any(lessThan(clipping_planes_dots, ZERO))) @@ -230,8 +265,10 @@ void main() // SSAO is applied in post-process pass. Keep base lighting unchanged here. + float shade = shadow_shade(); + if (is_outline) { - vec3 shaded_rgb = (vec3(specular) + window_reflection + color.rgb * diffuse) * PHONG_BRIGHTNESS; + vec3 shaded_rgb = (vec3(specular) + window_reflection + color.rgb * diffuse) * PHONG_BRIGHTNESS * shade; vec4 shaded_color = vec4(clamp(shaded_rgb, vec3(0.0), vec3(1.0)), color.a); vec2 fragCoord = gl_FragCoord.xy; float s = DetectSilho(fragCoord); @@ -244,8 +281,8 @@ void main() } #ifdef ENABLE_ENVIRONMENT_MAP else if (use_environment_tex) - out_color = vec4(clamp((0.45 * texture(environment_tex, normalize(eye_normal).xy * 0.5 + 0.5).xyz + window_reflection + 0.8 * color.rgb * diffuse) * PHONG_BRIGHTNESS, vec3(0.0), vec3(1.0)), color.a); + out_color = vec4(clamp((0.45 * texture(environment_tex, normalize(eye_normal).xy * 0.5 + 0.5).xyz + window_reflection + 0.8 * color.rgb * diffuse) * PHONG_BRIGHTNESS * shade, vec3(0.0), vec3(1.0)), color.a); #endif else - out_color = vec4(clamp((vec3(specular) + window_reflection + color.rgb * diffuse) * PHONG_BRIGHTNESS, vec3(0.0), vec3(1.0)), color.a); + out_color = vec4(clamp((vec3(specular) + window_reflection + color.rgb * diffuse) * PHONG_BRIGHTNESS * shade, vec3(0.0), vec3(1.0)), color.a); } \ No newline at end of file diff --git a/resources/shaders/140/printbed_shadow.fs b/resources/shaders/140/printbed_shadow.fs new file mode 100644 index 0000000000..650d88950e --- /dev/null +++ b/resources/shaders/140/printbed_shadow.fs @@ -0,0 +1,42 @@ +#version 140 + +// Draws the build-plate as a receiver of the same depth shadow map used for object/self shadows, +// so the plate, objects, and self-shadows all come from one unified technique. +uniform sampler2D shadow_map; +uniform mat4 shadow_light_vp; +uniform float shadow_intensity; +uniform float shadow_map_texel; + +in vec4 world_pos; + +out vec4 out_color; + +// Fraction of the 5x5 PCF kernel occluded from the light. Matches the object shadow shader. +float shadow_occlusion() +{ + vec4 lp = shadow_light_vp * world_pos; + vec3 proj = lp.xyz / lp.w; + proj = proj * 0.5 + 0.5; + if (proj.z > 1.0) + return 0.0; + + // The plate is a pure receiver (never rendered into the shadow map), so a tiny constant + // bias for numerical safety is enough here. + float bias = 0.0004; + float sum = 0.0; + for (int x = -2; x <= 2; ++x) { + for (int y = -2; y <= 2; ++y) { + float closest = texture(shadow_map, proj.xy + vec2(float(x), float(y)) * shadow_map_texel).r; + sum += (proj.z - bias > closest) ? 1.0 : 0.0; + } + } + return sum / 25.0; +} + +void main() +{ + float occ = shadow_occlusion(); + if (occ <= 0.0) + discard; + out_color = vec4(0.0, 0.0, 0.0, shadow_intensity * occ); +} diff --git a/resources/shaders/140/printbed_shadow.vs b/resources/shaders/140/printbed_shadow.vs new file mode 100644 index 0000000000..297e9e9a12 --- /dev/null +++ b/resources/shaders/140/printbed_shadow.vs @@ -0,0 +1,16 @@ +#version 140 + +uniform mat4 view_model_matrix; +uniform mat4 projection_matrix; + +in vec3 v_position; + +// The plate mask quad is authored directly in world coordinates (z = 0 plane), +// so v_position is already the world position of the fragment. +out vec4 world_pos; + +void main() +{ + world_pos = vec4(v_position, 1.0); + gl_Position = projection_matrix * view_model_matrix * vec4(v_position, 1.0); +} diff --git a/src/libslic3r/Fill/Fill.cpp b/src/libslic3r/Fill/Fill.cpp index 68180cd2f7..fbaade10ab 100644 --- a/src/libslic3r/Fill/Fill.cpp +++ b/src/libslic3r/Fill/Fill.cpp @@ -1335,7 +1335,7 @@ void Layer::make_fills(FillAdaptive::Octree* adaptive_fill_octree, FillAdaptive: bool is_per_model_center = is_top_or_bottom && params.center_of_surface_pattern == CenterOfSurfacePattern::Each_Model && is_centered_infill; bool is_separate_infill = !is_top_or_bottom && surface_fill.params.separated_infills && ( - is_centered_infill || + is_separable_infill_pattern(surface_fill.params.pattern) || params.config->solid_infill_rotate_template != "" || params.config->sparse_infill_rotate_template != "" ); @@ -1364,59 +1364,30 @@ void Layer::make_fills(FillAdaptive::Octree* adaptive_fill_octree, FillAdaptive: // Orca: separate infill / per-model pattern centering. // - // First assign this fill region to the model part whose slice at this layer overlaps it - // the most. A strict "contains" test is ambiguous for assemblies whose parts overlap (a - // region may sit inside several parts, or straddle a boundary and be inside none), so we - // pick by intersection area instead. - // - // The center must belong to an *overlap group*, not a single part: parts that - // touch/overlap form one connected physical body that shares a single center, while a - // part detached from the rest of the assembly gets its own. This holds for both - // separated infills and Each_Model surface centering (Each_Model == per connected body). - // firstLayerObjGroups() already holds these connected components, so we widen the chosen - // part's bbox to the whole group it belongs to. + // Center the pattern on each connected body of the object independently, so every piece + // is filled exactly as if it were sliced on its own: touching/overlapping parts merge + // into one body sharing a center, while separate parts and disconnected islands (even + // interleaved-but-not-touching ones, e.g. chain links) each get their own. The body each + // island belongs to, and its full bounding box, were resolved in 3D by PrintObject:: + // infill() (lslices_separated_component_bboxes, aligned with this layer's lslices). We + // match this fill region to the island it overlaps most, then re-use the whole-object + // bounding box (origin-centered — identical extent to the default, so coverage and cost + // are unchanged) re-centered on that body. if (is_per_model_center || is_separate_infill) { - double best_overlap = 0.; - ObjectID best_vol_id; - const PrintInstance* best_instance = nullptr; - for (const auto& instance : this->object()->instances()) { - for (const auto& volume : instance.print_object->firstLayerObjSlice()) { - if (f->layer_id >= volume.slices.size()) - continue; - const double overlap = area(intersection_ex(volume.slices[f->layer_id], ExPolygons{expoly})); - if (overlap > best_overlap) { - best_overlap = overlap; - best_vol_id = volume.volume_id; - best_instance = &instance; - } + double best_overlap = 0.; + BoundingBox best_component; + for (size_t r = 0; r < this->lslices.size() && r < this->lslices_separated_component_bboxes.size(); ++ r) { + const double overlap = area(intersection_ex(this->lslices[r], expoly)); + if (overlap > best_overlap) { + best_overlap = overlap; + best_component = this->lslices_separated_component_bboxes[r]; } } - if (best_instance) { - const Transform3d matrix = best_instance->model_instance->get_matrix(); - Point shift = best_instance->shift; // get_volume_bbox takes a non-const ref - auto& volumes = best_instance->model_instance->get_object()->volumes; - - // Volume ids to center on: the whole overlap group the winning part belongs to, - // falling back to just that part if it isn't part of any group. - std::vector center_ids; - for (const auto& group : best_instance->print_object->firstLayerObjGroups()) { - bool in_group = false; - for (const ObjectID& vid : group.volume_ids) - if (vid == best_vol_id) { in_group = true; break; } - if (in_group) { center_ids = group.volume_ids; break; } - } - if (center_ids.empty()) - center_ids.push_back(best_vol_id); - - BoundingBox bbox; - for (const ObjectID& vid : center_ids) - for (auto model_volume : volumes) - if (vid.id == model_volume->id().id) { - bbox.merge(model_volume->get_volume_bbox(matrix, shift, true)); - break; - } - if (bbox.defined) - f->set_bounding_box(bbox); + if (best_component.defined) { + const Point c = best_component.center(); + BoundingBox part_bbox = bbox; // origin-centered, whole-object extent (from above) + part_bbox.translate(c.x(), c.y()); // re-center on this body + f->set_bounding_box(part_bbox); } } // - End: separate infill / per-model pattern centering diff --git a/src/libslic3r/Fill/FillRectilinear.cpp b/src/libslic3r/Fill/FillRectilinear.cpp index 5638dea869..138b50bc88 100644 --- a/src/libslic3r/Fill/FillRectilinear.cpp +++ b/src/libslic3r/Fill/FillRectilinear.cpp @@ -2739,13 +2739,19 @@ static void polylines_from_paths(const std::vector &path, c // The extended bounding box of the whole object that covers any rotation of every layer. BoundingBox FillRectilinear::extended_object_bounding_box() const { + // Build the extension around the box center. The transpose merge and the sqrt(2.) scaling + // (which covers any possible rotation) are both defined about the origin, so a box that is not + // origin-centered — e.g. a separated-infill box re-centered on a single assembly part — would be + // distorted. Shift to the origin first and back afterwards; for the default origin-centered box + // the two translations cancel and this is identical to the original behavior. + const Point c = this->bounding_box.center(); BoundingBox out = this->bounding_box; + out.translate(-c.x(), -c.y()); out.merge(Point(out.min.y(), out.min.x())); out.merge(Point(out.max.y(), out.max.x())); - - // The bounding box is scaled by sqrt(2.) to ensure that the bounding box - // covers any possible rotations. - return out.scaled(sqrt(2.)); + out = out.scaled(sqrt(2.)); + out.translate(c.x(), c.y()); + return out; } bool FillRectilinear::fill_surface_by_lines(const Surface *surface, const FillParams ¶ms, float angleBase, float pattern_shift, Polylines &polylines_out) @@ -3098,8 +3104,11 @@ bool FillRectilinear::fill_surface_trapezoidal( const coord_t d2 = coord_t(0.5 * period - d1); - // Align bounding box to the grid - bb.merge(align_to_grid(bb.min, Point(period, period))); + // Align bounding box to the grid, phased through the box center so separated infills align + // each part on itself (grid_center is the origin for a standalone object / feature off). + // Captured before the merge, which grows bb and would otherwise shift its center. + const Point grid_center = bb.center(); + bb.merge(align_to_grid(bb.min, Point(period, period), grid_center)); const coord_t xmin = bb.min.x(); const coord_t xmax = bb.max.x(); const coord_t ymin = bb.min.y(); @@ -3146,11 +3155,17 @@ bool FillRectilinear::fill_surface_trapezoidal( flip_vertical = !flip_vertical; } - // transpose points for odd infill layers (taking infill combination into account) + // transpose points for odd infill layers (taking infill combination into account). + // Orca: mirror across the diagonal through grid_center (not the origin), so the swapped + // layers stay aligned with the center-phased grid. For a standalone object / feature off, + // grid_center is the origin and this is a plain x/y swap. if (infill_layer_id % 2 == 1) { for (Polyline& pl : polylines) { for (Point& p : pl.points) { - std::swap(p.x(), p.y()); + const coord_t dx = p.x() - grid_center.x(); + const coord_t dy = p.y() - grid_center.y(); + p.x() = grid_center.x() + dy; + p.y() = grid_center.y() + dx; } } } @@ -3341,6 +3356,14 @@ bool FillRectilinear::fill_surface_trapezoidal( break; } + // Orca: cases 1 & 2 build the pattern symmetrically around the origin, so on their own they + // phase to the global origin and every part shares one grid. Shift the pattern onto the box + // center this->bounding_box carries, so separated infills align each part on itself. The center + // is the origin for a standalone object (or when the feature is off), making this a no-op there. + if (Pattern_type != 0) + for (Polyline &pl : polylines) + pl.translate(rotate_vector.second); + // Apply multiline fill multiline_fill(polylines, params, spacing); diff --git a/src/libslic3r/GCodeWriter.cpp b/src/libslic3r/GCodeWriter.cpp index bbf69fe181..26db1c61e5 100644 --- a/src/libslic3r/GCodeWriter.cpp +++ b/src/libslic3r/GCodeWriter.cpp @@ -110,6 +110,7 @@ void GCodeWriter::set_extruders(std::vector extruder_ids) m_filament_extruders.clear(); //ORCA: Reset current extruder ID and clear pointers to prevent dangling pointers when extruders are recreated. m_curr_extruder_id = -1; + m_cached_extruder_idx = 0; std::fill(m_curr_filament_extruder.begin(), m_curr_filament_extruder.end(), nullptr); m_filament_extruders.reserve(extruder_ids.size()); for (unsigned int extruder_id : extruder_ids) @@ -609,6 +610,7 @@ std::string GCodeWriter::toolchange(unsigned int filament_id, int nozzle_id) assert(filament_extruder_iter != m_filament_extruders.end() && filament_extruder_iter->id() == filament_id); m_curr_extruder_id = filament_extruder_iter->extruder_id(); m_curr_filament_extruder[m_curr_extruder_id] = &*filament_extruder_iter; + m_cached_extruder_idx = get_extruder_index(this->config, filament_id); // return the toolchange command // if we are running a single-extruder setup, just set the extruder and return nothing @@ -676,7 +678,7 @@ std::string GCodeWriter::travel_to_xy(const Vec2d &point, const std::string &com GCodeG1Formatter w; w.emit_xy(point_on_plate); auto speed = m_is_first_layer - ? this->config.get_abs_value_at("initial_layer_travel_speed", get_extruder_index(this->config, filament()->id())) : this->config.travel_speed.get_at(get_extruder_index(this->config, filament()->id())); + ? this->config.get_abs_value_at("initial_layer_travel_speed", m_cached_extruder_idx) : this->config.travel_speed.get_at(m_cached_extruder_idx); w.emit_f(speed * 60.0); //BBS w.emit_comment(GCodeWriter::full_gcode_comment, comment); @@ -762,7 +764,7 @@ std::string GCodeWriter::travel_to_xyz(const Vec3d &point, const std::string &co // BBS Vec3d dest_point = point; auto travel_speed = - m_is_first_layer ? this->config.get_abs_value_at("initial_layer_travel_speed", get_extruder_index(this->config, filament()->id())) : this->config.travel_speed.get_at(get_extruder_index(this->config, filament()->id())); + m_is_first_layer ? this->config.get_abs_value_at("initial_layer_travel_speed", m_cached_extruder_idx) : this->config.travel_speed.get_at(m_cached_extruder_idx); //BBS: a z_hop need to be handle when travel if (std::abs(m_to_lift) > EPSILON) { assert(std::abs(m_lifted) < EPSILON); @@ -859,13 +861,13 @@ std::string GCodeWriter::travel_to_xyz(const Vec3d &point, const std::string &co { //force to move xy first then z after filament change w.emit_xy(Vec2d(point_on_plate.x(), point_on_plate.y())); - w.emit_f(this->config.travel_speed.get_at(get_extruder_index(this->config, filament()->id())) * 60.0); + w.emit_f(this->config.travel_speed.get_at(m_cached_extruder_idx) * 60.0); w.emit_comment(GCodeWriter::full_gcode_comment, comment); out_string = w.string() + _travel_to_z(point_on_plate.z(), comment); } else { GCodeG1Formatter w; w.emit_xyz(point_on_plate); - w.emit_f(this->config.travel_speed.get_at(get_extruder_index(this->config, filament()->id())) * 60.0); + w.emit_f(this->config.travel_speed.get_at(m_cached_extruder_idx) * 60.0); w.emit_comment(GCodeWriter::full_gcode_comment, comment); out_string = w.string(); } @@ -898,10 +900,10 @@ std::string GCodeWriter::_travel_to_z(double z, const std::string &comment) { m_pos(2) = z; - double speed = this->config.travel_speed_z.get_at(get_extruder_index(this->config, filament()->id())); + double speed = this->config.travel_speed_z.get_at(m_cached_extruder_idx); if (speed == 0.) { - speed = m_is_first_layer ? this->config.get_abs_value_at("initial_layer_travel_speed", get_extruder_index(this->config, filament()->id())) - : this->config.travel_speed.get_at(get_extruder_index(this->config, filament()->id())); + speed = m_is_first_layer ? this->config.get_abs_value_at("initial_layer_travel_speed", m_cached_extruder_idx) + : this->config.travel_speed.get_at(m_cached_extruder_idx); } GCodeG1Formatter w; @@ -915,11 +917,11 @@ std::string GCodeWriter::_travel_to_z(double z, const std::string &comment) std::string GCodeWriter::_spiral_travel_to_z(double z, const Vec2d &ij_offset, const std::string &comment) { std::string output; - double speed = this->config.travel_speed_z.get_at(get_extruder_index(this->config, filament()->id())); + double speed = this->config.travel_speed_z.get_at(m_cached_extruder_idx); if (speed == 0.) { - speed = m_is_first_layer ? this->config.get_abs_value_at("initial_layer_travel_speed", get_extruder_index(this->config, filament()->id())) - : this->config.travel_speed.get_at(get_extruder_index(this->config, filament()->id())); + speed = m_is_first_layer ? this->config.get_abs_value_at("initial_layer_travel_speed", m_cached_extruder_idx) + : this->config.travel_speed.get_at(m_cached_extruder_idx); } if (!this->config.enable_arc_fitting) { // Orca: if arc fitting is disabled, approximate the arc with small linear segments @@ -1282,6 +1284,7 @@ void GCodeWriter::init_extruder(unsigned int filament_id) assert(filament_extruder_iter != m_filament_extruders.end() && filament_extruder_iter->id() == filament_id); m_curr_extruder_id = filament_extruder_iter->extruder_id(); m_curr_filament_extruder[m_curr_extruder_id] = &*filament_extruder_iter; + m_cached_extruder_idx = get_extruder_index(this->config, filament_id); } } diff --git a/src/libslic3r/GCodeWriter.hpp b/src/libslic3r/GCodeWriter.hpp index f387bfc868..2e7ea2176c 100644 --- a/src/libslic3r/GCodeWriter.hpp +++ b/src/libslic3r/GCodeWriter.hpp @@ -19,6 +19,7 @@ public: GCodeWriter() : multiple_extruders(false), m_curr_filament_extruder(MAXIMUM_EXTRUDER_NUMBER, nullptr), m_curr_extruder_id (-1), + m_cached_extruder_idx(0), m_single_extruder_multi_material(false), m_last_acceleration(0), m_max_acceleration(0),m_last_travel_acceleration(0), m_max_travel_acceleration(0), m_last_jerk(0), m_max_jerk_x(0), m_max_jerk_y(0), @@ -140,6 +141,8 @@ public: bool m_single_extruder_multi_material; std::vector m_curr_filament_extruder; int m_curr_extruder_id; + // Motion uses the global/base process variant until a filament becomes active. + size_t m_cached_extruder_idx; unsigned int m_last_acceleration; unsigned int m_last_travel_acceleration; std::vector m_max_travel_acceleration; diff --git a/src/libslic3r/Layer.hpp b/src/libslic3r/Layer.hpp index d871bcbea2..8a5aa78036 100644 --- a/src/libslic3r/Layer.hpp +++ b/src/libslic3r/Layer.hpp @@ -157,6 +157,10 @@ public: ExPolygons lslices; ExPolygons lslices_extrudable; // BBS: the extrudable part of lslices used for tree support std::vector lslices_bboxes; + // Orca: for separated infills / per-model centering. Aligned with lslices: for each island, the + // full bounding box of the 3D connected body (across all layers) it belongs to. Populated by + // PrintObject::infill() only when the feature is used; empty otherwise. + std::vector lslices_separated_component_bboxes; // BBS ExPolygons loverhangs; diff --git a/src/libslic3r/Model.cpp b/src/libslic3r/Model.cpp index eb9153a661..1177a5227d 100644 --- a/src/libslic3r/Model.cpp +++ b/src/libslic3r/Model.cpp @@ -2708,23 +2708,6 @@ const TriangleMesh& ModelVolume::get_convex_hull() const return *m_convex_hull.get(); } -// Orca: get volume bbox for separate infill -static std::mutex mtx_model; -BoundingBox ModelVolume::get_volume_bbox(const Transform3d &matrix, Point &shift, bool apply_cache = false) { - std::unique_lock l(mtx_model); // locks function here - // Orca: the cache is keyed by the instance transform/shift; a ModelVolume is shared - // across instances, so returning the cache blindly would hand back another instance's bbox. - if (m_cached_volume_bbox.defined && apply_cache - && matrix.isApprox(m_cached_volume_bbox_matrix) - && shift == m_cached_volume_bbox_shift) - return m_cached_volume_bbox; - auto hull = get_convex_hull_2d(matrix); - hull.translate(-shift); - m_cached_volume_bbox_matrix = matrix; - m_cached_volume_bbox_shift = shift; - return m_cached_volume_bbox = hull.bounding_box().polygon().bounding_box(); -} - //BBS: refine the model part names ModelVolumeType ModelVolume::type_from_string(const std::string &s) { diff --git a/src/libslic3r/Model.hpp b/src/libslic3r/Model.hpp index 518fbbaa1c..2d46bc4cdf 100644 --- a/src/libslic3r/Model.hpp +++ b/src/libslic3r/Model.hpp @@ -923,7 +923,6 @@ public: //Orca: cache clearing procedure to ensure that the shape is positioned accurately when manipulating it void clear_cache() { m_cached_trans_matrix = Transform3d::Identity().inverse(); // get unvelivable matrix - m_cached_volume_bbox.reset(); m_convex_hull_2d.clear(); m_cached_2d_polygon.clear(); }; @@ -969,9 +968,6 @@ public: // Get count of errors in the mesh int get_repaired_errors_count() const; - BoundingBox get_volume_bbox(const Transform3d &matrix, Point &shift, bool apply_cache); - void reset_volume_bbox() { m_cached_volume_bbox.reset(); }; - // Helpers for loading / storing into AMF / 3MF files. static ModelVolumeType type_from_string(const std::string &s); static std::string type_to_string(const ModelVolumeType t); @@ -1059,9 +1055,6 @@ private: mutable Transform3d m_cached_trans_matrix; //BBS, used for convex_hell_2d acceleration mutable Polygon m_cached_2d_polygon; //BBS, used for convex_hell_2d acceleration Geometry::Transformation m_transformation; - mutable BoundingBox m_cached_volume_bbox; //Orca: used for separated infills - mutable Transform3d m_cached_volume_bbox_matrix{Transform3d::Identity()}; //Orca: cache key for m_cached_volume_bbox - mutable Point m_cached_volume_bbox_shift{Point(0, 0)}; //Orca: cache key for m_cached_volume_bbox //BBS: add convex_hell_2d related logic void calculate_convex_hull_2d(const Geometry::Transformation &transformation) const; diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 0a9ee60728..9416b43c2f 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -210,7 +210,9 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n "chamber_minimal_temperature", "thumbnails", "thumbnails_format", - "anisotropic_surfaces", "center_of_surface_pattern", "separated_infills", + "anisotropic_surfaces", + "center_of_surface_pattern", + "separated_infills", "seam_gap", "role_based_wipe_speed", "wipe_speed", diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 2f4cd09801..01e499d488 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -1377,7 +1377,7 @@ void PrintConfigDef::init_fff_params() "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 infill 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."); def->sidetext = u8"°"; // degrees, don't need translation @@ -1394,7 +1394,7 @@ void PrintConfigDef::init_fff_params() "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 infill 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."); def->sidetext = u8"°"; // degrees, don't need translation @@ -3273,12 +3273,13 @@ void PrintConfigDef::init_fff_params() def->min = 0; def->max = 100; def->set_default_value(new ConfigOptionPercent(20)); - + def = this->add("align_infill_direction_to_model", coBool); - def->label = L("Align infill direction to model"); + def->label = L("Align directions to model"); def->category = L("Strength"); - def->tooltip = L("Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" - "When enabled, directions rotate with the model to maintain optimal strength characteristics."); + def->tooltip = L("Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n" + "When enabled, these directions rotate together with the model so the printed features keep their intended orientation " + "relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed."); def->mode = comAdvanced; def->set_default_value(new ConfigOptionBool(false)); @@ -7199,13 +7200,12 @@ void PrintConfigDef::init_fff_params() def = this->add("separated_infills", coBool); def->label = L("Separated infills"); def->category = L("Strength"); - def->tooltip = L("Aligns the internal infill pattern of each part independently instead of across the whole object or assembly.\n" - "By default, aligned infill patterns share a single origin for the entire object, so the pattern of every " - "part is referenced to the same point. When enabled, each connected body is aligned on its own: parts that " - "touch or overlap are treated as one body and share an origin, while parts detached from the rest each get " - "their own.\n Useful when an assembly groups several distinct objects that should each keep a self-centered infill.\n" - "Only affects centered infill patterns (Archimedean Chords, Octagram Spiral) and patterns driven by an " - "infill rotation template."); + def->tooltip = L("Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the " + "whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts " + "(or distinct 3D objects) each get their own.\n" + "Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n" + "Affects line and grid patterns and rotation-template infills.\n" + "Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected."); def->mode = comExpert; def->set_default_value(new ConfigOptionBool(false)); diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index 2249360ea5..0ace3f5e9e 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -118,6 +118,34 @@ enum InfillPattern : int { ipCount, }; +// Orca: Infill patterns whose alignment origin follows the fill bounding box, so the +// "separated_infills" option can re-center them per connected body. Patterns evaluated in +// absolute/global coordinates (Gyroid, TPMS, Honeycomb, CrossHatch, ...) or that are shape-relative +// (Concentric) ignore that bounding box and are therefore excluded. +inline bool is_separable_infill_pattern(InfillPattern pattern) +{ + switch (pattern) { + case ipRectilinear: + case ipAlignedRectilinear: + case ipZigZag: + case ipCrossZag: + case ipLockedZag: + case ipGrid: + case ipTriangles: + case ipStars: // tri-hexagon + case ipCubic: + case ipQuarterCubic: + case ipLateralHoneycomb: + case ipLateralLattice: + case ipHilbertCurve: + case ipArchimedeanChords: + case ipOctagramSpiral: + return true; + default: + return false; + } +} + enum class IroningType { NoIroning, TopSurfaces, diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp index 9d829b2ccf..d89a9b8ab4 100644 --- a/src/libslic3r/PrintObject.cpp +++ b/src/libslic3r/PrintObject.cpp @@ -563,11 +563,6 @@ void PrintObject::prepare_infill() { if (! this->set_started(posPrepareInfill)) return; - - // Orca: clear all volume bbox caches - for (auto volume : this->model_object()->volumes) - volume->reset_volume_bbox(); - m_print->set_status(25, L("Generating infill regions")); if (m_typed_slices) { // To improve robustness of detect_surfaces_type() when reslicing (working with typed slices), see GH issue #7442. @@ -710,6 +705,72 @@ void PrintObject::infill() if (this->set_started(posInfill)) { m_print->set_status(35, L("Generating infill toolpath")); + + // Orca: precompute the object's 3D connected bodies for separated infills / per-model + // centering. Two islands belong to the same body when their slices overlap on adjacent + // layers; islands that only overlap in top-down projection but never touch (e.g. interleaved + // chain links) stay separate, matching "split to objects". Each layer island then records + // the full bounding box of its body, so its infill is centered on that body as if it were + // sliced alone. Done once here, before the parallel fill, and only when a region needs it. + bool needs_separated_components = false; + for (size_t i = 0; i < this->num_printing_regions(); ++ i) { + const PrintRegionConfig &rc = this->printing_region(i).config(); + if (rc.separated_infills || rc.center_of_surface_pattern == CenterOfSurfacePattern::Each_Model) { + needs_separated_components = true; + break; + } + } + // Fast path: the feature only changes anything when the object is made of more than one + // connected body. Detect that cheaply the same way as "Split to objects" — more than one + // model part, or a single part whose mesh is splittable (is_splittable() is cached). A single + // body already shares the object center, i.e. the default, so skip the connectivity pass. + if (needs_separated_components) { + int parts = 0; + const ModelVolume *first_part = nullptr; + for (const ModelVolume *v : this->model_object()->volumes) + if (v->is_model_part()) { ++ parts; first_part = v; } + if (parts <= 1 && ! (first_part != nullptr && first_part->is_splittable())) + needs_separated_components = false; + } + for (Layer *layer : m_layers) + layer->lslices_separated_component_bboxes.clear(); + if (needs_separated_components) { + const size_t nl = m_layers.size(); + std::vector offset(nl + 1, 0); // flat index of the first island of each layer + for (size_t i = 0; i < nl; ++ i) + offset[i + 1] = offset[i] + m_layers[i]->lslices.size(); + const size_t nreg = offset[nl]; + // Union-find over every (layer, island). + std::vector parent(nreg); + for (size_t i = 0; i < nreg; ++ i) parent[i] = i; + auto find = [&parent](size_t x) { + while (parent[x] != x) { parent[x] = parent[parent[x]]; x = parent[x]; } + return x; + }; + auto unite = [&](size_t a, size_t b) { a = find(a); b = find(b); if (a != b) parent[a] = b; }; + // Join islands that overlap between two consecutive layers. + for (size_t i = 0; i + 1 < nl; ++ i) { + const Layer *la = m_layers[i], *lb = m_layers[i + 1]; + for (size_t a = 0; a < la->lslices.size(); ++ a) + for (size_t b = 0; b < lb->lslices.size(); ++ b) + if (la->lslices_bboxes[a].overlap(lb->lslices_bboxes[b]) && + ! intersection_ex(la->lslices[a], lb->lslices[b]).empty()) + unite(offset[i] + a, offset[i + 1] + b); + } + // Full bounding box of each body, indexed by its union-find root. + std::vector body_bbox(nreg); + for (size_t i = 0; i < nl; ++ i) + for (size_t a = 0; a < m_layers[i]->lslices.size(); ++ a) + body_bbox[find(offset[i] + a)].merge(m_layers[i]->lslices_bboxes[a]); + // Store the body bbox for every island. + for (size_t i = 0; i < nl; ++ i) { + Layer *layer = m_layers[i]; + layer->lslices_separated_component_bboxes.resize(layer->lslices.size()); + for (size_t a = 0; a < layer->lslices.size(); ++ a) + layer->lslices_separated_component_bboxes[a] = body_bbox[find(offset[i] + a)]; + } + } + const auto& adaptive_fill_octree = this->m_adaptive_fill_octrees.first; const auto& support_fill_octree = this->m_adaptive_fill_octrees.second; diff --git a/src/slic3r/GUI/AboutDialog.cpp b/src/slic3r/GUI/AboutDialog.cpp index 6bbc86f884..a4f0f06d65 100644 --- a/src/slic3r/GUI/AboutDialog.cpp +++ b/src/slic3r/GUI/AboutDialog.cpp @@ -324,10 +324,12 @@ AboutDialog::AboutDialog() m_html->SetFonts(font.GetFaceName(), font.GetFaceName(), size); m_html->SetMinSize(wxSize(FromDIP(-1), FromDIP(16))); m_html->SetBorders(2); + wxColour bgr_clr = GetBackgroundColour(); + const auto bgr_clr_str = encode_color(ColorRGB(bgr_clr.Red(), bgr_clr.Green(), bgr_clr.Blue())); const auto text = from_u8( (boost::format( "" - "" + "" "

https://www.orcaslicer.com

" "" "") diff --git a/src/slic3r/GUI/AmsMappingPopup.cpp b/src/slic3r/GUI/AmsMappingPopup.cpp index 9a3b97b061..af5df1f091 100644 --- a/src/slic3r/GUI/AmsMappingPopup.cpp +++ b/src/slic3r/GUI/AmsMappingPopup.cpp @@ -673,7 +673,7 @@ void MaterialSyncItem::doRender(wxDC &dc) dc.DrawRoundedRectangle(1, 1, MATERIAL_ITEM_SIZE.x - 1, MATERIAL_ITEM_SIZE.y - 1, 5); if (m_selected) { - dc.SetPen(wxColour(0x00, 0xAE, 0x42)); + dc.SetPen(wxColour("#009688")); // ORCA selected item border color dc.SetBrush(*wxTRANSPARENT_BRUSH); dc.DrawRoundedRectangle(1, 1, MATERIAL_ITEM_SIZE.x - 1, MATERIAL_ITEM_SIZE.y - 1, 5); } @@ -684,7 +684,7 @@ void MaterialSyncItem::doRender(wxDC &dc) dc.DrawRoundedRectangle(0, 0, MATERIAL_ITEM_SIZE.x, MATERIAL_ITEM_SIZE.y, 5); if (m_selected) { - dc.SetPen(wxPen(wxColour(0x00, 0xAE, 0x42), FromDIP(2))); + dc.SetPen(wxPen(wxColour("#009688"), FromDIP(2))); // ORCA selected item border color dc.SetBrush(*wxTRANSPARENT_BRUSH); dc.DrawRoundedRectangle(FromDIP(1), FromDIP(1), MATERIAL_ITEM_SIZE.x - FromDIP(1), MATERIAL_ITEM_SIZE.y - FromDIP(1), 5); } @@ -936,7 +936,7 @@ void AmsMapingPopup::msw_rescale() m_split_left_line->SetMaxSize(wxSize(-1, 1)); sizer_split_ams->Add(0, 0, 0, wxEXPAND, 0); sizer_split_ams->Add(ams_title_text, 0, wxALIGN_CENTER, 0); - sizer_split_ams->Add(m_split_left_line, 1, wxEXPAND, 0); + sizer_split_ams->Add(m_split_left_line, 1, wxALIGN_CENTER, 0); // ORCA align line vertically return sizer_split_ams; } @@ -1621,7 +1621,7 @@ bool AmsMapingPopup::ProcessLeftDown(wxMouseEvent &event) void AmsMapingPopup::paintEvent(wxPaintEvent &evt) { wxPaintDC dc(this); - dc.SetPen(wxColour(0xAC, 0xAC, 0xAC)); + dc.SetPen(wxPen(StateColor::darkModeColorFor(wxColour("#009688")),FromDIP(2))); // ORCA use colorful border for separation dc.SetBrush(*wxTRANSPARENT_BRUSH); dc.DrawRoundedRectangle(0, 0, GetSize().x, GetSize().y, 0); } @@ -2482,7 +2482,7 @@ AmsRMGroup* AmsReplaceMaterialDialog::create_backup_group(wxString gname, std::m void AmsReplaceMaterialDialog::paintEvent(wxPaintEvent& evt) { wxPaintDC dc(this); - dc.SetPen(wxColour(0xAC, 0xAC, 0xAC)); + dc.SetPen(StateColor::darkModeColorFor(wxColour("#DBDBDB"))); // ORCA fix popup border color for dark mode dc.SetBrush(*wxTRANSPARENT_BRUSH); dc.DrawRoundedRectangle(0, 0, GetSize().x, GetSize().y, 0); } diff --git a/src/slic3r/GUI/BaseTransparentDPIFrame.cpp b/src/slic3r/GUI/BaseTransparentDPIFrame.cpp index fa2b8cab91..918116d89b 100644 --- a/src/slic3r/GUI/BaseTransparentDPIFrame.cpp +++ b/src/slic3r/GUI/BaseTransparentDPIFrame.cpp @@ -30,6 +30,19 @@ BaseTransparentDPIFrame::BaseTransparentDPIFrame( // SetBackgroundStyle(wxBackgroundStyle::wxBG_STYLE_TRANSPARENT); SetTransparent(m_init_transparent); SetBackgroundColour(wxColour(23, 25, 22, 128)); + + // ORCA add border + Bind(wxEVT_PAINT, [this](wxPaintEvent& evt) { + wxPaintDC dc(this); + dc.SetPen(wxPen(StateColor::darkModeColorFor(wxColour("#009688")), FromDIP(2))); + dc.SetBrush(*wxTRANSPARENT_BRUSH); + dc.DrawRoundedRectangle(0, 0, GetSize().x, GetSize().y, 0); + }); + + int window_padding = 15; + auto imgsize = 32; + auto imgright = 10; + //Adaptive Frame Width wxClientDC dc(parent); wxSize msg_sz = dc.GetMultiLineTextExtent(ok_text); @@ -44,21 +57,16 @@ BaseTransparentDPIFrame::BaseTransparentDPIFrame( m_sizer_main = new wxBoxSizer(wxVERTICAL); wxBoxSizer *text_sizer = new wxBoxSizer(wxHORIZONTAL); - text_sizer->AddSpacer(FromDIP(20)); - auto image_sizer = new wxBoxSizer(wxVERTICAL); - auto imgsize = FromDIP(25); - auto completedimg = new wxStaticBitmap(this, wxID_ANY, create_scaled_bitmap("completed", this, 25), wxDefaultPosition, wxSize(imgsize, imgsize), 0); - image_sizer->Add(completedimg, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL, FromDIP(0)); - image_sizer->AddStretchSpacer(); - text_sizer->Add(image_sizer); - text_sizer->AddSpacer(FromDIP(5)); + + auto completedimg = new wxStaticBitmap(this, wxID_ANY, create_scaled_bitmap("completed", this, imgsize), wxDefaultPosition, FromDIP(wxSize(imgsize, imgsize)), 0); + + text_sizer->Add(completedimg, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, FromDIP(imgright)); m_finish_text = new Label(this, win_text, LB_AUTO_WRAP); - m_finish_text->SetMinSize(wxSize(FromDIP(win_width - 64), -1)); - m_finish_text->SetMaxSize(wxSize(FromDIP(win_width - 64), -1)); + m_finish_text->SetMinSize(wxSize(FromDIP(win_width - (window_padding * 2 + imgright + imgsize)), -1)); + m_finish_text->SetMaxSize(wxSize(FromDIP(win_width - (window_padding * 2 + imgright + imgsize)), -1)); m_finish_text->SetForegroundColour(wxColour(255, 255, 255, 255)); - text_sizer->Add(m_finish_text, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL, 0); - text_sizer->AddSpacer(FromDIP(20)); - m_sizer_main->Add(text_sizer, FromDIP(0), wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxTOP, FromDIP(15)); + text_sizer->Add(m_finish_text, 0, wxALIGN_CENTER_VERTICAL); + m_sizer_main->Add(text_sizer, 0, wxALL, FromDIP(15)); wxBoxSizer *bSizer_button = new wxBoxSizer(wxHORIZONTAL); bSizer_button->SetMinSize(wxSize(FromDIP(100), -1)); @@ -66,22 +74,18 @@ BaseTransparentDPIFrame::BaseTransparentDPIFrame( bSizer_button->Add(m_checkbox, 0, wxALIGN_LEFT);*/ bSizer_button->AddStretchSpacer(1); m_button_ok = new Button(this, ok_text); - m_button_ok->SetStyle(ButtonStyle::Confirm, ButtonType::Window); - m_button_ok->SetSize(wxSize(FromDIP(60), FromDIP(30))); - m_button_ok->SetMinSize(wxSize(FromDIP(90), FromDIP(30))); - bSizer_button->Add(m_button_ok, 0, wxALIGN_RIGHT | wxLEFT | wxTOP, FromDIP(10)); + m_button_ok->SetStyle(ButtonStyle::Confirm, ButtonType::Choice); + bSizer_button->Add(m_button_ok, 0, wxALIGN_RIGHT | wxLEFT, FromDIP(10)); m_button_ok->Bind(wxEVT_COMMAND_BUTTON_CLICKED, [this](wxCommandEvent &e) { deal_ok(); }); m_button_cancel = new Button(this, cancel_text); - m_button_cancel->SetStyle(ButtonStyle::Regular, ButtonType::Window); - m_button_cancel->SetSize(wxSize(FromDIP(65), FromDIP(30))); - m_button_cancel->SetMinSize(wxSize(FromDIP(65), FromDIP(30))); - bSizer_button->Add(m_button_cancel, 0, wxALIGN_RIGHT | wxLEFT | wxTOP, FromDIP(10)); + m_button_cancel->SetStyle(ButtonStyle::Regular, ButtonType::Choice); + bSizer_button->Add(m_button_cancel, 0, wxALIGN_RIGHT | wxLEFT, FromDIP(10)); m_button_cancel->Bind(wxEVT_COMMAND_BUTTON_CLICKED, [this](wxCommandEvent &e) { deal_cancel(); }); - m_sizer_main->Add(bSizer_button, 1, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(20)); + m_sizer_main->Add(bSizer_button, 1, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(window_padding)); Bind(wxEVT_CLOSE_WINDOW, [this](auto &e) { on_hide(); diff --git a/src/slic3r/GUI/BonjourDialog.cpp b/src/slic3r/GUI/BonjourDialog.cpp index db7794a52a..8b3217e193 100644 --- a/src/slic3r/GUI/BonjourDialog.cpp +++ b/src/slic3r/GUI/BonjourDialog.cpp @@ -8,7 +8,6 @@ #include #include -#include #include #include #include @@ -20,6 +19,8 @@ #include "slic3r/GUI/format.hpp" #include "slic3r/Utils/Bonjour.hpp" +#include "slic3r/GUI/Widgets/DialogButtons.hpp" + namespace Slic3r { @@ -63,30 +64,30 @@ BonjourDialog::BonjourDialog(wxWindow *parent, Slic3r::PrinterTechnology tech) , timer_state(0) , tech(tech) { + SetBackgroundColour(*wxWHITE); + const int em = GUI::wxGetApp().em_unit(); list->SetMinSize(wxSize(80 * em, 30 * em)); wxBoxSizer *vsizer = new wxBoxSizer(wxVERTICAL); + label->SetFont(Label::Body_14); vsizer->Add(label, 0, wxEXPAND | wxTOP | wxLEFT | wxRIGHT, em); list->SetSingleStyle(wxLC_SINGLE_SEL); list->SetSingleStyle(wxLC_SORT_DESCENDING); - list->AppendColumn(_(L("Address")), wxLIST_FORMAT_LEFT, 5 * em); + list->AppendColumn(_(L("Address")), wxLIST_FORMAT_LEFT, 20 * em); list->AppendColumn(_(L("Hostname")), wxLIST_FORMAT_LEFT, 10 * em); list->AppendColumn(_(L("Service name")), wxLIST_FORMAT_LEFT, 20 * em); if (tech == ptFFF) { - list->AppendColumn(_(L("OctoPrint version")), wxLIST_FORMAT_LEFT, 5 * em); + list->AppendColumn(_(L("OctoPrint version")), wxLIST_FORMAT_LEFT, 15 * em); } vsizer->Add(list, 1, wxEXPAND | wxALL, em); - wxBoxSizer *button_sizer = new wxBoxSizer(wxHORIZONTAL); - button_sizer->Add(new wxButton(this, wxID_OK, _L("OK")), 0, wxALL, em); - button_sizer->Add(new wxButton(this, wxID_CANCEL, _L("Cancel")), 0, wxALL, em); - // ^ Note: The Ok/Cancel labels are translated by wxWidgets + auto dlg_btns = new GUI::DialogButtons(this, {"OK", "Cancel"}); - vsizer->Add(button_sizer, 0, wxALIGN_CENTER); + vsizer->Add(dlg_btns, 0, wxEXPAND); SetSizerAndFit(vsizer); Bind(EVT_BONJOUR_REPLY, &BonjourDialog::on_reply, this); @@ -241,12 +242,15 @@ IPListDialog::IPListDialog(wxWindow* parent, const wxString& hostname, const std , m_list(new wxListView(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_REPORT | wxSIMPLE_BORDER)) , m_selected_index (selected_index) { + SetBackgroundColour(*wxWHITE); + const int em = GUI::wxGetApp().em_unit(); m_list->SetMinSize(wxSize(40 * em, 30 * em)); wxBoxSizer* vsizer = new wxBoxSizer(wxVERTICAL); auto* label = new wxStaticText(this, wxID_ANY, GUI::format_wxstr(_L("There are several IP addresses resolving to hostname %1%.\nPlease select one that should be used."), hostname)); + label->SetFont(Label::Body_14); vsizer->Add(label, 0, wxEXPAND | wxTOP | wxLEFT | wxRIGHT, em); m_list->SetSingleStyle(wxLC_SINGLE_SEL); @@ -259,11 +263,9 @@ IPListDialog::IPListDialog(wxWindow* parent, const wxString& hostname, const std vsizer->Add(m_list, 1, wxEXPAND | wxALL, em); - wxBoxSizer* button_sizer = new wxBoxSizer(wxHORIZONTAL); - button_sizer->Add(new wxButton(this, wxID_OK, _L("OK")), 0, wxALL, em); - button_sizer->Add(new wxButton(this, wxID_CANCEL, _L("Cancel")), 0, wxALL, em); + auto dlg_btns = new GUI::DialogButtons(this, {"OK", "Cancel"}); - vsizer->Add(button_sizer, 0, wxALIGN_CENTER); + vsizer->Add(dlg_btns, 0, wxEXPAND); SetSizerAndFit(vsizer); GUI::wxGetApp().UpdateDlgDarkUI(this); diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index edae8c6c79..4bd9749073 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -734,10 +734,10 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, in toggle_line("anisotropic_surfaces", has_centered_surface); // Orca: separate infills - bool is_internal_infill_centered = is_centered_pattern(config->option>("sparse_infill_pattern")->value) || - config->opt_string("sparse_infill_rotate_template") != "" || - config->opt_string("solid_infill_rotate_template") != ""; - toggle_line("separated_infills", is_internal_infill_centered); + bool is_internal_infill_separable = is_separable_infill_pattern(config->option>("sparse_infill_pattern")->value) || + config->opt_string("sparse_infill_rotate_template") != "" || + config->opt_string("solid_infill_rotate_template") != ""; + toggle_line("separated_infills", is_internal_infill_separable); // Orca: no need gaps for (auto el : {"gap_fill_target", "filter_out_gap_fill"}) diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index 0f86ff903f..61b3e52a98 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -489,7 +489,7 @@ void GCodeViewer::SequentialView::Marker::render_position_window(const libvgcode const float main_row_h = 2.0f * text_h + item_spacing_y; // Two lines of text (position and detail) + spacing between them const float properties_h = static_cast(properties_rows.size()) * (text_h + 2.0f * cell_pad_y) + 2.0f * cell_pad_y + 1.0f + item_spacing_y // table rows + item_spacing_y + show_button_h // Spacing() + Show/Hide button row - + item_spacing_y + 1.0f + style.FramePadding.y; // Spacing() + Separator() + Dummy() + + item_spacing_y + 1.0f + style.WindowPadding.y; // Spacing() + Separator() + Dummy() const float folded_window_h = std::ceil(window_pad_h + main_row_h); // Height of the window when properties are hidden, with padding, rounded up for better look const float unfolded_window_h = std::ceil(folded_window_h + properties_h); // Height of the window when properties are shown, with padding, rounded up for better look const float window_h = properties_shown ? unfolded_window_h : folded_window_h; // Final window height depending on whether properties are shown or not @@ -615,9 +615,12 @@ void GCodeViewer::SequentialView::Marker::render_position_window(const libvgcode ImGui::Spacing(); ImGui::Separator(); - ImGui::Dummy({0, style.FramePadding.y}); + ImGui::Dummy({0, style.WindowPadding.y}); } + float draw_area_height = ImGui::GetTextLineHeight() * 2.f + style.ItemSpacing.y; + ImGui::Dummy({10.f, draw_area_height}); // reserve area + ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding , 3.f * m_scale); ImGui::PushStyleVar(ImGuiStyleVar_FramePadding , ImVec2(2.f, 2.f) * m_scale); ImGui::PushStyleColor(ImGuiCol_Button , ImVec4(0, 0, 0, 0)); @@ -625,6 +628,10 @@ void GCodeViewer::SequentialView::Marker::render_position_window(const libvgcode ImGui::PushStyleColor(ImGuiCol_ButtonActive , ImVec4(84 / 255.f, 84 / 255.f, 90 / 255.f, 1.f)); const float main_wnd_height = ImGui::GetWindowHeight(); + const float draw_start_y = main_wnd_height - draw_area_height - style.WindowPadding.y; + + ImGui::SetCursorPos(ImVec2(style.WindowPadding.x, draw_start_y)); + // ORCA use glyph based button for fixing button sizes changing depends on used font size on platform const wchar_t foldIcon = properties_shown ? ImGui::UnfoldButtonIcon : ImGui::FoldButtonIcon; if (imgui.glyph_button(foldIcon, ImVec2(16.f, 16.f) * m_scale)) { @@ -640,10 +647,7 @@ void GCodeViewer::SequentialView::Marker::render_position_window(const libvgcode ImGui::PopStyleColor(3); ImGui::PopStyleVar(2); - ImGui::SameLine(); - - if(!properties_shown) - ImGui::SetCursorPosY(ImGui::GetCursorPosY() - style.FramePadding.y); // aligns button with next group + ImGui::SetCursorPos(ImVec2(style.WindowPadding.x + style.ItemSpacing.x + 24.f * m_scale, draw_start_y - 1.f * m_scale)); ImGui::BeginGroup(); // group contents to make information area more compact diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 5eda0f7f06..b01ab3ac06 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -1231,6 +1231,14 @@ GLCanvas3D::~GLCanvas3D() glsafe(::glDeleteTextures(1, &m_ssao_depth_texture_id)); m_ssao_depth_texture_id = 0; } + if (m_shadow_map_texture_id != 0) { + glsafe(::glDeleteTextures(1, &m_shadow_map_texture_id)); + m_shadow_map_texture_id = 0; + } + if (m_shadow_map_fbo != 0) { + glsafe(::glDeleteFramebuffers(1, &m_shadow_map_fbo)); + m_shadow_map_fbo = 0; + } m_plate_shadow_mask.reset(); } m_plate_shadow_mask_key.clear(); @@ -2033,6 +2041,9 @@ void GLCanvas3D::render(bool only_init) // draw scene glsafe(::glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)); + // Invalidate the shadow map each frame; only the View3D path below rebuilds it. This keeps + // the Preview / Assemble canvases from sampling a stale map with an outdated light matrix. + m_shadow_map_valid = false; _render_background(); //BBS add partplater rendering logic @@ -2057,7 +2068,8 @@ void GLCanvas3D::render(bool only_init) _render_platelist(camera.get_view_matrix(), camera.get_projection_matrix(), !camera.is_looking_downward(), only_current, only_body, hover_id, true, show_grid); //BBS: add outline logic - _render_cast_shadows_on_plate(camera.get_view_matrix(), camera.get_projection_matrix()); + // Depth pass for object-on-object and self shadows; consumed by the gouraud shader below. + _render_shadows(camera.get_view_matrix(), camera.get_projection_matrix()); _render_objects(GLVolumeCollection::ERenderType::Opaque, !m_gizmos.is_running()); _render_sla_slices(); _render_selection(); @@ -7858,9 +7870,8 @@ void GLCanvas3D::_render_platelist(const Transform3d& view_matrix, const Transfo wxGetApp().plater()->get_partplate_list().render(view_matrix, projection_matrix, bottom, only_current, only_body, hover_id, render_cali, show_grid); } -void GLCanvas3D::_render_cast_shadows_on_plate(const Transform3d& view_matrix, const Transform3d& projection_matrix) +void GLCanvas3D::_render_shadows(const Transform3d& view_matrix, const Transform3d& projection_matrix) { - // Check if shadow rendering is enabled in configuration if (wxGetApp().app_config == nullptr) return; if (!wxGetApp().app_config->get_bool(SETTING_OPENGL_REALISTIC_MODE)) @@ -7874,54 +7885,181 @@ void GLCanvas3D::_render_cast_shadows_on_plate(const Transform3d& view_matrix, c if (shader == nullptr) return; - // Fixed light direction (pointing downward at an angle) - // Drive shadow direction from current view angle: define light in eye-space, - // then transform it to world-space with inverse view rotation. - const Vec3d light_dir_eye = Vec3d(-0.4574957, 0.4574957, 0.7624929).normalized(); - const Matrix3d view_rot = view_matrix.matrix().block<3, 3>(0, 0); - const Vec3d light_dir_to_light = (view_rot.transpose() * light_dir_eye).normalized(); - const Vec3d ray_dir = -light_dir_to_light; // Direction of shadow projection - - if (std::abs(ray_dir.z()) < 1e-6) + if (OpenGLManager::get_framebuffers_type() == OpenGLManager::EFramebufferType::Arb) { + + // Light direction (same as used in shading and plate shading) + const Vec3d light_dir_eye = Vec3d(-0.4574957, 0.4574957, 0.7624929).normalized(); + const Matrix3d view_rot = view_matrix.matrix().block<3, 3>(0, 0); + const Vec3d dir_to_light = (view_rot.transpose() * light_dir_eye).normalized(); + + // Bounding box of the printable objects (the shadow casters). + BoundingBoxf3 obj_bb; + for (const GLVolume* volume : m_volumes.volumes) { + if (volume == nullptr || !volume->is_active || !volume->printable || volume->is_modifier || volume->is_wipe_tower) + continue; + obj_bb.merge(volume->transformed_bounding_box()); + } + if (!obj_bb.defined) + return; // no objects to cast shadows + + // Orthographic light-space basis (z points toward the light). + const Vec3d up = (std::abs(dir_to_light.z()) > 0.99) ? Vec3d::UnitY() : Vec3d::UnitZ(); + const Vec3d z_axis = dir_to_light; + const Vec3d x_axis = up.cross(z_axis).normalized(); + const Vec3d y_axis = z_axis.cross(x_axis).normalized(); + + // Fit the frustum to the object AABB *and* the object's shadow projected onto the plate + // (clamped to the plate footprint). This keeps the map tight/high-res for short shadows + // while still covering long shadows at grazing light angles, which previously fell outside + // the map and were clipped. + const Vec3d ray_dir = -dir_to_light; // direction the shadow travels + const BoundingBoxf3 plate_bb = m_bed.build_volume().valid() ? m_bed.build_volume().bounding_volume() : obj_bb; + + Vec3d lmin(DBL_MAX, DBL_MAX, DBL_MAX); + Vec3d lmax(-DBL_MAX, -DBL_MAX, -DBL_MAX); + auto enclose = [&](const Vec3d& p) { + const Vec3d lp(x_axis.dot(p), y_axis.dot(p), z_axis.dot(p)); + lmin = lmin.cwiseMin(lp); + lmax = lmax.cwiseMax(lp); + }; + for (int i = 0; i < 8; ++i) { + const Vec3d corner((i & 1) ? obj_bb.max.x() : obj_bb.min.x(), + (i & 2) ? obj_bb.max.y() : obj_bb.min.y(), + (i & 4) ? obj_bb.max.z() : obj_bb.min.z()); + enclose(corner); + // Where this corner's shadow lands on z = 0, clamped to the plate so a grazing angle + // (t -> infinity) stays bounded. + if (ray_dir.z() < -1e-6) { + const double t = -corner.z() / ray_dir.z(); + Vec3d s = corner + t * ray_dir; + s.x() = std::min(std::max(s.x(), plate_bb.min.x()), plate_bb.max.x()); + s.y() = std::min(std::max(s.y(), plate_bb.min.y()), plate_bb.max.y()); + s.z() = 0.0; + enclose(s); + } + } + + // Light "camera" placed just past the nearest enclosed point, looking toward the scene. + const double range = lmax.z() - lmin.z(); + const double margin = std::max(1.0, 0.05 * range); + const double cx = 0.5 * (lmin.x() + lmax.x()); + const double cy = 0.5 * (lmin.y() + lmax.y()); + const Vec3d eye = x_axis * cx + y_axis * cy + z_axis * (lmax.z() + margin); + + Matrix4d light_view = Matrix4d::Identity(); + light_view.block<1, 3>(0, 0) = x_axis.transpose(); + light_view.block<1, 3>(1, 0) = y_axis.transpose(); + light_view.block<1, 3>(2, 0) = z_axis.transpose(); + light_view(0, 3) = -x_axis.dot(eye); + light_view(1, 3) = -y_axis.dot(eye); + light_view(2, 3) = -z_axis.dot(eye); + + // Ortho fit to the light-space extent (symmetric in X/Y around cx,cy; +2% edge padding). + const double halfx = std::max(0.5 * (lmax.x() - lmin.x()), 1.0) * 1.02; + const double halfy = std::max(0.5 * (lmax.y() - lmin.y()), 1.0) * 1.02; + const double near_z = margin * 0.5; + const double far_z = range + margin * 1.5; + Matrix4d light_proj = Matrix4d::Identity(); + light_proj(0, 0) = 1.0 / halfx; + light_proj(1, 1) = 1.0 / halfy; + light_proj(2, 2) = -2.0 / (far_z - near_z); + light_proj(2, 3) = -(far_z + near_z) / (far_z - near_z); + + m_shadow_light_vp = Transform3d(light_proj * light_view); + + // Create / resize the depth texture and FBO + const unsigned int size = 2048; + if (m_shadow_map_texture_id == 0) { + glsafe(::glGenTextures(1, &m_shadow_map_texture_id)); + glsafe(::glBindTexture(GL_TEXTURE_2D, m_shadow_map_texture_id)); + glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST)); + glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)); + glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER)); + glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER)); + const float border[4] = { 1.0f, 1.0f, 1.0f, 1.0f }; + glsafe(::glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, border)); + m_shadow_map_size = 0; + } + if (m_shadow_map_size != size) { + glsafe(::glBindTexture(GL_TEXTURE_2D, m_shadow_map_texture_id)); + glsafe(::glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, size, size, 0, GL_DEPTH_COMPONENT, GL_FLOAT, nullptr)); + m_shadow_map_size = size; + } + if (m_shadow_map_fbo == 0) + glsafe(::glGenFramebuffers(1, &m_shadow_map_fbo)); + + // Save OpenGL state that we will modify + GLint prev_viewport[4] = { 0, 0, 0, 0 }; + glsafe(::glGetIntegerv(GL_VIEWPORT, prev_viewport)); + GLint prev_fbo = 0; + glsafe(::glGetIntegerv(GL_FRAMEBUFFER_BINDING, &prev_fbo)); + GLboolean prev_color_mask[4] = { GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE }; + glsafe(::glGetBooleanv(GL_COLOR_WRITEMASK, prev_color_mask)); + const GLboolean prev_cull = ::glIsEnabled(GL_CULL_FACE); + GLint prev_depth_func = GL_LESS; + glsafe(::glGetIntegerv(GL_DEPTH_FUNC, &prev_depth_func)); + GLboolean prev_depth_mask = GL_TRUE; + glsafe(::glGetBooleanv(GL_DEPTH_WRITEMASK, &prev_depth_mask)); + glsafe(::glBindFramebuffer(GL_FRAMEBUFFER, m_shadow_map_fbo)); + glsafe(::glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, m_shadow_map_texture_id, 0)); + glsafe(::glDrawBuffer(GL_NONE)); + glsafe(::glReadBuffer(GL_NONE)); + + if (::glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) { + glsafe(::glBindFramebuffer(GL_FRAMEBUFFER, static_cast(prev_fbo))); + m_shadow_map_valid = false; + } else { + glsafe(::glViewport(0, 0, size, size)); + glsafe(::glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE)); + glsafe(::glEnable(GL_DEPTH_TEST)); + glsafe(::glDepthMask(GL_TRUE)); + glsafe(::glDepthFunc(GL_LESS)); + glsafe(::glClear(GL_DEPTH_BUFFER_BIT)); + glsafe(::glEnable(GL_POLYGON_OFFSET_FILL)); + glsafe(::glPolygonOffset(4.0f, 4.0f)); + glsafe(::glDisable(GL_CULL_FACE)); + + shader->start_using(); + shader->set_uniform("projection_matrix", Transform3d(light_proj)); + for (GLVolume* volume : m_volumes.volumes) { + if (volume == nullptr || !volume->is_active || !volume->printable || volume->is_modifier || volume->is_wipe_tower) + continue; + const Transform3d view_model = Transform3d(light_view) * volume->world_matrix(); + shader->set_uniform("view_model_matrix", view_model); + volume->model.render(shader); + } + shader->stop_using(); + + // Restore state + glsafe(::glDisable(GL_POLYGON_OFFSET_FILL)); + glsafe(::glColorMask(prev_color_mask[0], prev_color_mask[1], prev_color_mask[2], prev_color_mask[3])); + if (prev_cull) + glsafe(::glEnable(GL_CULL_FACE)); + else + glsafe(::glDisable(GL_CULL_FACE)); + glsafe(::glDepthFunc(prev_depth_func)); + glsafe(::glDepthMask(prev_depth_mask)); + glsafe(::glBindFramebuffer(GL_FRAMEBUFFER, static_cast(prev_fbo))); + glsafe(::glViewport(prev_viewport[0], prev_viewport[1], prev_viewport[2], prev_viewport[3])); + + m_shadow_map_valid = true; + } + } else { + m_shadow_map_valid = false; + } + + // ---------------------------------------------------------------------------------- + // Unified plate shadow: draw the build-plate footprint and darken it wherever the same + // depth shadow map (built above) says the light is occluded. This replaces the old planar + // stencil projection so plate, object and self shadows all come from one technique. + // ---------------------------------------------------------------------------------- + if (!m_shadow_map_valid) return; - // Shadow projection matrix - flattens geometry onto Z=0 plane along light direction - Matrix4d shadow_proj = Matrix4d::Identity(); - shadow_proj(0, 2) = -ray_dir.x() / ray_dir.z(); - shadow_proj(1, 2) = -ray_dir.y() / ray_dir.z(); - shadow_proj(2, 0) = 0.0; - shadow_proj(2, 1) = 0.0; - shadow_proj(2, 2) = 0.0; - shadow_proj(2, 3) = 0.01; // Bias to prevent shadow acne + GLShaderProgram* plate_shader = wxGetApp().get_shader("printbed_shadow"); + if (plate_shader == nullptr) + return; - // Save OpenGL state - GLint prev_depth_func = GL_LESS; - glsafe(::glGetIntegerv(GL_DEPTH_FUNC, &prev_depth_func)); - GLboolean prev_depth_mask = GL_TRUE; - glsafe(::glGetBooleanv(GL_DEPTH_WRITEMASK, &prev_depth_mask)); - GLint prev_stencil_mask = 0xFF; - glsafe(::glGetIntegerv(GL_STENCIL_WRITEMASK, &prev_stencil_mask)); - GLboolean prev_stencil_test = GL_FALSE; - glsafe(::glGetBooleanv(GL_STENCIL_TEST, &prev_stencil_test)); - - // ============================================================ - // PASS 0: Create stencil mask for the build plate (value = 1) - // ============================================================ - glsafe(::glEnable(GL_STENCIL_TEST)); - glsafe(::glStencilMask(0xFF)); - glsafe(::glClearStencil(0)); - glsafe(::glClear(GL_STENCIL_BUFFER_BIT)); - - glsafe(::glStencilFunc(GL_ALWAYS, 1, 0xFF)); - glsafe(::glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE)); - - glsafe(::glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE)); - glsafe(::glDisable(GL_DEPTH_TEST)); - - shader->start_using(); - shader->set_uniform("projection_matrix", projection_matrix); - - // Draw the build plate (cached model to avoid per-frame uploads) if (const BuildVolume& build_volume = m_bed.build_volume(); build_volume.valid()) { const std::string mask_key = build_volume.type() == BuildVolume_Type::Rectangle ? (boost::format("rect|%1$.5f|%2$.5f|%3$.5f|%4$.5f") @@ -7977,87 +8115,49 @@ void GLCanvas3D::_render_cast_shadows_on_plate(const Transform3d& view_matrix, c } if (m_plate_shadow_mask.is_initialized()) { - shader->set_uniform("view_model_matrix", view_matrix); - m_plate_shadow_mask.render(shader); + // Blend the shadow over the already-drawn plate. Depth test keeps it behind anything + // already in front; depth writes are off, and a small negative polygon offset lifts it + // just above the bed to avoid z-fighting. + GLboolean prev_depth_mask = GL_TRUE; + glsafe(::glGetBooleanv(GL_DEPTH_WRITEMASK, &prev_depth_mask)); + GLint prev_depth_func = GL_LESS; + glsafe(::glGetIntegerv(GL_DEPTH_FUNC, &prev_depth_func)); + + glsafe(::glEnable(GL_DEPTH_TEST)); + glsafe(::glDepthMask(GL_FALSE)); + glsafe(::glDepthFunc(GL_LEQUAL)); + glsafe(::glEnable(GL_BLEND)); + glsafe(::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)); + glsafe(::glEnable(GL_POLYGON_OFFSET_FILL)); + glsafe(::glPolygonOffset(-1.0f, -1.0f)); + + glsafe(::glActiveTexture(GL_TEXTURE4)); + glsafe(::glBindTexture(GL_TEXTURE_2D, m_shadow_map_texture_id)); + glsafe(::glActiveTexture(GL_TEXTURE0)); + + plate_shader->start_using(); + plate_shader->set_uniform("view_model_matrix", view_matrix); + plate_shader->set_uniform("projection_matrix", projection_matrix); + plate_shader->set_uniform("shadow_map", 4); + plate_shader->set_uniform("shadow_light_vp", m_shadow_light_vp); + plate_shader->set_uniform("shadow_intensity", 0.35f); + plate_shader->set_uniform("shadow_map_texel", 1.0f / static_cast(m_shadow_map_size)); + m_plate_shadow_mask.render(plate_shader); + plate_shader->stop_using(); + + glsafe(::glActiveTexture(GL_TEXTURE4)); + glsafe(::glBindTexture(GL_TEXTURE_2D, 0)); + glsafe(::glActiveTexture(GL_TEXTURE0)); + + glsafe(::glDisable(GL_POLYGON_OFFSET_FILL)); + glsafe(::glDisable(GL_BLEND)); + glsafe(::glDepthFunc(prev_depth_func)); + glsafe(::glDepthMask(prev_depth_mask)); } } - - // ============================================================ - // PASS 1: Project object shadows onto plate (increment stencil to 2) - // ============================================================ - // Only render where plate exists (stencil == 1), then increment to 2 - glsafe(::glStencilFunc(GL_EQUAL, 1, 0xFF)); - glsafe(::glStencilOp(GL_KEEP, GL_KEEP, GL_INCR)); - - glsafe(::glDepthMask(GL_FALSE)); - glsafe(::glEnable(GL_DEPTH_TEST)); - glsafe(::glDepthFunc(GL_ALWAYS)); // Shadows don't need depth testing - glsafe(::glEnable(GL_POLYGON_OFFSET_FILL)); - glsafe(::glPolygonOffset(-2.0f, -2.0f)); - glsafe(::glDisable(GL_CULL_FACE)); - - // Render projected shadow geometry - for (GLVolume* volume : m_volumes.volumes) { - if (volume == nullptr || !volume->is_active || !volume->printable || volume->is_modifier || volume->is_wipe_tower) - continue; - - // CRITICAL FIX: Apply shadow projection in object's local space, then to world, then to view - // This ensures shadows are cast from the object's actual position - Matrix4d world_matrix = volume->world_matrix().matrix(); - - // Project the shadow - this flattens the geometry onto Z=0 in WORLD space - Matrix4d shadow_world_matrix = shadow_proj * world_matrix; - - // Transform to view space for rendering - Matrix4d view_shadow_matrix = view_matrix.matrix() * shadow_world_matrix; - - shader->set_uniform("view_model_matrix", view_shadow_matrix); - shader->set_uniform("projection_matrix", projection_matrix); - - volume->model.render(shader); - } - - // ============================================================ - // PASS 2: Draw shadow color where stencil == 2 - // ============================================================ - glsafe(::glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE)); - glsafe(::glStencilFunc(GL_EQUAL, 2, 0xFF)); - glsafe(::glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP)); - glsafe(::glStencilMask(0x00)); - - glsafe(::glDepthFunc(GL_ALWAYS)); - glsafe(::glEnable(GL_BLEND)); - glsafe(::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)); - - // Draw shadow fill - shader->set_uniform("view_model_matrix", Transform3d::Identity()); - shader->set_uniform("projection_matrix", Transform3d::Identity()); - - const ColorRGBA shadow_fill_color(0.0f, 0.0f, 0.0f, 0.4f); // Darker shadow for visibility - const ColorRGBA prev_bg_color = m_background.get_geometry().color; - m_background.set_color(shadow_fill_color); - shader->set_uniform("uniform_color", shadow_fill_color); - m_background.render(shader); - m_background.set_color(prev_bg_color); - shader->set_uniform("uniform_color", prev_bg_color); - - shader->stop_using(); - - // ============================================================ - // RESTORE STATE - // ============================================================ - glsafe(::glEnable(GL_DEPTH_TEST)); - glsafe(::glDepthMask(prev_depth_mask)); - glsafe(::glDepthFunc(prev_depth_func)); - glsafe(::glEnable(GL_CULL_FACE)); - glsafe(::glDisable(GL_POLYGON_OFFSET_FILL)); - glsafe(::glDisable(GL_BLEND)); - - if (!prev_stencil_test) - glsafe(::glDisable(GL_STENCIL_TEST)); - glsafe(::glStencilMask(prev_stencil_mask)); } + void GLCanvas3D::_render_plane() const { ;//TODO render assemble plane @@ -8147,6 +8247,20 @@ void GLCanvas3D::_render_objects(GLVolumeCollection::ERenderType type, bool with const bool phong_ssao = wxGetApp().app_config != nullptr && wxGetApp().app_config->get_bool(SETTING_OPENGL_PHONG_SSAO); shader->set_uniform("enable_ssao", phong_ssao); + // Object-on-object and self shadows: sample the depth map built in _render_shadow_map_pass(). + // shadow_intensity == 0 disables the effect entirely (unchanged behavior when off / unsupported). + if (m_shadow_map_valid && m_shadow_map_texture_id != 0) { + glsafe(::glActiveTexture(GL_TEXTURE4)); + glsafe(::glBindTexture(GL_TEXTURE_2D, m_shadow_map_texture_id)); + glsafe(::glActiveTexture(GL_TEXTURE0)); + shader->set_uniform("shadow_map", 4); + shader->set_uniform("shadow_light_vp", m_shadow_light_vp); + shader->set_uniform("shadow_map_texel", 1.0f / static_cast(m_shadow_map_size)); + shader->set_uniform("shadow_intensity", 0.35f); + } + else + shader->set_uniform("shadow_intensity", 0.0f); + const Size& cvn_size = get_canvas_size(); { const Camera& camera = wxGetApp().plater()->get_camera(); @@ -8238,6 +8352,12 @@ void GLCanvas3D::_render_objects(GLVolumeCollection::ERenderType type, bool with shader->set_uniform("show_wireframe", false); }*/ + if (m_shadow_map_valid && m_shadow_map_texture_id != 0) { + glsafe(::glActiveTexture(GL_TEXTURE4)); + glsafe(::glBindTexture(GL_TEXTURE_2D, 0)); + glsafe(::glActiveTexture(GL_TEXTURE0)); + } + shader->stop_using(); } @@ -9329,7 +9449,7 @@ void GLCanvas3D::_render_canvas_toolbar() ); create_menu_item( _utf8(L("Realistic View")), - true, + m_canvas_type != ECanvasType::CanvasPreview, // not work on preview cfg->get_bool(SETTING_OPENGL_REALISTIC_MODE), [this, &cfg]{ cfg->set_bool(SETTING_OPENGL_REALISTIC_MODE, !cfg->get_bool(SETTING_OPENGL_REALISTIC_MODE)); diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp index a3209dcc1c..4c2402c546 100644 --- a/src/slic3r/GUI/GLCanvas3D.hpp +++ b/src/slic3r/GUI/GLCanvas3D.hpp @@ -732,6 +732,12 @@ public: std::array m_ssao_texture_size{ { 0, 0 } }; GLModel m_plate_shadow_mask; std::string m_plate_shadow_mask_key; + // Depth-based shadow map used to cast object shadows onto other objects and themselves. + unsigned int m_shadow_map_fbo{ 0 }; + unsigned int m_shadow_map_texture_id{ 0 }; + unsigned int m_shadow_map_size{ 0 }; + Transform3d m_shadow_light_vp{ Transform3d::Identity() }; + bool m_shadow_map_valid{ false }; public: explicit GLCanvas3D(wxGLCanvas* canvas, Bed3D &bed); ~GLCanvas3D(); @@ -1251,7 +1257,9 @@ private: void _render_ssao_pass(unsigned int width, unsigned int height); void _render_background(); void _render_bed(const Transform3d& view_matrix, const Transform3d& projection_matrix, bool bottom, bool show_axes); - void _render_cast_shadows_on_plate(const Transform3d& view_matrix, const Transform3d& projection_matrix); + // Build the light-space depth shadow map (consumed by gouraud/phong for object & self shadows) + // and cast it onto the build plate. Realistic view only. + void _render_shadows(const Transform3d& view_matrix, const Transform3d& projection_matrix); //BBS: add part plate related logic void _render_platelist(const Transform3d& view_matrix, const Transform3d& projection_matrix, bool bottom, bool only_current, bool only_body = false, int hover_id = -1, bool render_cali = false, bool show_grid = true); //BBS: add outline drawing logic diff --git a/src/slic3r/GUI/GLModel.cpp b/src/slic3r/GUI/GLModel.cpp index f7fab43817..3dd15c3fdd 100644 --- a/src/slic3r/GUI/GLModel.cpp +++ b/src/slic3r/GUI/GLModel.cpp @@ -457,10 +457,9 @@ void GLModel::init_from(const indexed_triangle_set& its) data.reserve_indices(3 * its.indices.size()); // Read user preference: smooth normals enabled - const bool realistic_mode = wxGetApp().app_config != nullptr && wxGetApp().app_config->get_bool(SETTING_OPENGL_REALISTIC_MODE); const bool smooth_normals_enabled = wxGetApp().app_config != nullptr && wxGetApp().app_config->get_bool(SETTING_OPENGL_PHONG_SMOOTH_NORMALS); - if (realistic_mode && smooth_normals_enabled) { + if (smooth_normals_enabled) { // Use per-corner smooth normals (via IGL) using MapMatrixXfUnaligned = Eigen::Map>; using MapMatrixXiUnaligned = Eigen::Map>; diff --git a/src/slic3r/GUI/GLShadersManager.cpp b/src/slic3r/GUI/GLShadersManager.cpp index d368aaecd2..2b8a0edf0a 100644 --- a/src/slic3r/GUI/GLShadersManager.cpp +++ b/src/slic3r/GUI/GLShadersManager.cpp @@ -68,6 +68,10 @@ std::pair GLShadersManager::init() valid &= append_shader("thumbnail", { prefix + "thumbnail.vs", prefix + "thumbnail.fs"}); // used to render printbed valid &= append_shader("printbed", { prefix + "printbed.vs", prefix + "printbed.fs" }); +#if !SLIC3R_OPENGL_ES + // used to cast the object shadow map onto the build plate (realistic view) + valid &= append_shader("printbed_shadow", { prefix + "printbed_shadow.vs", prefix + "printbed_shadow.fs" }); +#endif // !SLIC3R_OPENGL_ES valid &= append_shader("hotbed", {prefix + "hotbed.vs", prefix + "hotbed.fs"}); // used to render options in gcode preview if (GUI::wxGetApp().is_gl_version_greater_or_equal_to(3, 3)) { diff --git a/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp b/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp index b7c963cc63..3d51c77c00 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp @@ -1951,7 +1951,7 @@ void GLGizmoEmboss::draw_model_type() float minimum_spacing_x = 8.0f; float minimum_offset_x = ImGui::GetCursorPosX() + minimum_spacing_x; float offset_x = std::max(m_gui_cfg->input_offset, minimum_offset_x); - ImGui::SameLine(offset_x); + ImGui::SameLine(); ImGuiWrapper::push_radio_style(m_parent.get_scale()); // ORCA if (ImGui::RadioButton(_u8L("Join").c_str(), type == part)) diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSVG.cpp b/src/slic3r/GUI/Gizmos/GLGizmoSVG.cpp index c43a02da9f..1da865105f 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSVG.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSVG.cpp @@ -1989,7 +1989,7 @@ void GLGizmoSVG::draw_mirroring() void GLGizmoSVG::draw_model_type() { - ImGui::AlignTextToFramePadding(); + //ImGui::AlignTextToFramePadding(); bool is_last_solid_part = m_volume->is_the_only_one_part(); std::string title = _u8L("Operation"); if (is_last_solid_part) { @@ -2005,6 +2005,8 @@ void GLGizmoSVG::draw_model_type() ModelVolumeType part = ModelVolumeType::MODEL_PART; ModelVolumeType type = m_volume->type(); + ImGui::SameLine(); + //TRN EmbossOperation ImGuiWrapper::push_radio_style(m_parent.get_scale()); //ORCA if (ImGui::RadioButton(_u8L("Join").c_str(), type == part)) diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index c2753f0bb1..d850f2a925 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -2809,21 +2809,6 @@ void MainFrame::init_menubar_as_editor() append_submenu(fileMenu, export_menu, wxID_ANY, _L("Export"), ""); fileMenu->AppendSeparator(); - append_menu_item(fileMenu, wxID_ANY, _L("Sync Presets"), _L("Pull and apply the latest presets from OrcaCloud"), - [this](wxCommandEvent&) { - if (!wxGetApp().is_user_login()) { - MessageDialog info_dlg(this, _L("You must be logged in to sync presets from cloud."), - _L("Sync Presets"), wxOK | wxICON_INFORMATION); - info_dlg.ShowModal(); - return; - } - wxGetApp().restart_sync_user_preset(); - }, "", nullptr, - [this]() { - return wxGetApp().is_user_login() && !wxGetApp().app_config->get_stealth_mode(); - }, this); - - fileMenu->AppendSeparator(); #ifndef __APPLE__ append_menu_item(fileMenu, wxID_EXIT, _L("Quit"), wxString::Format(_L("Quit")), @@ -3289,6 +3274,8 @@ void MainFrame::init_menubar_as_editor() }, "", nullptr, []() { return true; }, this); + m_topbar->GetTopMenu()->AppendSeparator(); + append_menu_item( m_topbar->GetTopMenu(), wxID_ANY, _L("Preset Bundle") + "\t", "", [this](wxCommandEvent &) { @@ -3316,6 +3303,8 @@ void MainFrame::init_menubar_as_editor() return wxGetApp().is_user_login() && !wxGetApp().app_config->get_stealth_mode(); }, this); + m_topbar->GetTopMenu()->AppendSeparator(); + //m_topbar->AddDropDownMenuItem(preference_item); //m_topbar->AddDropDownMenuItem(printer_item); //m_topbar->AddDropDownMenuItem(language_item); @@ -3425,6 +3414,25 @@ void MainFrame::init_menubar_as_editor() plater()->get_current_canvas3D()->force_set_focus(); }, "", nullptr, []() { return true; }, this); + + append_menu_item( + fileMenu, wxID_ANY, _L("Sync Presets"), _L("Pull and apply the latest presets from OrcaCloud"), + [this](wxCommandEvent&) { + if (!wxGetApp().is_user_login()) { + MessageDialog info_dlg(this, _L("You must be logged in to sync presets from cloud."), + _L("Sync Presets"), wxOK | wxICON_INFORMATION); + info_dlg.ShowModal(); + return; + } + if (m_plater) + m_plater->get_notification_manager()->push_notification( + into_u8(_L("Syncing presets from cloud\u2026"))); + wxGetApp().restart_sync_user_preset(); + }, "", nullptr, + [this]() { + return wxGetApp().is_user_login() && !wxGetApp().app_config->get_stealth_mode(); + }, this); + m_menubar->Append(fileMenu, wxString::Format("&%s", _L("File"))); if (editMenu) m_menubar->Append(editMenu, wxString::Format("&%s", _L("Edit"))); diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 30a7a514b7..806812131e 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -658,6 +658,7 @@ struct Sidebar::priv //wxComboBox * m_comboBox_print_preset; wxStaticLine * m_staticline1; StaticBox* m_panel_filament_title; + wxPanel* m_panel_filament_separator; wxStaticText* m_staticText_filament_settings; wxStaticText* m_staticText_filament_count; ScalableButton * m_bpButton_add_filament; @@ -678,6 +679,7 @@ struct Sidebar::priv // BBS printer config StaticBox* m_panel_printer_title = nullptr; + wxPanel* m_panel_printer_separator = nullptr; ScalableButton* m_printer_icon = nullptr; ScalableButton* m_printer_connect = nullptr; ScalableButton* m_printer_bbl_sync = nullptr; @@ -2404,10 +2406,6 @@ Sidebar::Sidebar(Plater *parent) p->m_panel_printer_title->Layout(); // 1.2 Add spliters around title bar - // add spliter 1 - //auto spliter_1 = new ::StaticLine(p->scrolled); - //spliter_1->SetBackgroundColour("#A6A9AA"); - //scrolled_sizer->Add(spliter_1, 0, wxEXPAND); // add printer title scrolled_sizer->Add(p->m_panel_printer_title, 0, wxEXPAND | wxALL, 0); @@ -2419,14 +2417,13 @@ Sidebar::Sidebar(Plater *parent) wxString title = _L("Printer") + wxString(!isShown ? "" : (" | " + p->combo_printer->GetValue())); p->m_text_printer_settings->SetLabel(title); p->m_panel_printer_content->Show(!isShown); + p->m_panel_printer_separator->Show(isShown); m_scrolled_sizer->Layout(); }); - - // add spliter 2 - auto spliter_2 = new ::StaticLine(p->scrolled); - spliter_2->SetLineColour("#CECECE"); - scrolled_sizer->Add(spliter_2, 0, wxEXPAND); - + // ORCA add bottom border for seperation wile sections folded + p->m_panel_printer_separator = new wxPanel(p->scrolled, wxID_ANY, wxDefaultPosition, wxSize(-1, FromDIP(2))); // ORCA staticline class not works without string + p->m_panel_printer_separator->SetBackgroundColour("#FFFFFF"); + scrolled_sizer->Add(p->m_panel_printer_separator, 0, wxEXPAND); /*************************** 2. add printer content ************************/ @@ -2606,9 +2603,9 @@ Sidebar::Sidebar(Plater *parent) } wxGridSizer *nozzle_dia_sizer = new wxGridSizer(3, 1, FromDIP(2), 0); - nozzle_dia_sizer->Add(p->label_nozzle_title, 0, wxALIGN_CENTER | wxTOP, FromDIP(4)); - nozzle_dia_sizer->Add(p->combo_nozzle_dia , 0, wxALIGN_CENTER | wxTOP | wxBOTTOM, FromDIP(2)); - nozzle_dia_sizer->Add(p->label_nozzle_type , 0, wxALIGN_CENTER); + nozzle_dia_sizer->Add(p->label_nozzle_title, 1, wxALIGN_CENTER | wxTOP , FromDIP(2)); + nozzle_dia_sizer->Add(p->combo_nozzle_dia , 0, wxALIGN_CENTER); + nozzle_dia_sizer->Add(p->label_nozzle_type , 1, wxALIGN_CENTER | wxBOTTOM, FromDIP(1)); p->panel_nozzle_dia->SetSizer(nozzle_dia_sizer); @@ -2802,7 +2799,9 @@ Sidebar::Sidebar(Plater *parent) else if (ams_btn->IsShown()) exclude_pt = ams_btn->GetPosition().x; if (e.GetPosition().x > exclude_pt) return; - p->m_panel_filament_content->Show(!p->m_panel_filament_content->IsShown()); + bool isShown = p->m_panel_filament_content->IsShown(); + p->m_panel_filament_content->Show(!isShown); + p->m_panel_filament_separator->Show(isShown); m_scrolled_sizer->Layout(); CallAfter([this]{update_filaments_counter(true);}); // call after all UI processing done @@ -2822,13 +2821,11 @@ Sidebar::Sidebar(Plater *parent) p->m_panel_filament_title->SetSizer( bSizer39 ); p->m_panel_filament_title->Layout(); - auto spliter_1 = new ::StaticLine(p->scrolled); - spliter_1->SetLineColour("#A6A9AA"); - scrolled_sizer->Add(spliter_1, 0, wxEXPAND); scrolled_sizer->Add(p->m_panel_filament_title, 0, wxEXPAND | wxALL, 0); - auto spliter_2 = new ::StaticLine(p->scrolled); - spliter_2->SetLineColour("#CECECE"); - scrolled_sizer->Add(spliter_2, 0, wxEXPAND); + // ORCA add bottom border for seperation wile sections folded + p->m_panel_filament_separator = new wxPanel(p->scrolled, wxID_ANY, wxDefaultPosition, wxSize(-1, FromDIP(2))); // ORCA staticline class not works without string + p->m_panel_filament_separator->SetBackgroundColour("#FFFFFF"); + scrolled_sizer->Add(p->m_panel_filament_separator, 0, wxEXPAND); bSizer39->AddStretchSpacer(1); diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index af7522c33d..e1501e9c4d 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -797,7 +797,7 @@ wxBoxSizer *PreferencesDialog::create_item_decimal_input(wxString title, wxStrin input->SetToolTip(tooltip); input->GetTextCtrl()->SetValidator(validator); - m_sizer->Add(input, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(5)); + m_sizer->Add(input, 0, wxALIGN_CENTER_VERTICAL); auto apply_value = [this, param, input, min, max, decimals]() { auto value = input->GetTextCtrl()->GetValue(); @@ -1797,6 +1797,17 @@ void PreferencesDialog::create_items() g_sizer = f_sizers.back(); g_sizer->AddGrowableCol(0, 1); + //// GRAPHICS > General + g_sizer->Add(create_item_title(_L("General")), 1, wxEXPAND); + + auto smooth_normals = create_item_checkbox( + _L("Smooth normals"), + _L("Applies smooth normals to the model.\n\nRequires manual scene reload to take effect " + "(right-click on 3D view → \"Reload All\")."), + SETTING_OPENGL_PHONG_SMOOTH_NORMALS + ); + g_sizer->Add(smooth_normals); + //// GRAPHICS > Realistic view g_sizer->Add(create_item_title(_L("Realistic View")), 1, wxEXPAND); @@ -1816,20 +1827,11 @@ void PreferencesDialog::create_items() auto item_realistic_shadows = create_item_checkbox( _L("Shadows"), - _L("Renders cast shadows on the plate in realistic view."), + _L("Renders cast shadows on the plate, other objects, and each object onto itself in realistic view."), SETTING_OPENGL_PHONG_BASIC_PLATE_SHADOWS ); g_sizer->Add(item_realistic_shadows); - - auto item_realistic_smooth_normals = create_item_checkbox( - _L("Smooth normals"), - _L("Applies smooth normals to the realistic view.\n\nRequires manual scene reload to take effect " - "(right-click on 3D view → \"Reload All\")."), - SETTING_OPENGL_PHONG_SMOOTH_NORMALS - ); - g_sizer->Add(item_realistic_smooth_normals); - //// GRAPHICS > Anti-aliasing g_sizer->Add(create_item_title(_L("Anti-aliasing")), 1, wxEXPAND); diff --git a/src/slic3r/GUI/PresetComboBoxes.cpp b/src/slic3r/GUI/PresetComboBoxes.cpp index e24604fd68..160d23f6cb 100644 --- a/src/slic3r/GUI/PresetComboBoxes.cpp +++ b/src/slic3r/GUI/PresetComboBoxes.cpp @@ -1628,6 +1628,7 @@ TabPresetComboBox::TabPresetComboBox(wxWindow* parent, Preset::Type preset_type) // BBS: new layout PresetComboBox(parent, preset_type, wxSize(20 * wxGetApp().em_unit(), 30 * wxGetApp().em_unit() / 10)) { + GetDropDown().SetUseContentWidth(true,true); } void TabPresetComboBox::OnSelect(wxCommandEvent &evt) diff --git a/src/slic3r/GUI/StepMeshDialog.cpp b/src/slic3r/GUI/StepMeshDialog.cpp index 33e1c4914a..cd0f4bd423 100644 --- a/src/slic3r/GUI/StepMeshDialog.cpp +++ b/src/slic3r/GUI/StepMeshDialog.cpp @@ -30,7 +30,7 @@ static int _ITEM_WIDTH() { return _scale(30); } #define SLIDER_SCALE_10(val) ((val) / 0.01) #define SLIDER_UNSCALE_10(val) ((val) * 0.01) #define LEFT_RIGHT_PADING FromDIP(20) -#define FONT_COLOR wxColour("#262E30") +#define FONT_COLOR wxColour("#363636") // label color wxDEFINE_EVENT(wxEVT_THREAD_DONE, wxCommandEvent); diff --git a/src/slic3r/GUI/SyncAmsInfoDialog.cpp b/src/slic3r/GUI/SyncAmsInfoDialog.cpp index 5ffb321a62..704fa9ec2a 100644 --- a/src/slic3r/GUI/SyncAmsInfoDialog.cpp +++ b/src/slic3r/GUI/SyncAmsInfoDialog.cpp @@ -19,6 +19,7 @@ #include "Widgets/Label.hpp" #include "Widgets/Button.hpp" #include "Widgets/CheckBox.hpp" +#include "Widgets/DialogButtons.hpp" #include "CapsuleButton.hpp" #include "PrePrintChecker.hpp" @@ -37,7 +38,7 @@ using namespace Slic3r::GUI; #define SyncAmsInfoDialogWidth FromDIP(675) #define SyncAmsInfoDialogHeightMIN FromDIP(620) #define SyncAmsInfoDialogHeightMIDDLE FromDIP(630) -#define SyncAmsInfoDialogHeightMAX FromDIP(660) +#define SyncAmsInfoDialogHeightMAX FromDIP(700) #define SyncLabelWidth FromDIP(640) #define SyncAttentionTipWidth FromDIP(550) namespace Slic3r { namespace GUI { @@ -282,14 +283,14 @@ wxBoxSizer *SyncAmsInfoDialog::create_sizer_thumbnail(wxButton *image_button, bo if (left) { wxBoxSizer *text_sizer = new wxBoxSizer(wxHORIZONTAL); auto sync_text = new Label(image_button->GetParent(), _CTX(L_CONTEXT("Original", "Sync_AMS"), "Sync_AMS")); - sync_text->SetForegroundColour(wxColour(107, 107, 107, 100)); + sync_text->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#363636"))); // ORCA match label colors text_sizer->Add(sync_text, 0, wxALIGN_CENTER | wxALL, 0); sizer_thumbnail->Add(sync_text, FromDIP(0), wxALIGN_CENTER | wxALL, FromDIP(4)); } else { wxBoxSizer *text_sizer = new wxBoxSizer(wxHORIZONTAL); m_after_map_text = new Label(image_button->GetParent(), _L("After mapping")); - m_after_map_text->SetForegroundColour(wxColour(107, 107, 107, 100)); + m_after_map_text->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#363636"))); // ORCA match label colors text_sizer->Add(m_after_map_text, 0, wxALIGN_CENTER | wxALL, 0); sizer_thumbnail->Add(m_after_map_text, FromDIP(0), wxALIGN_CENTER | wxALL, FromDIP(4)); } @@ -655,10 +656,6 @@ SyncAmsInfoDialog::SyncAmsInfoDialog(wxWindow *parent, SyncInfo &info) : // font SetFont(wxGetApp().normal_font()); - // 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)); - Freeze(); SetBackgroundColour(m_colour_def_color); @@ -733,7 +730,7 @@ SyncAmsInfoDialog::SyncAmsInfoDialog(wxWindow *parent, SyncInfo &info) : m_colormap_btn->Bind(wxEVT_BUTTON, &SyncAmsInfoDialog::update_when_change_map_mode,this); // update_when_change_map_mode(e.GetSelection()); m_override_btn->Bind(wxEVT_BUTTON, &SyncAmsInfoDialog::update_when_change_map_mode,this); - bSizer->Add(m_mode_combox_sizer, FromDIP(0), wxEXPAND | wxTOP, FromDIP(10)); + bSizer->Add(m_mode_combox_sizer, FromDIP(0), wxEXPAND | wxTOP | wxBOTTOM, FromDIP(10)); } m_basic_panel = new wxPanel(m_scrolledWindow, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); @@ -847,8 +844,8 @@ SyncAmsInfoDialog::SyncAmsInfoDialog(wxWindow *parent, SyncInfo &info) : sizer_advanced_options_title = new wxBoxSizer(wxHORIZONTAL); auto advanced_options_title = new Label(m_scrolledWindow, _L("Advanced Options")); - advanced_options_title->SetFont(::Label::Body_13); - advanced_options_title->SetForegroundColour(wxColour(38, 46, 48)); + advanced_options_title->SetFont(::Label::Head_14); // ORCA + advanced_options_title->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#363636"))); // ORCA match label colors sizer_advanced_options_title->Add(0, 0, 1, wxEXPAND, 0); sizer_advanced_options_title->Add(advanced_options_title, 0, wxALIGN_CENTER, 0); @@ -914,13 +911,15 @@ SyncAmsInfoDialog::SyncAmsInfoDialog(wxWindow *parent, SyncInfo &info) : {//new content//tip confirm ok button wxBoxSizer *tip_sizer = new wxBoxSizer(wxHORIZONTAL); m_attention_text = new wxStaticText(m_scrolledWindow, wxID_ANY, _L("Tip") + ": "); + m_attention_text->SetFont(::Label::Head_14); + m_attention_text->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#009688"))); // ORCA match label colors tip_sizer->Add(m_attention_text, 0, wxALIGN_LEFT | wxTOP, FromDIP(2)); m_tip_attention_color_map = _L("Only synchronize filament type and color, not including AMS slot information."); m_tip_attention_override = _L("Replace the project filaments list sequentially based on printer filaments. And unused printer filaments will be automatically added to the end of the list."); m_tip_text = new Label(m_scrolledWindow, m_tip_attention_color_map, LB_AUTO_WRAP); m_tip_text->SetMinSize(wxSize(SyncAttentionTipWidth, -1)); m_tip_text->SetMaxSize(wxSize(SyncAttentionTipWidth, -1)); - m_tip_text->SetForegroundColour(wxColour(107, 107, 107, 100)); + m_tip_text->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#363636"))); // ORCA match label colors tip_sizer->Add(m_tip_text, 0, wxALIGN_LEFT | wxTOP, FromDIP(2)); tip_sizer->AddSpacer(FromDIP(20)); bSizer->Add(tip_sizer, 0, wxEXPAND | wxLEFT, FromDIP(25)); @@ -931,7 +930,8 @@ SyncAmsInfoDialog::SyncAmsInfoDialog(wxWindow *parent, SyncInfo &info) : m_advace_setting_sizer = new wxBoxSizer(wxHORIZONTAL); m_more_setting_tips = new wxStaticText(m_scrolledWindow, wxID_ANY, _L("Advanced settings")); - m_more_setting_tips->SetForegroundColour(wxColour(0, 137, 123)); + m_more_setting_tips->SetFont(::Label::Head_14); // ORCA + m_more_setting_tips->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#363636"))); // ORCA match label colors m_more_setting_tips->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &e) { m_expand_more_settings = !m_expand_more_settings; update_more_setting(true,true); @@ -959,6 +959,7 @@ SyncAmsInfoDialog::SyncAmsInfoDialog(wxWindow *parent, SyncInfo &info) : m_append_color_sizer->Add(m_append_color_checkbox, 0, wxALIGN_LEFT | wxTOP, FromDIP(4)); const int gap_between_checebox_and_text = 2; m_append_color_text = new Label(m_scrolledWindow, _L("Add unused AMS filaments to filaments list.")); + m_append_color_text->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#363636"))); // ORCA match label colors m_append_color_text->Hide(); m_append_color_sizer->AddSpacer(FromDIP(gap_between_checebox_and_text)); m_append_color_sizer->Add(m_append_color_text, 0, wxALIGN_LEFT | wxTOP, FromDIP(4)); @@ -981,6 +982,7 @@ SyncAmsInfoDialog::SyncAmsInfoDialog(wxWindow *parent, SyncInfo &info) : m_merge_color_text = new Label(m_scrolledWindow, _L("Automatically merge the same colors in the model after mapping.")); + m_merge_color_text->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#363636"))); // ORCA match label colors m_merge_color_text->Hide(); m_merge_color_sizer->AddSpacer(FromDIP(gap_between_checebox_and_text)); m_merge_color_sizer->Add(m_merge_color_text, 0, wxALIGN_LEFT | wxTOP, FromDIP(2)); @@ -994,17 +996,19 @@ SyncAmsInfoDialog::SyncAmsInfoDialog(wxWindow *parent, SyncInfo &info) : m_override_undone_str = _L("After being synced, this action cannot be undone."); m_undone_str = _L("After being synced, the project's filament presets and colors will be replaced with the mapped filament types and colors. This action cannot be undone."); m_confirm_title = new Label(m_scrolledWindow, m_undone_str, LB_AUTO_WRAP); + m_confirm_title->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#363636"))); // ORCA match label colors m_confirm_title->SetMinSize(wxSize(SyncLabelWidth, -1)); m_confirm_title->SetMaxSize(wxSize(SyncLabelWidth, -1)); - confirm_boxsizer->Add(m_confirm_title, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxTOP | wxRIGHT, FromDIP(10)); + confirm_boxsizer->Add(m_confirm_title, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxTOP | wxRIGHT | wxBOTTOM, FromDIP(10)); m_are_you_sure_title = new wxStaticText(m_scrolledWindow, wxID_ANY, _L("Are you sure to synchronize the filaments?")); + m_are_you_sure_title->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#363636"))); // ORCA match label colors //m_are_you_sure_title->SetFont(Label::Head_14); confirm_boxsizer->Add(m_are_you_sure_title, 0, wxALIGN_LEFT | wxTOP, FromDIP(0)); bSizer->Add(confirm_boxsizer, 0, wxALIGN_LEFT | wxLEFT , FromDIP(25)); wxBoxSizer *warning_sizer = new wxBoxSizer(wxHORIZONTAL); m_warning_text = new wxStaticText(m_scrolledWindow, wxID_ANY, _L("Error") + ":"); - m_warning_text->SetForegroundColour(wxColour(107, 107, 107, 100)); + m_warning_text->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#363636"))); // ORCA match label colors m_warning_text->Hide(); warning_sizer->Add(m_warning_text, 0, wxALIGN_CENTER | wxTOP, FromDIP(2)); bSizer->Add(warning_sizer, 0, wxEXPAND | wxLEFT, FromDIP(25)); @@ -1012,46 +1016,22 @@ SyncAmsInfoDialog::SyncAmsInfoDialog(wxWindow *parent, SyncInfo &info) : m_scrolledWindow->SetSizerAndFit(m_sizer_main); m_sizer_show_page->Add(m_scrolledWindow, 1, wxEXPAND, 0); - wxBoxSizer *bSizer_button = new wxBoxSizer(wxHORIZONTAL); - bSizer_button->SetMinSize(wxSize(FromDIP(100), -1)); - /* m_checkbox = new wxCheckBox(this, wxID_ANY, _L("Don't show again"), wxDefaultPosition, wxDefaultSize, 0); - bSizer_button->Add(m_checkbox, 0, wxALIGN_LEFT);*/ - bSizer_button->AddStretchSpacer(1); - StateColor btn_bg_green(std::pair(wxColour(0, 137, 123), StateColor::Pressed), std::pair(wxColour(38, 166, 154), StateColor::Hovered), - std::pair(AMS_CONTROL_BRAND_COLOUR, StateColor::Normal)); - m_button_ok = new Button(m_show_page, _L("Synchronize now")); - m_button_ok->SetBackgroundColor(btn_bg_green); - m_button_ok->SetBorderColor(*wxWHITE); - m_button_ok->SetTextColor(wxColour("#FFFFFE")); - m_button_ok->SetFont(Label::Body_12); - m_button_ok->SetSize(OK_BUTTON_SIZE); - m_button_ok->SetMinSize(OK_BUTTON_SIZE); - m_button_ok->SetCornerRadius(FromDIP(12)); - bSizer_button->Add(m_button_ok, 0, wxALIGN_RIGHT | wxLEFT | wxTOP, FromDIP(10)); - + auto* dlg_btns = new DialogButtons(m_show_page, {"OK", "Cancel"}); + m_button_ok = dlg_btns->GetOK(); + m_button_ok->SetLabel(_L("Synchronize now")); m_button_ok->Bind(wxEVT_COMMAND_BUTTON_CLICKED, [this](wxCommandEvent &e) { deal_ok(); EndModal(wxID_YES); SetFocusIgnoringChildren(); }); - StateColor btn_bg_white(std::pair(wxColour(206, 206, 206), StateColor::Pressed), std::pair(wxColour(238, 238, 238), StateColor::Hovered), - std::pair(*wxWHITE, StateColor::Normal)); - - m_button_cancel = new Button(m_show_page, m_input_info.cancel_text_to_later ? _L("Later") : _L("Cancel")); - m_button_cancel->SetBackgroundColor(btn_bg_white); - m_button_cancel->SetBorderColor(wxColour(38, 46, 48)); - m_button_cancel->SetFont(Label::Body_12); - m_button_cancel->SetSize(CANCEL_BUTTON_SIZE); - m_button_cancel->SetMinSize(CANCEL_BUTTON_SIZE); - m_button_cancel->SetCornerRadius(FromDIP(12)); - bSizer_button->Add(m_button_cancel, 0, wxALIGN_RIGHT | wxLEFT | wxTOP, FromDIP(10)); - + m_button_cancel = dlg_btns->GetCANCEL(); + m_button_cancel->SetLabel(m_input_info.cancel_text_to_later ? _L("Later") : _L("Cancel")); m_button_cancel->Bind(wxEVT_COMMAND_BUTTON_CLICKED, [this](wxCommandEvent &e) { EndModal(wxID_CANCEL); }); - m_sizer_show_page->Add(bSizer_button, 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(20)); + m_sizer_show_page->Add(dlg_btns, 0, wxEXPAND); m_show_page->SetSizer(m_sizer_show_page); } show_print_failed_info(false); @@ -2484,10 +2464,10 @@ void SyncAmsInfoDialog::on_dpi_changed(const wxRect &suggested_rect) } m_swipe_left_button->msw_rescale(); m_swipe_right_button->msw_rescale(); - m_button_ok->SetMinSize(OK_BUTTON_SIZE); - m_button_ok->SetCornerRadius(FromDIP(12)); - m_button_cancel->SetMinSize(CANCEL_BUTTON_SIZE); - m_button_cancel->SetCornerRadius(FromDIP(12)); + //m_button_ok->SetMinSize(OK_BUTTON_SIZE); // ORCA DialogButtons automatically manages style and size + //m_button_ok->SetCornerRadius(FromDIP(12)); + //m_button_cancel->SetMinSize(CANCEL_BUTTON_SIZE); + //m_button_cancel->SetCornerRadius(FromDIP(12)); m_merge_color_checkbox->Rescale(); m_append_color_checkbox->Rescale(); m_combobox_plate->Rescale(); @@ -2632,14 +2612,14 @@ void SyncAmsInfoDialog::reset_and_sync_ams_list() is_first_row = false; if (!m_original_in_colormap) { m_original_in_colormap = new wxStaticText(m_filament_panel, wxID_ANY, _CTX(L_CONTEXT("Original", "Sync_AMS"), "Sync_AMS") + ":"); - m_original_in_colormap->SetForegroundColour(wxColour(107, 107, 107, 100)); + m_original_in_colormap->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#363636"))); // ORCA match label colors m_original_in_colormap->SetFont(::Label::Head_12); } ams_tip_sizer->Add(m_original_in_colormap, 0, wxALIGN_LEFT | wxTOP, FromDIP(6)); if (!m_ams_or_ext_text_in_colormap) { m_ams_or_ext_text_in_colormap = new wxStaticText(m_filament_panel, wxID_ANY, _L("AMS") + ":"); - m_ams_or_ext_text_in_colormap->SetForegroundColour(wxColour(107, 107, 107, 100)); + m_ams_or_ext_text_in_colormap->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#363636"))); // ORCA match label colors m_ams_or_ext_text_in_colormap->SetFont(::Label::Head_12); } ams_tip_sizer->Add(m_ams_or_ext_text_in_colormap, 0, wxALIGN_LEFT | wxTOP, FromDIP(9)); @@ -2844,7 +2824,7 @@ void SyncAmsInfoDialog::generate_override_fix_ams_list() is_first_row = false; if (!m_original_in_override) { m_original_in_override = new wxStaticText(m_fix_filament_panel, wxID_ANY, _CTX(L_CONTEXT("Original", "Sync_AMS"), "Sync_AMS") + ":"); - m_original_in_override->SetForegroundColour(wxColour(107, 107, 107, 100)); + m_original_in_override->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#363636"))); // ORCA match label colors m_original_in_override->SetFont(::Label::Head_12); } ams_tip_sizer->Add(m_original_in_override, 0, wxALIGN_LEFT | wxTOP, FromDIP(6)); @@ -2852,7 +2832,7 @@ void SyncAmsInfoDialog::generate_override_fix_ams_list() if (!m_ams_or_ext_text_in_override) { auto text = (m_only_exist_ext_spool_flag ? _L("Ext spool") : _L("AMS")) + ":"; m_ams_or_ext_text_in_override = new wxStaticText(m_fix_filament_panel, wxID_ANY, text); - m_ams_or_ext_text_in_override->SetForegroundColour(wxColour(107, 107, 107, 100)); + m_ams_or_ext_text_in_override->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#363636"))); // ORCA match label colors m_ams_or_ext_text_in_override->SetFont(::Label::Head_12); } ams_tip_sizer->Add(m_ams_or_ext_text_in_override, 0, wxALIGN_LEFT | wxTOP, FromDIP(9)); @@ -3240,10 +3220,12 @@ SyncNozzleAndAmsDialog::SyncNozzleAndAmsDialog(InputInfo &input_info) wxGetApp().preset_bundle->get_printer_extruder_count() == 1 ? 370 :320, input_info.dialog_pos, 90, + ( wxGetApp().preset_bundle->get_printer_extruder_count() == 1 ? _L("Successfully synchronized nozzle information.") : - _L("Successfully synchronized nozzle and AMS number information."), - _L("Continue to sync filaments"), - _CTX(L_CONTEXT("Cancel", "Sync_Nozzle_AMS"), "Sync_Nozzle_AMS"), + _L("Successfully synchronized nozzle and AMS number information.") + ) + "\n\n" + _L("Do you want to continue to sync filaments?"), + _L("Yes"), // ORCA use shorter text for buttons + _CTX(L_CONTEXT(_L("No"), "Sync_Nozzle_AMS"), "Sync_Nozzle_AMS"), DisappearanceMode::TimedDisappearance) , m_input_info(input_info) { diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 496bcbd30f..6bc6ce1ae4 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -2678,7 +2678,7 @@ void TabPrint::build() optgroup->append_single_option_line("ironing_angle", "quality_settings_ironing#angle-offset"); optgroup->append_single_option_line("ironing_angle_fixed", "quality_settings_ironing#fixed-angle"); - optgroup = page->new_optgroup(L("Z contouring"), L"param_advanced"); + optgroup = page->new_optgroup(L("Z contouring"), L"param_z_contouring"); optgroup->append_single_option_line("zaa_enabled", "quality_settings_z_contouring"); optgroup->append_single_option_line("zaa_minimize_perimeter_height", "quality_settings_z_contouring#minimize-wall-height-angle"); optgroup->append_single_option_line("zaa_min_z", "quality_settings_z_contouring#minimum-z-height"); @@ -2762,7 +2762,7 @@ void TabPrint::build() optgroup->append_single_option_line("top_shell_thickness", "strength_settings_top_bottom_shells#shell-thickness"); optgroup->append_single_option_line("top_surface_density", "strength_settings_top_bottom_shells#surface-density"); optgroup->append_single_option_line("top_surface_pattern", "strength_settings_top_bottom_shells#surface-pattern"); - optgroup->append_single_option_line("top_layer_direction", "strength_settings_infill#top-direction"); + optgroup->append_single_option_line("top_layer_direction", "strength_settings_infill#top-bottom-direction"); optgroup->append_single_option_line("top_surface_expansion", "strength_settings_top_bottom_shells#surface-expansion"); optgroup->append_single_option_line("top_surface_expansion_margin", "strength_settings_top_bottom_shells#surface-expansion-margin"); optgroup->append_single_option_line("top_surface_expansion_direction", "strength_settings_top_bottom_shells#surface-expansion-direction"); @@ -2770,7 +2770,7 @@ void TabPrint::build() optgroup->append_single_option_line("bottom_shell_thickness", "strength_settings_top_bottom_shells#shell-thickness"); optgroup->append_single_option_line("bottom_surface_density", "strength_settings_top_bottom_shells#surface-density"); optgroup->append_single_option_line("bottom_surface_pattern", "strength_settings_top_bottom_shells#surface-pattern"); - optgroup->append_single_option_line("bottom_layer_direction", "strength_settings_infill#direction"); + optgroup->append_single_option_line("bottom_layer_direction", "strength_settings_infill#top-bottom-direction"); optgroup->append_single_option_line("center_of_surface_pattern", "strength_settings_top_bottom_shells#center-surface-pattern-on"); optgroup->append_single_option_line("anisotropic_surfaces", "strength_settings_top_bottom_shells#anisotropic-surfaces"); optgroup->append_single_option_line("top_bottom_infill_wall_overlap", "strength_settings_top_bottom_shells#infillwall-overlap"); @@ -2807,7 +2807,7 @@ void TabPrint::build() optgroup->append_single_option_line("infill_wall_overlap", "strength_settings_infill#infill-wall-overlap"); optgroup = page->new_optgroup(L("Advanced"), L"param_advanced"); - optgroup->append_single_option_line("align_infill_direction_to_model", "strength_settings_advanced#align-infill-direction-to-model"); + optgroup->append_single_option_line("align_infill_direction_to_model", "strength_settings_advanced#align-directions-to-model"); optgroup->append_single_option_line("extra_solid_infills", "strength_settings_infill#extra-solid-infill"); optgroup->append_single_option_line("bridge_angle", "strength_settings_advanced#bridge-infill-direction"); optgroup->append_single_option_line("internal_bridge_angle", "strength_settings_advanced#bridge-infill-direction"); // ORCA: Internal bridge angle override diff --git a/src/slic3r/GUI/calib_dlg.cpp b/src/slic3r/GUI/calib_dlg.cpp index 8cf33c3851..0a18e2d448 100644 --- a/src/slic3r/GUI/calib_dlg.cpp +++ b/src/slic3r/GUI/calib_dlg.cpp @@ -1471,12 +1471,24 @@ FlowRateCalibrationDialog::FlowRateCalibrationDialog(wxWindow* parent, wxWindowI type_box->Add(m_rbType, 0, wxALL | wxEXPAND, FromDIP(4)); v_sizer->Add(type_box, 0, wxTOP | wxRIGHT | wxLEFT | wxEXPAND, FromDIP(10)); - // Pattern selection - auto labeled_box_pattern = new LabeledStaticBox(this, _L("Top Surface Pattern")); - auto pattern_box = new wxStaticBoxSizer(labeled_box_pattern, wxVERTICAL); + // Settings + auto stb = new LabeledStaticBox(this, _L("Settings")); + auto settings_sizer = new wxStaticBoxSizer(stb, wxVERTICAL); + + wxString pattern_str = _L("Top Surface Pattern"); + int text_max = GetTextMax(this, std::vector{pattern_str}); + + settings_sizer->AddSpacer(FromDIP(5)); + + auto st_size = wxSize(text_max, -1); + auto ti_size = FromDIP(wxSize(120, -1)); + + // Top surface pattern + auto pattern_sizer = new wxBoxSizer(wxHORIZONTAL); + auto pattern_text = new wxStaticText(this, wxID_ANY, pattern_str, wxDefaultPosition, st_size, wxALIGN_LEFT); // ORCA: Use ComboBox with icons instead of RadioGroup - m_rbPattern = new ComboBox(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, nullptr, wxCB_READONLY); + m_rbPattern = new ComboBox(this, wxID_ANY, wxEmptyString, wxDefaultPosition, ti_size, 0, nullptr, wxCB_READONLY); boost::filesystem::path image_path(Slic3r::resources_dir()); image_path /= "images"; @@ -1497,9 +1509,13 @@ FlowRateCalibrationDialog::FlowRateCalibrationDialog(wxWindow* parent, wxWindowI m_rbPattern->SetSelection(0); // Default to Archimedean Chords // ORCA: explicit set value to ensure display on Windows m_rbPattern->SetValue(m_rbPattern->GetString(0)); + m_rbPattern->GetDropDown().SetUseContentWidth(true); - pattern_box->Add(m_rbPattern, 0, wxALL | wxEXPAND, FromDIP(4)); - v_sizer->Add(pattern_box, 0, wxTOP | wxRIGHT | wxLEFT | wxEXPAND, FromDIP(10)); + pattern_sizer->Add(pattern_text, 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(2)); + pattern_sizer->Add(m_rbPattern , 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(2)); + settings_sizer->Add(pattern_sizer, 0, wxLEFT, FromDIP(3)); + + v_sizer->Add(settings_sizer, 0, wxTOP | wxRIGHT | wxLEFT | wxEXPAND, FromDIP(10)); v_sizer->AddSpacer(FromDIP(5));