Merge remote-tracking branch 'origin/main' into feature/h2c_support_clean

# Conflicts:
#	localization/i18n/fr/OrcaSlicer_fr.po
#	localization/i18n/list.txt
This commit is contained in:
SoftFever
2026-07-14 02:54:20 +08:00
27 changed files with 1149 additions and 732 deletions
+169 -42
View File
@@ -393,7 +393,7 @@ msgid "Reset rotation"
msgstr "Réinitialiser la rotation" msgstr "Réinitialiser la rotation"
msgid "World" msgid "World"
msgstr "" msgstr "Monde"
msgid "Object" msgid "Object"
msgstr "Objet" msgstr "Objet"
@@ -402,13 +402,13 @@ msgid "Part"
msgstr "Pièce" msgstr "Pièce"
msgid "Relative" msgid "Relative"
msgstr "" msgstr "Relatif"
msgid "Coordinate system used for transform actions." msgid "Coordinate system used for transform actions."
msgstr "" msgstr "Système de coordonnées utilisé pour les actions de transformation."
msgid "Absolute" msgid "Absolute"
msgstr "" msgstr "Absolu"
msgid "Reset current rotation to the value when open the rotation tool." msgid "Reset current rotation to the value when open the rotation tool."
msgstr "Réinitialiser la rotation actuelle à la valeur lors de l'ouverture de l'outil de rotation." msgstr "Réinitialiser la rotation actuelle à la valeur lors de l'ouverture de l'outil de rotation."
@@ -1862,31 +1862,31 @@ msgid "The version of Orca Slicer is too low and needs to be updated to the late
msgstr "La version de OrcaSlicer est trop ancienne et doit être mise à jour vers la dernière version afin qu’il puisse être utilisé normalement." msgstr "La version de OrcaSlicer est trop ancienne et doit être mise à jour vers la dernière version afin qu’il puisse être utilisé normalement."
msgid "Cloud sync conflict:" msgid "Cloud sync conflict:"
msgstr "" msgstr "Conflit de synchronisation cloud :"
#, c-format, boost-format #, c-format, boost-format
msgid "Cloud sync conflict for preset \"%s\":" msgid "Cloud sync conflict for preset \"%s\":"
msgstr "" msgstr "Conflit de synchronisation cloud pour le préréglage « %s » :"
msgid "" msgid ""
"This preset has a newer version in OrcaCloud.\n" "This preset has a newer version in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset." "Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr "" msgstr "Ce préréglage possède une version plus récente dans OrcaCloud.\nRécupérer télécharge la copie du cloud. Forcer l’envoi l’écrase avec votre préréglage local."
msgid "" msgid ""
"A preset with this name already exists in OrcaCloud.\n" "A preset with this name already exists in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset." "Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr "" msgstr "Un préréglage de ce nom existe déjà dans OrcaCloud.\nRécupérer télécharge la copie du cloud. Forcer l’envoi l’écrase avec votre préréglage local."
msgid "" msgid ""
"A preset with the same name was previously deleted from the cloud.\n" "A preset with the same name was previously deleted from the cloud.\n"
"Delete will delete your local preset. Force push overwrites it with your local preset." "Delete will delete your local preset. Force push overwrites it with your local preset."
msgstr "" msgstr "Un préréglage du même nom a été précédemment supprimé du cloud.\nSupprimer effacera votre préréglage local. Forcer l’envoi l’écrase avec votre préréglage local."
msgid "" msgid ""
"There was an unexpected or unidentified preset conflict.\n" "There was an unexpected or unidentified preset conflict.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset." "Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr "" msgstr "Un conflit de préréglage inattendu ou non identifié s’est produit.\nRécupérer télécharge la copie du cloud. Forcer l’envoi l’écrase avec votre préréglage local."
msgid "" msgid ""
"Force push will overwrite the cloud copy with your local preset changes.\n" "Force push will overwrite the cloud copy with your local preset changes.\n"
@@ -1899,7 +1899,7 @@ msgstr ""
msgid "" msgid ""
"Force push will overwrite the cloud copy of preset \"%s\" with your local changes.\n" "Force push will overwrite the cloud copy of preset \"%s\" with your local changes.\n"
"Do you want to continue?" "Do you want to continue?"
msgstr "" msgstr "Forcer l’envoi écrasera la copie cloud du préréglage « %s » avec vos modifications locales.\nVoulez-vous continuer ?"
msgid "Resolve cloud sync conflict" msgid "Resolve cloud sync conflict"
msgstr "Résoudre le conflit de synchronisation cloud" msgstr "Résoudre le conflit de synchronisation cloud"
@@ -1982,7 +1982,7 @@ msgstr "Synchroniser les réglages prédéfinis de l’utilisateur"
#, c-format, boost-format #, c-format, boost-format
msgid "The preset \"%s\" is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only." msgid "The preset \"%s\" is too large to sync to the cloud (exceeds 1MB). Please reduce the preset size by removing custom configurations or use it locally only."
msgstr "" msgstr "Le préréglage « %s » est trop volumineux pour être synchronisé vers le cloud (dépasse 1 Mo). Veuillez réduire sa taille en supprimant des configurations personnalisées, ou l’utiliser uniquement en local."
#, c-format, boost-format #, c-format, boost-format
msgid "%s updated from %s to %s" msgid "%s updated from %s to %s"
@@ -2192,7 +2192,7 @@ msgid "OrcaSliced Combo"
msgstr "OrcaSliced Combo" msgstr "OrcaSliced Combo"
msgid "Orca Badge" msgid "Orca Badge"
msgstr "" msgstr "Orca Badge"
msgid "Orca Tolerance Test" msgid "Orca Tolerance Test"
msgstr "Test de tolérance Orca" msgstr "Test de tolérance Orca"
@@ -5173,7 +5173,7 @@ msgid "Outline"
msgstr "Contour" msgstr "Contour"
msgid "Wireframe" msgid "Wireframe"
msgstr "" msgstr "Fil de fer"
msgid "Realistic View" msgid "Realistic View"
msgstr "Vue réaliste" msgstr "Vue réaliste"
@@ -7911,33 +7911,33 @@ msgid "If enabled, a parameter settings dialog will appear during STEP file impo
msgstr "Si activé, une boîte de dialogue de paramètres apparaîtra lors de l'importation d'un fichier STEP." msgstr "Si activé, une boîte de dialogue de paramètres apparaîtra lors de l'importation d'un fichier STEP."
msgid "STEP importing: linear deflection" msgid "STEP importing: linear deflection"
msgstr "" msgstr "Import STEP : déviation linéaire"
msgid "" msgid ""
"Linear deflection used when meshing imported STEP files.\n" "Linear deflection used when meshing imported STEP files.\n"
"Smaller values produce higher-quality meshes but increase processing time.\n" "Smaller values produce higher-quality meshes but increase processing time.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n" "Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: 0.003 mm." "Default: 0.003 mm."
msgstr "" msgstr "Déviation linéaire utilisée lors du maillage des fichiers STEP importés.\nDes valeurs plus petites produisent des maillages de meilleure qualité mais augmentent le temps de traitement.\nUtilisée par défaut dans la fenêtre d’import, ou directement lorsque la fenêtre d’import est désactivée.\nPar défaut : 0,003 mm."
msgid "STEP importing: angle deflection" msgid "STEP importing: angle deflection"
msgstr "" msgstr "Import STEP : déviation angulaire"
msgid "" msgid ""
"Angle deflection used when meshing imported STEP files.\n" "Angle deflection used when meshing imported STEP files.\n"
"Smaller values produce higher-quality meshes but increase processing time.\n" "Smaller values produce higher-quality meshes but increase processing time.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n" "Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: 0.5." "Default: 0.5."
msgstr "" msgstr "Déviation angulaire utilisée lors du maillage des fichiers STEP importés.\nDes valeurs plus petites produisent des maillages de meilleure qualité mais augmentent le temps de traitement.\nUtilisée par défaut dans la fenêtre d’import, ou directement lorsque la fenêtre d’import est désactivée.\nPar défaut : 0,5."
msgid "STEP importing: Split into multiple objects" msgid "STEP importing: Split into multiple objects"
msgstr "" msgstr "Import STEP : diviser en plusieurs objets"
msgid "" msgid ""
"If enabled, compound and compsolid shapes in imported STEP files are split into multiple objects.\n" "If enabled, compound and compsolid shapes in imported STEP files are split into multiple objects.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n" "Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: disabled." "Default: disabled."
msgstr "" msgstr "Si activé, les formes compound et compsolid des fichiers STEP importés sont divisées en plusieurs objets.\nUtilisé par défaut dans la fenêtre d’import, ou directement lorsque la fenêtre d’import est désactivée.\nPar défaut : désactivé."
msgid "Quality level for Draco export" msgid "Quality level for Draco export"
msgstr "Niveau de qualité pour l'exportation Draco" msgstr "Niveau de qualité pour l'exportation Draco"
@@ -7955,10 +7955,10 @@ msgstr ""
"Des valeurs plus basses produisent des fichiers plus petits mais perdent plus de détails géométriques ; des valeurs plus élevées préservent plus de détails au prix de fichiers plus volumineux." "Des valeurs plus basses produisent des fichiers plus petits mais perdent plus de détails géométriques ; des valeurs plus élevées préservent plus de détails au prix de fichiers plus volumineux."
msgid "Store full source file paths in projects" msgid "Store full source file paths in projects"
msgstr "" msgstr "Stocker les chemins complets des fichiers source dans les projets"
msgid "If enabled, saved projects store the absolute path to imported source files (STEP/STL/...), so \"Reload from disk\" still works when the source file is kept in a different folder than the project. If disabled, only the filename is stored, which keeps projects portable and avoids embedding absolute paths." msgid "If enabled, saved projects store the absolute path to imported source files (STEP/STL/...), so \"Reload from disk\" still works when the source file is kept in a different folder than the project. If disabled, only the filename is stored, which keeps projects portable and avoids embedding absolute paths."
msgstr "" msgstr "Si activé, les projets enregistrés stockent le chemin absolu des fichiers source importés (STEP/STL/…), afin que « Recharger à partir du disque » fonctionne toujours lorsque le fichier source est conservé dans un dossier différent du projet. Si désactivé, seul le nom du fichier est stocké, ce qui garde les projets portables et évite d’intégrer des chemins absolus."
msgid "Preset" msgid "Preset"
msgstr "Préréglage" msgstr "Préréglage"
@@ -12294,7 +12294,7 @@ msgid "Line width of outer wall. If expressed as a %, it will be computed over t
msgstr "Largeur de la ligne de la paroi extérieure. Si elle est exprimée en %, elle sera calculée sur le diamètre de la buse." msgstr "Largeur de la ligne de la paroi extérieure. Si elle est exprimée en %, elle sera calculée sur le diamètre de la buse."
msgid "This is the printing speed for the outer walls of parts. These are generally printed slower than inner walls for higher quality." msgid "This is the printing speed for the outer walls of parts. These are generally printed slower than inner walls for higher quality."
msgstr "Vitesse de paroi extérieure qui est la plus à l'extérieur et visible. Elle est généralement plus lente que la vitesse de la paroi interne pour obtenir une meilleure qualité." msgstr "Vitesse de paroi extérieure qui est la plus à l'extérieur et visible. Elle est généralement plus lente que la vitesse de la paroi intérieure pour obtenir une meilleure qualité."
msgid "Small perimeters" msgid "Small perimeters"
msgstr "Petits périmètres" msgstr "Petits périmètres"
@@ -12309,16 +12309,16 @@ msgid "This sets the threshold for small perimeter length. Default threshold is
msgstr "Cela définit le seuil pour une petite longueur de périmètre. Le seuil par défaut est de 0 mm" msgstr "Cela définit le seuil pour une petite longueur de périmètre. Le seuil par défaut est de 0 mm"
msgid "Small support perimeters" msgid "Small support perimeters"
msgstr "" msgstr "Petits périmètres de support"
msgid "Same as \"Small perimeters\", but for supports. This separate setting will affect the speed of support for areas <= `small_support_perimeter_threshold`. If expressed as a percentage (for example: 80%), it will be calculated on the support or support interface speed setting above. Set to zero for auto." msgid "Same as \"Small perimeters\", but for supports. This separate setting will affect the speed of support for areas <= `small_support_perimeter_threshold`. If expressed as a percentage (for example: 80%), it will be calculated on the support or support interface speed setting above. Set to zero for auto."
msgstr "" msgstr "Comme « Petits périmètres », mais pour les supports. Ce réglage distinct affecte la vitesse des supports pour les zones <= `small_support_perimeter_threshold`. S’il est exprimé en pourcentage (par exemple : 80 %), il est calculé à partir du réglage de vitesse des supports ou de l’interface de support ci-dessus. Réglez sur zéro pour automatique."
msgid "Small support perimeters threshold" msgid "Small support perimeters threshold"
msgstr "" msgstr "Seuil des petits périmètres de support"
msgid "This sets the threshold for small support perimeter length. The default threshold is 0mm." msgid "This sets the threshold for small support perimeter length. The default threshold is 0mm."
msgstr "" msgstr "Définit le seuil de longueur des petits périmètres de support. Le seuil par défaut est 0 mm."
msgid "Walls printing order" msgid "Walls printing order"
msgstr "Ordre d’impression des parois" msgstr "Ordre d’impression des parois"
@@ -12506,7 +12506,7 @@ msgstr ""
"3 Entrez les triplets de valeurs PA, de débit et d’accélérations dans la zone de texte ici et sauvegardez votre profil de filament." "3 Entrez les triplets de valeurs PA, de débit et d’accélérations dans la zone de texte ici et sauvegardez votre profil de filament."
msgid "Enable adaptive pressure advance within features (beta)" msgid "Enable adaptive pressure advance within features (beta)"
msgstr "" msgstr "Activer l’avance de pression adaptative au sein des structures (bêta)"
msgid "" msgid ""
"Enable adaptive PA whenever there are flow changes in a feature, such as line width changes in a corner or overhangs.\n" "Enable adaptive PA whenever there are flow changes in a feature, such as line width changes in a corner or overhangs.\n"
@@ -12514,17 +12514,17 @@ msgid ""
"Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects.\n" "Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects.\n"
"\n" "\n"
"This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues." "This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues."
msgstr "" msgstr "Activer le PA adaptatif dès qu’il y a des changements de débit dans une structure, comme des variations de largeur de ligne dans un angle ou des surplombs.\n\nIncompatible avec les imprimantes Prusa, car elles marquent une pause pour traiter les changements de PA, ce qui cause des retards et des défauts.\n\nIl s’agit d’une option expérimentale : si le profil de PA n’est pas réglé avec précision, elle provoquera des problèmes d’uniformité."
msgid "Static pressure advance for bridges" msgid "Static pressure advance for bridges"
msgstr "" msgstr "Avance de pression statique pour les ponts"
msgid "" msgid ""
"Static pressure advance value for bridges. Set to 0 to apply the same pressure advance as \n" "Static pressure advance value for bridges. Set to 0 to apply the same pressure advance as \n"
"equivalent walls (using adaptive settings if enabled).\n" "equivalent walls (using adaptive settings if enabled).\n"
"\n" "\n"
"A lower PA value when printing bridges helps reduce the appearance of slight under-extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this." "A lower PA value when printing bridges helps reduce the appearance of slight under-extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
msgstr "" msgstr "Valeur d’avance de pression statique pour les ponts. Réglez sur 0 pour appliquer la même avance de pression que \npour les parois équivalentes (en utilisant les réglages adaptatifs si activés).\n\nUne valeur de PA plus faible lors de l’impression des ponts aide à réduire l’apparition d’une légère sous-extrusion juste après les ponts. Elle est causée par la chute de pression dans la buse lors de l’impression dans le vide, et un PA plus faible aide à la contrer."
msgid "Default line width if other line widths are set to 0. If expressed as a %, it will be computed over the nozzle diameter." msgid "Default line width if other line widths are set to 0. If expressed as a %, it will be computed over the nozzle diameter."
msgstr "Largeur de ligne par défaut si les autres largeurs de ligne sont fixées à 0. Si elle est exprimée en %, elle sera calculée sur le diamètre de la buse." msgstr "Largeur de ligne par défaut si les autres largeurs de ligne sont fixées à 0. Si elle est exprimée en %, elle sera calculée sur le diamètre de la buse."
@@ -12897,20 +12897,20 @@ msgid "Angle for solid infill pattern, which controls the start or main directio
msgstr "Angle pour le motif de remplissage, qui contrôle le début ou la direction principale de la ligne" msgstr "Angle pour le motif de remplissage, qui contrôle le début ou la direction principale de la ligne"
msgid "Top layer direction" msgid "Top layer direction"
msgstr "" msgstr "Direction de la couche supérieure"
msgid "" msgid ""
"Fixed angle for the top solid infill and ironing lines.\n" "Fixed angle for the top solid infill and ironing lines.\n"
"Set to -1 to follow the default solid infill direction." "Set to -1 to follow the default solid infill direction."
msgstr "" msgstr "Angle fixe pour le remplissage plein supérieur et les lignes de lissage.\nRéglez sur -1 pour suivre la direction de remplissage plein par défaut."
msgid "Bottom layer direction" msgid "Bottom layer direction"
msgstr "" msgstr "Direction de la couche inférieure"
msgid "" msgid ""
"Fixed angle for the bottom solid infill lines.\n" "Fixed angle for the bottom solid infill lines.\n"
"Set to -1 to follow the default solid infill direction." "Set to -1 to follow the default solid infill direction."
msgstr "" msgstr "Angle fixe pour les lignes de remplissage plein inférieur.\nRéglez sur -1 pour suivre la direction de remplissage plein par défaut."
msgid "Sparse infill density" msgid "Sparse infill density"
msgstr "Densité de remplissage" msgstr "Densité de remplissage"
@@ -14382,7 +14382,7 @@ msgid "This detects the overhang percentage relative to line width and uses a di
msgstr "Détectez le pourcentage de surplomb par rapport à la largeur de la ligne et utilisez une vitesse différente pour imprimer. Pour un surplomb de 100%% la vitesse du pont est utilisée." msgstr "Détectez le pourcentage de surplomb par rapport à la largeur de la ligne et utilisez une vitesse différente pour imprimer. Pour un surplomb de 100%% la vitesse du pont est utilisée."
msgid "Outer walls" msgid "Outer walls"
msgstr "Parois externes" msgstr "Parois extérieures"
msgid "" msgid ""
"Filament to print outer walls.\n" "Filament to print outer walls.\n"
@@ -14392,7 +14392,7 @@ msgstr ""
"\"Défaut\" utilise le filament actif de l’objet ou de la pièce." "\"Défaut\" utilise le filament actif de l’objet ou de la pièce."
msgid "Inner walls" msgid "Inner walls"
msgstr "Parois internes" msgstr "Parois intérieures"
msgid "" msgid ""
"Filament to print inner walls.\n" "Filament to print inner walls.\n"
@@ -14752,7 +14752,7 @@ msgid "Minimum number of segments of each scarf."
msgstr "Nombre minimum de segments de chaque biseau." msgstr "Nombre minimum de segments de chaque biseau."
msgid "Scarf joint for inner walls" msgid "Scarf joint for inner walls"
msgstr "Joint en biseau pour les parois internes" msgstr "Joint en biseau pour les parois intérieures"
msgid "Use scarf joint for inner walls as well." msgid "Use scarf joint for inner walls as well."
msgstr "Utiliser également un joint en biseau pour les parois intérieures." msgstr "Utiliser également un joint en biseau pour les parois intérieures."
@@ -15740,12 +15740,12 @@ msgid "Rotate the polyhole every layer."
msgstr "Faites pivoter le trou polygone à chaque couche." msgstr "Faites pivoter le trou polygone à chaque couche."
msgid "Maximum Polyhole edge count" msgid "Maximum Polyhole edge count"
msgstr "" msgstr "Nombre maximal d’arêtes de polyhole"
msgid "" msgid ""
"Maximum number of polyhole edges\n" "Maximum number of polyhole edges\n"
"This setting limits the amount of edges a polyhole can have" "This setting limits the amount of edges a polyhole can have"
msgstr "" msgstr "Nombre maximal d’arêtes de polyhole\nCe réglage limite le nombre d’arêtes qu’un polyhole peut avoir"
msgid "G-code thumbnails" msgid "G-code thumbnails"
msgstr "Vignette G-code" msgstr "Vignette G-code"
@@ -19077,10 +19077,10 @@ msgid "Calculating, please wait..."
msgstr "Calcul en cours, veuillez patienter…" msgstr "Calcul en cours, veuillez patienter…"
msgid "Save these settings as default" msgid "Save these settings as default"
msgstr "" msgstr "Enregistrer ces réglages par défaut"
msgid "If enabled, the values above are stored as the defaults used for future STEP imports (and shown in Preferences)." msgid "If enabled, the values above are stored as the defaults used for future STEP imports (and shown in Preferences)."
msgstr "" msgstr "Si activé, les valeurs ci-dessus sont stockées comme valeurs par défaut pour les futurs imports STEP (et affichées dans les Préférences)."
msgid "PresetBundle" msgid "PresetBundle"
msgstr "Paquet de préréglages" msgstr "Paquet de préréglages"
@@ -22408,3 +22408,130 @@ msgstr "Tête d'Outil"
msgid "Used Time: %s" msgid "Used Time: %s"
msgstr "Temps d'Usage: %s" msgstr "Temps d'Usage: %s"
# Orca: hardcoded GUI strings extracted (i18n FR pass)
msgid "Rename Object"
msgstr "Renommer l’objet"
msgid "Rename Part"
msgstr "Renommer la pièce"
msgid "Paste settings"
msgstr "Coller les réglages"
msgid "Shift objects to bed"
msgstr "Déplacer les objets sur le plateau"
msgid "Object order changed"
msgstr "Ordre des objets modifié"
msgid "Layer setting added"
msgstr "Réglage de couche ajouté"
msgid "Part setting added"
msgstr "Réglage de pièce ajouté"
msgid "Object setting added"
msgstr "Réglage d’objet ajouté"
msgid "Height range settings added"
msgstr "Réglages de plage de hauteur ajoutés"
msgid "Part settings added"
msgstr "Réglages de pièce ajoutés"
msgid "Object settings added"
msgstr "Réglages d’objet ajoutés"
msgid "Load Part"
msgstr "Charger une pièce"
msgid "Load Modifier"
msgstr "Charger un modificateur"
msgid "Add primitive"
msgstr "Ajouter une primitive"
msgid "Delete Settings"
msgstr "Supprimer les réglages"
msgid "Delete part"
msgstr "Supprimer la pièce"
msgid "Merge parts to an object"
msgstr "Fusionner les pièces en un objet"
msgid "Add layers"
msgstr "Ajouter des couches"
msgid "Delete selected"
msgstr "Supprimer la sélection"
msgid "Instances to Separated Objects"
msgstr "Séparer les instances en objets"
msgid "Change Filaments"
msgstr "Changer les filaments"
msgid "Delete Object"
msgstr "Supprimer l’objet"
msgid "Delete All Objects"
msgstr "Supprimer tous les objets"
msgid "Reset Project"
msgstr "Réinitialiser le projet"
msgid "Split to Objects"
msgstr "Scinder en objets"
msgid "Replace with 3D file"
msgstr "Remplacer par un fichier 3D"
msgid "Reload all"
msgstr "Tout recharger"
msgid "Reset Cut"
msgstr "Réinitialiser la découpe"
msgid "How to trouble shooting"
msgstr "Comment résoudre les problèmes ?"
msgid "parse json failed"
msgstr "Échec de l’analyse du JSON"
msgid "Select Images"
msgstr "Sélectionner des images"
msgid "One of the presets does not exist"
msgstr "L’un des préréglages n’existe pas."
msgid "Compared presets has different printer technology"
msgstr "Les préréglages comparés utilisent une technologie d’imprimante différente."
msgid "Done."
msgstr "Terminé."
msgid "Change extruder color"
msgstr "Changer la couleur de l’extrudeur"
msgid "There is an update available. Open the preset bundle dialog to update it."
msgstr "Une mise à jour est disponible. Ouvrez la boîte de dialogue du paquet de préréglages pour l’installer."
msgid "Orca Slicer - Switching language failed"
msgstr "Orca Slicer — Échec du changement de langue"
msgid "Switching Orca Slicer to language %s failed."
msgstr "Le passage d’Orca Slicer à la langue %s a échoué."
msgid "\nYou may need to reconfigure the missing locales, likely by running the \"locale-gen\" and \"dpkg-reconfigure locales\" commands.\n"
msgstr "\nVous devrez peut-être reconfigurer les paramètres régionaux manquants, probablement en exécutant les commandes « locale-gen » et « dpkg-reconfigure locales ».\n"
msgid "Image files (*.png;*.jpg;*jpeg)|*.png;*.jpg;*.jpeg"
msgstr "Fichiers image (*.png;*.jpg;*jpeg)|*.png;*.jpg;*.jpeg"
msgid "Config files (*.json;*.zip;*.orca_printer;*.orca_bundle;*.orca_filament)|*.json;*.zip;*.orca_printer;*.orca_bundle;*.orca_filament"
msgstr "Fichiers de configuration (*.json;*.zip;*.orca_printer;*.orca_bundle;*.orca_filament)|*.json;*.zip;*.orca_printer;*.orca_bundle;*.orca_filament"
msgid "Objects(%1%) have duplicated connectors. Some connectors may be missing in slicing result.\nPlease report to PrusaSlicer team in which scenario this issue happened.\nThank you."
msgstr "Les objets (%1%) ont des connecteurs dupliqués. Certains connecteurs risquent d’être absents du résultat du découpage.\nVeuillez signaler à l’équipe PrusaSlicer dans quel scénario ce problème est survenu.\nMerci."
+1
View File
@@ -109,6 +109,7 @@ src/slic3r/GUI/Widgets/TempInput.cpp
src/slic3r/GUI/Widgets/CheckList.cpp src/slic3r/GUI/Widgets/CheckList.cpp
src/slic3r/GUI/Widgets/SwitchButton.cpp src/slic3r/GUI/Widgets/SwitchButton.cpp
src/slic3r/GUI/Widgets/MultiNozzleSync.cpp src/slic3r/GUI/Widgets/MultiNozzleSync.cpp
src/slic3r/GUI/Widgets/ProgressDialog.cpp
src/slic3r/GUI/ImGuiWrapper.cpp src/slic3r/GUI/ImGuiWrapper.cpp
src/slic3r/GUI/Jobs/ArrangeJob.cpp src/slic3r/GUI/Jobs/ArrangeJob.cpp
src/slic3r/GUI/Jobs/OrientJob.cpp src/slic3r/GUI/Jobs/OrientJob.cpp
+39 -35
View File
@@ -3,8 +3,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Orca Slicer\n" "Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-12 12:27-0300\n" "POT-Creation-Date: 2026-07-07 16:46-0300\n"
"PO-Revision-Date: 2026-07-04 11:51-0300\n" "PO-Revision-Date: 2026-07-08 20:45-0300\n"
"Last-Translator: Alexandre Folle de Menezes\n" "Last-Translator: Alexandre Folle de Menezes\n"
"Language-Team: Portuguese, Brazilian\n" "Language-Team: Portuguese, Brazilian\n"
"Language: pt_BR\n" "Language: pt_BR\n"
@@ -328,7 +328,7 @@ msgstr "Otimizar orientação"
msgctxt "Verb" msgctxt "Verb"
msgid "Scale" msgid "Scale"
msgstr "Escala" msgstr "Escalar"
msgid "Gizmo-Scale" msgid "Gizmo-Scale"
msgstr "Gizmo-Dimensionar" msgstr "Gizmo-Dimensionar"
@@ -338,7 +338,7 @@ msgstr "Erro: Por favor, feche todos os menus da barra de ferramentas primeiro"
msgctxt "inches" msgctxt "inches"
msgid "in" msgid "in"
msgstr "" msgstr "pol"
msgid "mm" msgid "mm"
msgstr "mm" msgstr "mm"
@@ -3590,7 +3590,7 @@ msgstr "Salvar"
msgctxt "Navigation" msgctxt "Navigation"
msgid "Back" msgid "Back"
msgstr "Atrás" msgstr "Voltar"
msgid "Example" msgid "Example"
msgstr "Exemplo" msgstr "Exemplo"
@@ -4041,7 +4041,7 @@ msgid "The recommended nozzle temperature for this filament type is [%d, %d] deg
msgstr "A temperatura do bico recomendada para este tipo de filamento é [%d, %d] graus Celsius." msgstr "A temperatura do bico recomendada para este tipo de filamento é [%d, %d] graus Celsius."
msgid "Adaptive Pressure Advance model validation failed:\n" msgid "Adaptive Pressure Advance model validation failed:\n"
msgstr "" msgstr "Falha na validação do modelo de Pressure Advance Adaptativo:\n"
msgid "" msgid ""
"Too small max volumetric speed.\n" "Too small max volumetric speed.\n"
@@ -4665,7 +4665,7 @@ msgid "Layer Time (log)"
msgstr "Tempo da Camada (log)" msgstr "Tempo da Camada (log)"
msgid "Pressure Advance" msgid "Pressure Advance"
msgstr "Avanço de Pressão" msgstr "Pressure Advance"
msgid "Noop" msgid "Noop"
msgstr "" msgstr ""
@@ -4773,7 +4773,7 @@ msgid "Jerk: "
msgstr "Jerk: " msgstr "Jerk: "
msgid "PA: " msgid "PA: "
msgstr "AP: " msgstr "PA: "
msgid "mm/s" msgid "mm/s"
msgstr "mm/s" msgstr "mm/s"
@@ -4951,7 +4951,7 @@ msgstr "Mudança de cor"
msgctxt "Noun" msgctxt "Noun"
msgid "Print" msgid "Print"
msgstr "Imprimir" msgstr "Impressão"
msgid "Printer" msgid "Printer"
msgstr "Impressora" msgstr "Impressora"
@@ -5762,7 +5762,7 @@ msgid "Max flowrate"
msgstr "Fluxo máximo" msgstr "Fluxo máximo"
msgid "Pressure advance" msgid "Pressure advance"
msgstr "Avanço de pressão" msgstr "Pressure advance"
msgid "Flow ratio" msgid "Flow ratio"
msgstr "Taxa de fluxo" msgstr "Taxa de fluxo"
@@ -9448,7 +9448,7 @@ msgid "Recommended nozzle temperature range of this filament. 0 means not set"
msgstr "Faixa de temperatura do bico recomendada para este filamento. 0 significa não definido" msgstr "Faixa de temperatura do bico recomendada para este filamento. 0 significa não definido"
msgid "Flow ratio and Pressure Advance" msgid "Flow ratio and Pressure Advance"
msgstr "Taxa de fluxo e Avanço de Pressão" msgstr "Taxa de fluxo e Pressure Advance"
msgid "Print chamber temperature" msgid "Print chamber temperature"
msgstr "Temperatura da câmara de impressão" msgstr "Temperatura da câmara de impressão"
@@ -11178,7 +11178,7 @@ msgid "The precise wall option will be ignored for outer-inner or inner-outer-in
msgstr "A opção de parede precisa será ignorada para sequências externa-interna ou interna-externa-interna." msgstr "A opção de parede precisa será ignorada para sequências externa-interna ou interna-externa-interna."
msgid "The Adaptive Pressure Advance model for one or more extruders may contain invalid values." msgid "The Adaptive Pressure Advance model for one or more extruders may contain invalid values."
msgstr "" msgstr "O modelo de Pressure Advance Adaptativo para uma ou mais extrusoras pode conter valores inválidos."
msgid "Filament shrinkage will not be used because filament shrinkage for the used filaments does not match." msgid "Filament shrinkage will not be used because filament shrinkage for the used filaments does not match."
msgstr "A contração de filamento não será usada porque a contração dos filamentos usados difere significativamente." msgstr "A contração de filamento não será usada porque a contração dos filamentos usados difere significativamente."
@@ -12517,16 +12517,16 @@ msgstr ""
"A taxa de fluxo final do objeto é este valor multiplicado pela taxa de fluxo do filamento." "A taxa de fluxo final do objeto é este valor multiplicado pela taxa de fluxo do filamento."
msgid "Enable pressure advance" msgid "Enable pressure advance"
msgstr "Habilitar avanço de pressão" msgstr "Habilitar pressure advance"
msgid "Enable pressure advance, auto calibration result will be overwritten once enabled." msgid "Enable pressure advance, auto calibration result will be overwritten once enabled."
msgstr "Habilitar avanço de pressão, o resultado da calibração automática será sobrescrito uma vez habilitado." msgstr "Habilitar pressure advance, o resultado da calibração automática será sobrescrito uma vez habilitado."
msgid "Pressure advance (Klipper) AKA Linear advance factor (Marlin)." msgid "Pressure advance (Klipper) AKA Linear advance factor (Marlin)."
msgstr "Avanço de pressão (Klipper) também conhecido como Fator de avanço linear (Marlin)" msgstr "Pressure advance (Klipper) também conhecido como Fator de avanço linear (Marlin)"
msgid "Enable adaptive pressure advance (beta)" msgid "Enable adaptive pressure advance (beta)"
msgstr "Habilitar avanço de pressão adaptativo (beta)" msgstr "Habilitar pressure advance adaptativo (beta)"
#, no-c-format, no-boost-format #, no-c-format, no-boost-format
msgid "" msgid ""
@@ -12539,13 +12539,13 @@ msgid ""
msgstr "" msgstr ""
"Com o aumento das velocidades de impressão (e, portanto, do fluxo volumétrico através do bico) e acelerações crescentes, observou-se que o valor efetivo de PA normalmente diminui. Isso significa que um único valor de PA nem sempre é 100% ideal para todos os recursos e um valor de compromisso é geralmente usado para não causar muita protuberância em partes com menor velocidade de fluxo e acelerações, mas também não causar lacunas em partes mais rápidas.\n" "Com o aumento das velocidades de impressão (e, portanto, do fluxo volumétrico através do bico) e acelerações crescentes, observou-se que o valor efetivo de PA normalmente diminui. Isso significa que um único valor de PA nem sempre é 100% ideal para todos os recursos e um valor de compromisso é geralmente usado para não causar muita protuberância em partes com menor velocidade de fluxo e acelerações, mas também não causar lacunas em partes mais rápidas.\n"
"\n" "\n"
"Este recurso visa abordar essa limitação modelando a resposta do sistema de extrusão da sua impressora dependendo da velocidade de fluxo volumétrico e aceleração em que está imprimindo. Internamente, ele gera um modelo ajustado que pode extrapolar o avanço de pressão necessário para qualquer velocidade de fluxo volumétrico e aceleração, que é então emitido para a impressora dependendo das condições de impressão atuais.\n" "Este recurso visa abordar essa limitação modelando a resposta do sistema de extrusão da sua impressora dependendo da velocidade de fluxo volumétrico e aceleração em que está imprimindo. Internamente, ele gera um modelo ajustado que pode extrapolar o pressure advance necessário para qualquer velocidade de fluxo volumétrico e aceleração, que é então emitido para a impressora dependendo das condições de impressão atuais.\n"
"\n" "\n"
"Quando habilitado, o valor de avanço de pressão acima é substituído. No entanto, um valor padrão razoável acima é fortemente recomendado para atuar como um fallback e para quando a ferramenta for trocada.\n" "Quando habilitado, o valor do pressure advance acima é substituído. No entanto, um valor padrão razoável acima é fortemente recomendado para atuar como um fallback e para quando a ferramenta for trocada.\n"
"\n" "\n"
msgid "Adaptive pressure advance measurements (beta)" msgid "Adaptive pressure advance measurements (beta)"
msgstr "Medidas de avanço de pressão adaptativo (beta)" msgstr "Medidas do pressure advance adaptativo (beta)"
#, no-c-format, no-boost-format #, no-c-format, no-boost-format
msgid "" msgid ""
@@ -12560,19 +12560,19 @@ msgid ""
"2. Take note of the optimal PA value for each volumetric flow speed and acceleration. You can find the flow number by selecting flow from the color scheme drop down and move the horizontal slider over the PA pattern lines. The number should be visible at the bottom of the page. The ideal PA value should be decreasing the higher the volumetric flow is. If it is not, confirm that your extruder is functioning correctly. The slower and with less acceleration you print, the larger the range of acceptable PA values. If no difference is visible, use the PA value from the faster test\n" "2. Take note of the optimal PA value for each volumetric flow speed and acceleration. You can find the flow number by selecting flow from the color scheme drop down and move the horizontal slider over the PA pattern lines. The number should be visible at the bottom of the page. The ideal PA value should be decreasing the higher the volumetric flow is. If it is not, confirm that your extruder is functioning correctly. The slower and with less acceleration you print, the larger the range of acceptable PA values. If no difference is visible, use the PA value from the faster test\n"
"3. Enter the triplets of PA values, Flow and Accelerations in the text box here and save your filament profile." "3. Enter the triplets of PA values, Flow and Accelerations in the text box here and save your filament profile."
msgstr "" msgstr ""
"Adicione conjuntos de valores de avanço de pressão (PA), as velocidades de fluxo volumétrico e acelerações em que foram medidos, separados por uma vírgula. Um conjunto de valores por linha. Por exemplo\n" "Adicione conjuntos de valores do pressure advance (PA), as velocidades de fluxo volumétrico e acelerações em que foram medidos, separados por uma vírgula. Um conjunto de valores por linha. Por exemplo\n"
"0,04,3,96,3000\n" "0,04,3,96,3000\n"
"0,033,3,96,10000\n" "0,033,3,96,10000\n"
"0,029,7,91,3000\n" "0,029,7,91,3000\n"
"0,026,7,91,10000\n" "0,026,7,91,10000\n"
"\n" "\n"
"Como calibrar:\n" "Como calibrar:\n"
"1. Execute o teste de avanço de pressão para pelo menos 3 velocidades por valor de aceleração. É recomendado que o teste seja executado para pelo menos a velocidade dos perímetros externos, a velocidade dos perímetros internos e a velocidade de impressão de recurso mais rápida em seu perfil (geralmente é o preenchimento esparso ou sólido). Em seguida, execute-os para as mesmas velocidades para as acelerações de impressão mais lentas e mais rápidas, e não mais rápido do que a aceleração máxima recomendada, conforme fornecido pelo modelador de entrada do Klipper\n" "1. Execute o teste de pressure advance para pelo menos 3 velocidades por valor de aceleração. É recomendado que o teste seja executado para pelo menos a velocidade dos perímetros externos, a velocidade dos perímetros internos e a velocidade de impressão de recurso mais rápida em seu perfil (geralmente é o preenchimento esparso ou sólido). Em seguida, execute-os para as mesmas velocidades para as acelerações de impressão mais lentas e mais rápidas, e não mais rápido do que a aceleração máxima recomendada, conforme fornecido pelo modelador de entrada do Klipper\n"
"2. Anote o valor de PA ideal para cada velocidade e aceleração de fluxo volumétrico. Você pode encontrar o número do fluxo selecionando fluxo no menu suspenso do esquema de cores e movendo o controle deslizante horizontal sobre as linhas do padrão de PA. O número deve estar visível na parte inferior da página. O valor de PA ideal deve diminuir quanto maior for o fluxo volumétrico. Se não estiver, confirme se sua extrusora está funcionando corretamente. Quanto mais lento e com menos aceleração você imprimir, maior será o intervalo de valores de PA aceitáveis. Se nenhuma diferença for visível, use o valor de PA do teste mais rápido\n" "2. Anote o valor de PA ideal para cada velocidade e aceleração de fluxo volumétrico. Você pode encontrar o número do fluxo selecionando fluxo no menu suspenso do esquema de cores e movendo o controle deslizante horizontal sobre as linhas do padrão de PA. O número deve estar visível na parte inferior da página. O valor de PA ideal deve diminuir quanto maior for o fluxo volumétrico. Se não estiver, confirme se sua extrusora está funcionando corretamente. Quanto mais lento e com menos aceleração você imprimir, maior será o intervalo de valores de PA aceitáveis. Se nenhuma diferença for visível, use o valor de PA do teste mais rápido\n"
"3. Insira os tripletos de valores de PA, Fluxo e Acelerações na caixa de texto aqui e salve seu perfil de filamento." "3. Insira os tripletos de valores de PA, Fluxo e Acelerações na caixa de texto aqui e salve seu perfil de filamento."
msgid "Enable adaptive pressure advance within features (beta)" msgid "Enable adaptive pressure advance within features (beta)"
msgstr "" msgstr "Habilitar pressure advance adaptativo nos recursos (beta)"
msgid "" msgid ""
"Enable adaptive PA whenever there are flow changes in a feature, such as line width changes in a corner or overhangs.\n" "Enable adaptive PA whenever there are flow changes in a feature, such as line width changes in a corner or overhangs.\n"
@@ -12583,7 +12583,7 @@ msgid ""
msgstr "" msgstr ""
msgid "Static pressure advance for bridges" msgid "Static pressure advance for bridges"
msgstr "" msgstr "Pressure advance estático para pontes"
msgid "" msgid ""
"Static pressure advance value for bridges. Set to 0 to apply the same pressure advance as \n" "Static pressure advance value for bridges. Set to 0 to apply the same pressure advance as \n"
@@ -12591,6 +12591,10 @@ msgid ""
"\n" "\n"
"A lower PA value when printing bridges helps reduce the appearance of slight under-extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this." "A lower PA value when printing bridges helps reduce the appearance of slight under-extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
msgstr "" msgstr ""
"Valor de pressure advance (avanço de pressão) estático para pontes. Defina como 0 para aplicar o mesmo pressure advance que \n"
"paredes equivalentes (usando configurações adaptativas, se habilitadas).\n"
"\n"
"Um valor de PA mais baixo ao imprimir pontes ajuda a reduzir a ocorrência de leve subextrusão logo após as pontes. Isso é causado pela queda de pressão no bico durante a impressão no ar, e um PA mais baixo ajuda a compensar esse efeito."
msgid "Default line width if other line widths are set to 0. If expressed as a %, it will be computed over the nozzle diameter." msgid "Default line width if other line widths are set to 0. If expressed as a %, it will be computed over the nozzle diameter."
msgstr "Largura de linha padrão se outras larguras de linha estiverem definidas como 0. Se expresso como %, será calculado sobre o diâmetro do bico." msgstr "Largura de linha padrão se outras larguras de linha estiverem definidas como 0. Se expresso como %, será calculado sobre o diâmetro do bico."
@@ -13335,11 +13339,11 @@ msgid ""
"Voronoi: Divides the surface into voronoi cells, and displaces each one by a random amount. Creates a patchwork texture.\n" "Voronoi: Divides the surface into voronoi cells, and displaces each one by a random amount. Creates a patchwork texture.\n"
"Ripple: Uniform ripple pattern that ripples left and right of the original path. Repeating pattern, woven appearance." "Ripple: Uniform ripple pattern that ripples left and right of the original path. Repeating pattern, woven appearance."
msgstr "" msgstr ""
"Tipo de ruído a ser usado para geração de textura difusa:\n" "Tipos de ruído a serem usados para geração de textura difusa:\n"
"Clássico: Ruído aleatório uniforme clássico;\n" "Clássico: Ruído aleatório uniforme clássico;\n"
"Perlin: Ruído Perlin, que dá uma textura mais consistente;\n" "Perlin: Ruído Perlin, que dá uma textura mais consistente;\n"
"Billow: Semelhante ao ruído Perlin, mas mais aglomerado;\n" "Billow: Semelhante ao ruído Perlin, mas mais aglomerado;\n"
"Multifractal estriado: Ruído estriado com características pontiagudas e irregulares. Cria texturas semelhantes a mármore;\n" "Multifractal Estriado: Ruído estriado com características pontiagudas e irregulares. Cria texturas semelhantes a mármore;\n"
"Voronoi: Divide a superfície em células Voronoi e desloca cada uma delas por uma quantidade aleatória. Cria uma textura de retalhos;\n" "Voronoi: Divide a superfície em células Voronoi e desloca cada uma delas por uma quantidade aleatória. Cria uma textura de retalhos;\n"
"Ondulação: Padrão de ondulação uniforme que se propaga para a esquerda e para a direita do caminho original. Padrão repetitivo, com aparência de tecido." "Ondulação: Padrão de ondulação uniforme que se propaga para a esquerda e para a direita do caminho original. Padrão repetitivo, com aparência de tecido."
@@ -13404,7 +13408,7 @@ msgstr ""
"O deslocamento é aplicado uma vez a cada número de camadas definido em Camadas entre deslocamento de ondulação, de modo que as camadas dentro do mesmo grupo sejam impressas de forma idêntica." "O deslocamento é aplicado uma vez a cada número de camadas definido em Camadas entre deslocamento de ondulação, de modo que as camadas dentro do mesmo grupo sejam impressas de forma idêntica."
msgid "Layers between ripple offset" msgid "Layers between ripple offset"
msgstr "Camadas entre o deslocamento de onda" msgstr "Camadas entre o deslocamento de ondulação"
msgid "" msgid ""
"Specifies how many consecutive layers share the same ripple phase before the offset is applied.\n" "Specifies how many consecutive layers share the same ripple phase before the offset is applied.\n"
@@ -14301,9 +14305,9 @@ msgstr ""
"\n" "\n"
"Um valor de 0 desativa o recurso.\n" "Um valor de 0 desativa o recurso.\n"
"\n" "\n"
"Para uma impressora de acionamento direto de alta velocidade e alto fluxo (como a Bambu lab ou Voron), esse valor geralmente não é necessário. No entanto, pode fornecer alguns benefícios marginais em certos casos em que as velocidades das características variam muito. Por exemplo, quando há desacelerações agressivas devido a saliências. Nesses casos, um valor alto de cerca de 300-350 mm³/s² é recomendado, pois isso permite apenas suavização suficiente para ajudar o avanço de pressão a alcançar uma transição de fluxo mais suave.\n" "Para uma impressora de acionamento direto de alta velocidade e alto fluxo (como a Bambu lab ou Voron), esse valor geralmente não é necessário. No entanto, pode fornecer alguns benefícios marginais em certos casos em que as velocidades das características variam muito. Por exemplo, quando há desacelerações agressivas devido a saliências. Nesses casos, um valor alto de cerca de 300-350 mm³/s² é recomendado, pois isso permite apenas suavização suficiente para ajudar o pressure advance a alcançar uma transição de fluxo mais suave.\n"
"\n" "\n"
"Para impressoras mais lentas sem avanço de pressão, o valor deve ser definido muito mais baixo. Um valor de 10-15 mm³/s² é um bom ponto de partida para extrusoras de acionamento direto e 5-10 mm³/s² para estilo Bowden.\n" "Para impressoras mais lentas sem pressure advance, o valor deve ser definido muito mais baixo. Um valor de 10-15 mm³/s² é um bom ponto de partida para extrusoras de acionamento direto e 5-10 mm³/s² para estilo Bowden.\n"
"\n" "\n"
"Este recurso é conhecido como Equalizador de Pressão no PrusaSlicer.\n" "Este recurso é conhecido como Equalizador de Pressão no PrusaSlicer.\n"
"\n" "\n"
@@ -14700,7 +14704,7 @@ msgid "Direct Drive"
msgstr "Acionamento Direto" msgstr "Acionamento Direto"
msgid "Bowden" msgid "Bowden"
msgstr "Tubo" msgstr "Bowden"
msgid "Enable filament dynamic map" msgid "Enable filament dynamic map"
msgstr "Habilitar mapa dinâmico de filamento" msgstr "Habilitar mapa dinâmico de filamento"
@@ -19661,17 +19665,17 @@ msgstr ""
#~ msgstr "O conteúdo da predefinição é muito grande para ser sincronizado com a nuvem (excede 1 MB). Reduza o tamanho da predefinição removendo configurações personalizadas ou use-o apenas localmente." #~ msgstr "O conteúdo da predefinição é muito grande para ser sincronizado com a nuvem (excede 1 MB). Reduza o tamanho da predefinição removendo configurações personalizadas ou use-o apenas localmente."
#~ msgid "Enable adaptive pressure advance for overhangs (beta)" #~ msgid "Enable adaptive pressure advance for overhangs (beta)"
#~ msgstr "Habilitar avanço de pressão adaptável para saliências (beta)" #~ msgstr "Habilitar pressure advance adaptativo para saliências (beta)"
#~ msgid "Pressure advance for bridges" #~ msgid "Pressure advance for bridges"
#~ msgstr "Avanço de pressão para pontes" #~ msgstr "Pressure advance para pontes"
#~ msgid "" #~ msgid ""
#~ "Pressure advance value for bridges. Set to 0 to disable.\n" #~ "Pressure advance value for bridges. Set to 0 to disable.\n"
#~ "\n" #~ "\n"
#~ "A lower PA value when printing bridges helps reduce the appearance of slight under extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this." #~ "A lower PA value when printing bridges helps reduce the appearance of slight under extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
#~ msgstr "" #~ msgstr ""
#~ "Valor de avanço de pressão para pontes. Defina como 0 para desabilitar.\n" #~ "Valor do pressure advance para pontes. Defina como 0 para desabilitar.\n"
#~ "\n" #~ "\n"
#~ "Um valor de PA mais baixo ao imprimir pontes ajuda a reduzir a aparência de leve subextrusão imediatamente após as pontes. Isso é causado pela queda de pressão no bico ao imprimir no ar e um PA mais baixo ajuda a neutralizar isso." #~ "Um valor de PA mais baixo ao imprimir pontes ajuda a reduzir a aparência de leve subextrusão imediatamente após as pontes. Isso é causado pela queda de pressão no bico ao imprimir no ar e um PA mais baixo ajuda a neutralizar isso."
@@ -19893,7 +19897,7 @@ msgstr ""
#~ msgstr "" #~ msgstr ""
#~ "Habilite esta opção para desacelerar a impressão em áreas onde os perímetros podem ter se curvado para cima. Por exemplo, uma desaceleração adicional será aplicada ao imprimir saliências em cantos afiados, como a parte frontal do casco Benchy, reduzindo a curvatura que se acumula por várias camadas.\n" #~ "Habilite esta opção para desacelerar a impressão em áreas onde os perímetros podem ter se curvado para cima. Por exemplo, uma desaceleração adicional será aplicada ao imprimir saliências em cantos afiados, como a parte frontal do casco Benchy, reduzindo a curvatura que se acumula por várias camadas.\n"
#~ "\n" #~ "\n"
#~ "Geralmente, é recomendável ter esta opção ativada, a menos que o resfriamento da impressora seja potente o suficiente ou a velocidade de impressão lenta o suficiente para que a curvatura do perímetro não aconteça. Se estiver imprimindo com uma alta velocidade de perímetro externo, este parâmetro pode introduzir pequenos artefatos ao desacelerar devido à grande variação nas velocidades de impressão. Se você notar artefatos, certifique-se de que seu avanço de pressão esteja ajustado corretamente.\n" #~ "Geralmente, é recomendável ter esta opção ativada, a menos que o resfriamento da impressora seja potente o suficiente ou a velocidade de impressão lenta o suficiente para que a curvatura do perímetro não aconteça. Se estiver imprimindo com uma alta velocidade de perímetro externo, este parâmetro pode introduzir pequenos artefatos ao desacelerar devido à grande variação nas velocidades de impressão. Se você notar artefatos, certifique-se de que seu pressure advance esteja ajustado corretamente.\n"
#~ "\n" #~ "\n"
#~ "Observação: quando esta opção estiver habilitada, os perímetros de saliência são tratados como saliências, o que significa que a velocidade de saliência é aplicada mesmo se o perímetro de saliência for parte de uma ponte. Por exemplo, quando os perímetros estiverem 100% salientes, sem nenhuma parede apoiando-os por baixo, a velocidade de saliência de 100% será aplicada." #~ "Observação: quando esta opção estiver habilitada, os perímetros de saliência são tratados como saliências, o que significa que a velocidade de saliência é aplicada mesmo se o perímetro de saliência for parte de uma ponte. Por exemplo, quando os perímetros estiverem 100% salientes, sem nenhuma parede apoiando-os por baixo, a velocidade de saliência de 100% será aplicada."
@@ -20351,10 +20355,10 @@ msgstr ""
#~ msgstr "Ok" #~ msgstr "Ok"
#~ msgid "Pressure Advance Guide" #~ msgid "Pressure Advance Guide"
#~ msgstr "Guia de Avanço de Pressão" #~ msgstr "Guia de Pressure Advance"
#~ msgid "Adaptive Pressure Advance Guide" #~ msgid "Adaptive Pressure Advance Guide"
#~ msgstr "Guia de Avanço de Pressão Adaptativo" #~ msgstr "Guia de Pressure Advance Adaptativo"
#~ msgid "Wiki Guide: Temperature Calibration" #~ msgid "Wiki Guide: Temperature Calibration"
#~ msgstr "Guia Wiki: Calibração de Temperatura" #~ msgstr "Guia Wiki: Calibração de Temperatura"
File diff suppressed because it is too large Load Diff
Binary file not shown.
Binary file not shown.
+6 -4
View File
@@ -1711,11 +1711,13 @@ int CLI::run(int argc, char **argv)
const Vec3d &instance_offset = model_instance->get_offset(); const Vec3d &instance_offset = model_instance->get_offset();
BOOST_LOG_TRIVIAL(info) << boost::format("instance %1% transform {%2%,%3%,%4%} at %5%:%6%")% model_object->name % instance_offset.x() % instance_offset.y() %instance_offset.z() % __FUNCTION__ % __LINE__<< std::endl; BOOST_LOG_TRIVIAL(info) << boost::format("instance %1% transform {%2%,%3%,%4%} at %5%:%6%")% model_object->name % instance_offset.x() % instance_offset.y() %instance_offset.z() % __FUNCTION__ % __LINE__<< std::endl;
}*/ }*/
current_printer_name = config.option<ConfigOptionString>("printer_settings_id")->value; // Read defensively — a 3mf missing preset ids (e.g. one produced
current_process_name = config.option<ConfigOptionString>("print_settings_id")->value; // by a non-GUI writer) would otherwise crash here on the deref.
if (const auto *o = config.option<ConfigOptionString>("printer_settings_id")) current_printer_name = o->value;
if (const auto *o = config.option<ConfigOptionString>("print_settings_id")) current_process_name = o->value;
current_printer_model = config.option<ConfigOptionString>("printer_model", true)->value; current_printer_model = config.option<ConfigOptionString>("printer_model", true)->value;
current_filaments_name = config.option<ConfigOptionStrings>("filament_settings_id")->values; if (const auto *o = config.option<ConfigOptionStrings>("filament_settings_id")) current_filaments_name = o->values;
current_extruder_count = config.option<ConfigOptionFloats>("nozzle_diameter")->values.size(); if (const auto *o = config.option<ConfigOptionFloats>("nozzle_diameter")) current_extruder_count = o->values.size();
current_printer_variant_count = config.option<ConfigOptionStrings>("printer_extruder_variant", true)->values.size(); current_printer_variant_count = config.option<ConfigOptionStrings>("printer_extruder_variant", true)->values.size();
current_print_variant_count = config.option<ConfigOptionStrings>("print_extruder_variant", true)->values.size(); current_print_variant_count = config.option<ConfigOptionStrings>("print_extruder_variant", true)->values.size();
current_is_multi_extruder = current_extruder_count > 1; current_is_multi_extruder = current_extruder_count > 1;
+8 -10
View File
@@ -890,12 +890,11 @@ std::string Preset::get_printer_type(PresetBundle *preset_bundle)
{ {
if (preset_bundle) { if (preset_bundle) {
auto config = &preset_bundle->printers.get_edited_preset().config; auto config = &preset_bundle->printers.get_edited_preset().config;
std::string vendor_name; const auto& printer_model = config->opt_string("printer_model");
for (auto vendor_profile : preset_bundle->vendors) { for (const auto& vendor_profile : preset_bundle->vendors) {
for (auto vendor_model : vendor_profile.second.models) for (const auto& vendor_model : vendor_profile.second.models)
if (vendor_model.name == config->opt_string("printer_model")) if (vendor_model.name == printer_model)
{ {
vendor_name = vendor_profile.first;
return vendor_model.model_id; return vendor_model.model_id;
} }
} }
@@ -907,11 +906,10 @@ std::string Preset::get_current_printer_type(PresetBundle *preset_bundle)
{ {
if (preset_bundle) { if (preset_bundle) {
auto config = &(this->config); auto config = &(this->config);
std::string vendor_name; const auto& printer_model = config->opt_string("printer_model");
for (auto vendor_profile : preset_bundle->vendors) { for (const auto& vendor_profile : preset_bundle->vendors) {
for (auto vendor_model : vendor_profile.second.models) for (const auto& vendor_model : vendor_profile.second.models)
if (vendor_model.name == config->opt_string("printer_model")) { if (vendor_model.name == printer_model) {
vendor_name = vendor_profile.first;
return vendor_model.model_id; return vendor_model.model_id;
} }
} }
+1 -1
View File
@@ -301,7 +301,7 @@ void AMSMaterialsSetting::create_panel_kn(wxWindow* parent)
if (language.find("zh") == 0) if (language.find("zh") == 0)
region = "zh"; region = "zh";
wxString link_url = wxString::Format("https://wiki.bambulab.com/%s/software/bambu-studio/calibration_pa", region); wxString link_url = wxString::Format("https://wiki.bambulab.com/%s/software/bambu-studio/calibration_pa", region);
m_wiki_ctrl = new HyperLink(parent, "Wiki Guide", link_url); m_wiki_ctrl = new HyperLink(parent, _L("Wiki Guide"), link_url);
cali_title_sizer->Add(m_ratio_text, 0, wxALIGN_CENTER_VERTICAL); cali_title_sizer->Add(m_ratio_text, 0, wxALIGN_CENTER_VERTICAL);
cali_title_sizer->Add(m_wiki_ctrl, 0, wxALIGN_CENTER_VERTICAL); cali_title_sizer->Add(m_wiki_ctrl, 0, wxALIGN_CENTER_VERTICAL);
+2 -2
View File
@@ -590,7 +590,7 @@ PingCodeBindDialog::~PingCodeBindDialog() {
sizer_error_code->Add(m_st_txt_error_code, 0, wxALL, 0); sizer_error_code->Add(m_st_txt_error_code, 0, wxALL, 0);
auto st_title_error_desc = new wxStaticText(m_sw_bind_failed_info, wxID_ANY, wxT("Error desc")); auto st_title_error_desc = new wxStaticText(m_sw_bind_failed_info, wxID_ANY, _L("Error desc"));
auto st_title_error_desc_doc = new wxStaticText(m_sw_bind_failed_info, wxID_ANY, ": "); auto st_title_error_desc_doc = new wxStaticText(m_sw_bind_failed_info, wxID_ANY, ": ");
m_st_txt_error_desc = new Label(m_sw_bind_failed_info, wxEmptyString); m_st_txt_error_desc = new Label(m_sw_bind_failed_info, wxEmptyString);
st_title_error_desc->SetForegroundColour(0x909090); st_title_error_desc->SetForegroundColour(0x909090);
@@ -607,7 +607,7 @@ PingCodeBindDialog::~PingCodeBindDialog() {
sizer_error_desc->Add(st_title_error_desc_doc, 0, wxALL, 0); sizer_error_desc->Add(st_title_error_desc_doc, 0, wxALL, 0);
sizer_error_desc->Add(m_st_txt_error_desc, 0, wxALL, 0); sizer_error_desc->Add(m_st_txt_error_desc, 0, wxALL, 0);
auto st_title_extra_info = new wxStaticText(m_sw_bind_failed_info, wxID_ANY, wxT("Extra info")); auto st_title_extra_info = new wxStaticText(m_sw_bind_failed_info, wxID_ANY, _L("Extra info"));
auto st_title_extra_info_doc = new wxStaticText(m_sw_bind_failed_info, wxID_ANY, ": "); auto st_title_extra_info_doc = new wxStaticText(m_sw_bind_failed_info, wxID_ANY, ": ");
m_st_txt_extra_info = new Label(m_sw_bind_failed_info, wxEmptyString); m_st_txt_extra_info = new Label(m_sw_bind_failed_info, wxEmptyString);
st_title_extra_info->SetForegroundColour(0x909090); st_title_extra_info->SetForegroundColour(0x909090);
+3
View File
@@ -10294,6 +10294,9 @@ void GLCanvas3D::_set_warning_notification_if_needed(EWarning warning)
void GLCanvas3D::_set_warning_notification(EWarning warning, bool state) void GLCanvas3D::_set_warning_notification(EWarning warning, bool state)
{ {
// Skip on shutdown: Plater's pImpl is already freed, so get_notification_manager() would use-after-free.
if (wxGetApp().is_closing())
return;
using NotificationLevel = NotificationManager::NotificationLevel; using NotificationLevel = NotificationManager::NotificationLevel;
enum ErrorType{ enum ErrorType{
PLATER_WARNING, PLATER_WARNING,
+21 -5
View File
@@ -3633,8 +3633,24 @@ void GUI_App::switch_printer_agent()
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": printer agent switched to " << effective_agent_id; BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": printer agent switched to " << effective_agent_id;
// Auto-switch MachineObject // Auto-switch MachineObject (new agent has empty device_info, so always re-select)
select_machine(effective_agent_id); select_machine(effective_agent_id);
} else if (effective_agent_id != BBL_PRINTER_AGENT_ID) {
// Orca: the agent type is unchanged (e.g. switching between two Moonraker/Klipper
// printer presets), so the selected machine and the agent's cached device_info still
// point at the previously active printer preset. Re-select the machine when the new
// preset targets a different host, otherwise filament sync keeps hitting the old
// printer. (#12506)
if (m_device_manager && preset_bundle) {
const DynamicPrintConfig& cfg = preset_bundle->printers.get_edited_preset().config;
const std::string print_host = cfg.opt_string("print_host");
if (!print_host.empty()) {
const std::string dev_id = MachineObject::dev_id_from_address(print_host, cfg.opt_string("printhost_port"));
MachineObject* sel = m_device_manager->get_selected_machine();
if (!sel || sel->get_dev_id() != dev_id)
select_machine(effective_agent_id);
}
}
} }
} }
@@ -7144,7 +7160,7 @@ void GUI_App::start_sync_user_preset(bool with_progress_dlg)
.plater() .plater()
->get_notification_manager() ->get_notification_manager()
->push_notification(NotificationType::CustomNotification, ->push_notification(NotificationType::CustomNotification,
NotificationManager::NotificationLevel::RegularNotificationLevel, "There is an update available. Open the preset bundle dialog to update it."); NotificationManager::NotificationLevel::RegularNotificationLevel, _u8L("There is an update available. Open the preset bundle dialog to update it."));
update_available = false; update_available = false;
} }
@@ -7722,14 +7738,14 @@ bool GUI_App::load_language(wxString language, bool initial)
if (!wxLocale::IsAvailable(locale_language_info->Language)) { if (!wxLocale::IsAvailable(locale_language_info->Language)) {
// Loading the language dictionary failed. // Loading the language dictionary failed.
wxString message = "Switching Orca Slicer to language " + requested_language_code + " failed."; wxString message = wxString::Format(_L("Switching Orca Slicer to language %s failed."), requested_language_code);
#if !defined(_WIN32) && !defined(__APPLE__) #if !defined(_WIN32) && !defined(__APPLE__)
// likely some linux system // likely some linux system
message += "\nYou may need to reconfigure the missing locales, likely by running the \"locale-gen\" and \"dpkg-reconfigure locales\" commands.\n"; message += _L("\nYou may need to reconfigure the missing locales, likely by running the \"locale-gen\" and \"dpkg-reconfigure locales\" commands.\n");
#endif #endif
if (initial) if (initial)
message + "\n\nApplication will close."; message + "\n\nApplication will close.";
wxMessageBox(message, "Orca Slicer - Switching language failed", wxOK | wxICON_ERROR); wxMessageBox(message, _L("Orca Slicer - Switching language failed"), wxOK | wxICON_ERROR);
if (initial) if (initial)
std::exit(EXIT_FAILURE); std::exit(EXIT_FAILURE);
else else
+29 -29
View File
@@ -1155,7 +1155,7 @@ void ObjectList::update_filament_in_config(const wxDataViewItem& item)
m_config = config; m_config = config;
take_snapshot("Change Filament"); take_snapshot(_u8L("Change Filament"));
const int extruder = m_objects_model->GetExtruderNumber(item); const int extruder = m_objects_model->GetExtruderNumber(item);
m_config->set_key_value("extruder", new ConfigOptionInt(extruder)); m_config->set_key_value("extruder", new ConfigOptionInt(extruder));
@@ -1193,7 +1193,7 @@ void ObjectList::update_name_in_model(const wxDataViewItem& item) const
if (obj_idx < 0) return; if (obj_idx < 0) return;
const int volume_id = m_objects_model->GetVolumeIdByItem(item); const int volume_id = m_objects_model->GetVolumeIdByItem(item);
take_snapshot(volume_id < 0 ? "Rename Object" : "Rename Part"); take_snapshot(volume_id < 0 ? _u8L("Rename Object") : _u8L("Rename Part"));
ModelObject* obj = object(obj_idx); ModelObject* obj = object(obj_idx);
if (m_objects_model->GetItemType(item) & itObject) { if (m_objects_model->GetItemType(item) & itObject) {
@@ -1361,7 +1361,7 @@ void ObjectList::paste_settings_into_list()
{ {
wxDataViewItemArray sels; wxDataViewItemArray sels;
GetSelections(sels); GetSelections(sels);
take_snapshot("Paste settings"); take_snapshot(_u8L("Paste settings"));
std::unique_ptr<t_config_option_keys> global_keys; // need copy from global std::unique_ptr<t_config_option_keys> global_keys; // need copy from global
@@ -1579,7 +1579,7 @@ void ObjectList::list_manipulation(const wxPoint& mouse_pos, bool evt_context_me
int obj_idx, vol_idx; int obj_idx, vol_idx;
get_selected_item_indexes(obj_idx, vol_idx, item); get_selected_item_indexes(obj_idx, vol_idx, item);
if (obj_idx != -1) { if (obj_idx != -1) {
Plater::TakeSnapshot(plater, "Shift objects to bed"); Plater::TakeSnapshot(plater, _u8L("Shift objects to bed"));
(*m_objects)[obj_idx]->ensure_on_bed(); (*m_objects)[obj_idx]->ensure_on_bed();
cnv->reload_scene(true, true); cnv->reload_scene(true, true);
update_info_items(obj_idx); update_info_items(obj_idx);
@@ -2002,7 +2002,7 @@ void ObjectList::OnDrop(wxDataViewEvent &event)
} }
//#if 1 //#if 1
take_snapshot("Object order changed"); take_snapshot(_u8L("Object order changed"));
if(m_dragged_data.type() & itObject){ if(m_dragged_data.type() & itObject){
int delta = dest_obj_id < src_obj_id ? -1 : 1; int delta = dest_obj_id < src_obj_id ? -1 : 1;
@@ -2066,9 +2066,9 @@ void ObjectList::add_category_to_settings_from_selection(const std::vector< std:
assert(m_config); assert(m_config);
auto opt_keys = m_config->keys(); auto opt_keys = m_config->keys();
const std::string snapshot_text = item_type & itLayer ? "Layer setting added" : const std::string snapshot_text = item_type & itLayer ? _u8L("Layer setting added") :
item_type & itVolume ? "Part setting added" : item_type & itVolume ? _u8L("Part setting added") :
"Object setting added"; _u8L("Object setting added");
take_snapshot(snapshot_text); take_snapshot(snapshot_text);
const DynamicPrintConfig& from_config = printer_technology() == ptFFF ? const DynamicPrintConfig& from_config = printer_technology() == ptFFF ?
@@ -2107,9 +2107,9 @@ void ObjectList::add_category_to_settings_from_frequent(const std::vector<std::s
assert(m_config); assert(m_config);
auto opt_keys = m_config->keys(); auto opt_keys = m_config->keys();
const std::string snapshot_text = item_type & itLayer ? "Height range settings added" : const std::string snapshot_text = item_type & itLayer ? _u8L("Height range settings added") :
item_type & itVolume ? "Part settings added" : item_type & itVolume ? _u8L("Part settings added") :
"Object settings added"; _u8L("Object settings added");
take_snapshot(snapshot_text); take_snapshot(snapshot_text);
const DynamicPrintConfig& from_config = wxGetApp().preset_bundle->prints.get_edited_preset().config; const DynamicPrintConfig& from_config = wxGetApp().preset_bundle->prints.get_edited_preset().config;
@@ -2177,7 +2177,7 @@ void ObjectList::load_subobject(ModelVolumeType type, bool from_galery/* = false
if (input_files.IsEmpty()) if (input_files.IsEmpty())
return; return;
take_snapshot((type == ModelVolumeType::MODEL_PART) ? "Load Part" : "Load Modifier"); take_snapshot((type == ModelVolumeType::MODEL_PART) ? _u8L("Load Part") : _u8L("Load Modifier"));
std::vector<ModelVolume*> volumes; std::vector<ModelVolume*> volumes;
// ! ysFIXME - delete commented code after testing and rename "load_modifier" to something common // ! ysFIXME - delete commented code after testing and rename "load_modifier" to something common
@@ -2464,7 +2464,7 @@ void ObjectList::load_generic_subobject(const std::string& type_name, const Mode
if (instance_idx == -1) if (instance_idx == -1)
return; return;
take_snapshot("Add primitive"); take_snapshot(_u8L("Add primitive"));
// Selected object // Selected object
ModelObject &model_object = *(*m_objects)[obj_idx]; ModelObject &model_object = *(*m_objects)[obj_idx];
@@ -2556,7 +2556,7 @@ void ObjectList::load_shape_object(const std::string &type_name)
if (obj_idx < 0) if (obj_idx < 0)
return; return;
Plater::TakeSnapshot snapshot(wxGetApp().plater(), "Add Primitive"); Plater::TakeSnapshot snapshot(wxGetApp().plater(), _u8L("Add Primitive"));
// Create mesh // Create mesh
BoundingBoxf3 bb; BoundingBoxf3 bb;
@@ -2726,7 +2726,7 @@ void ObjectList::del_settings_from_config(const wxDataViewItem& parent_item)
(is_layer_settings && opt_cnt == 2 && m_config->has("extruder") && m_config->has("layer_height"))) (is_layer_settings && opt_cnt == 2 && m_config->has("extruder") && m_config->has("layer_height")))
return; return;
take_snapshot("Delete Settings"); take_snapshot(_u8L("Delete Settings"));
int extruder = m_config->has("extruder") ? m_config->extruder() : -1; int extruder = m_config->has("extruder") ? m_config->extruder() : -1;
@@ -2767,7 +2767,7 @@ void ObjectList::del_layer_from_object(const int obj_idx, const t_layer_height_r
if (del_range == object(obj_idx)->layer_config_ranges.end()) if (del_range == object(obj_idx)->layer_config_ranges.end())
return; return;
take_snapshot("Remove height range"); take_snapshot(_u8L("Remove height range"));
object(obj_idx)->layer_config_ranges.erase(del_range); object(obj_idx)->layer_config_ranges.erase(del_range);
@@ -2840,7 +2840,7 @@ bool ObjectList::del_subobject_from_object(const int obj_idx, const int idx, con
return false; return false;
} }
take_snapshot("Delete part"); take_snapshot(_u8L("Delete part"));
object->delete_volume(idx); object->delete_volume(idx);
@@ -2905,7 +2905,7 @@ void ObjectList::split()
return; return;
} }
take_snapshot("Split to parts"); take_snapshot(_u8L("Split to parts"));
volume->split(filament_cnt, wxGetApp().app_config->get_bool("keep_painting")); volume->split(filament_cnt, wxGetApp().app_config->get_bool("keep_painting"));
@@ -3038,7 +3038,7 @@ void ObjectList::merge(bool to_multipart_object)
GetSelections(sels); GetSelections(sels);
assert(!sels.IsEmpty()); assert(!sels.IsEmpty());
Plater::TakeSnapshot snapshot(wxGetApp().plater(), "Assemble"); Plater::TakeSnapshot snapshot(wxGetApp().plater(), _u8L("Assemble"));
get_object_idxs(obj_idxs, sels); get_object_idxs(obj_idxs, sels);
@@ -3186,7 +3186,7 @@ void ObjectList::merge(bool to_multipart_object)
if (obj_idx == -1) if (obj_idx == -1)
return; return;
Plater::TakeSnapshot snapshot(wxGetApp().plater(), "Merge parts to an object"); Plater::TakeSnapshot snapshot(wxGetApp().plater(), _u8L("Merge parts to an object"));
ModelObject* model_object = (*m_objects)[obj_idx]; ModelObject* model_object = (*m_objects)[obj_idx];
model_object->merge(); model_object->merge();
@@ -3253,7 +3253,7 @@ void ObjectList::layers_editing()
// set some default value // set some default value
if (ranges.empty()) { if (ranges.empty()) {
// BBS: remove snapshot name "Add layers" // BBS: remove snapshot name "Add layers"
take_snapshot("Add layers"); take_snapshot(_u8L("Add layers"));
ranges[{ 0.0f, 2.0f }].assign_config(get_default_layer_config(obj_idx)); ranges[{ 0.0f, 2.0f }].assign_config(get_default_layer_config(obj_idx));
} }
@@ -4244,7 +4244,7 @@ void ObjectList::delete_from_model_and_list(const ItemType type, const int obj_i
if (!(type&(itObject|itVolume|itInstance))) if (!(type&(itObject|itVolume|itInstance)))
return; return;
take_snapshot("Delete selected"); take_snapshot(_u8L("Delete selected"));
if (type&itObject) { if (type&itObject) {
bool was_cut = object(obj_idx)->is_cut(); bool was_cut = object(obj_idx)->is_cut();
@@ -4477,7 +4477,7 @@ void ObjectList::remove()
UnselectAll(); UnselectAll();
update_selection(sels, sels_mode, m_objects_model); update_selection(sels, sels_mode, m_objects_model);
Plater::TakeSnapshot snapshot = Plater::TakeSnapshot(wxGetApp().plater(), "Delete selected"); Plater::TakeSnapshot snapshot = Plater::TakeSnapshot(wxGetApp().plater(), _u8L("Delete selected"));
for (auto& item : sels) for (auto& item : sels)
{ {
@@ -5535,7 +5535,7 @@ void ObjectList::change_part_type()
return; return;
} }
take_snapshot("Change part type"); take_snapshot(_u8L("Change part type"));
volume->set_type(new_type); volume->set_type(new_type);
wxDataViewItemArray sel = reorder_volumes_and_get_selection(obj_idx, [volume](const ModelVolume* vol) { return vol == volume; }); wxDataViewItemArray sel = reorder_volumes_and_get_selection(obj_idx, [volume](const ModelVolume* vol) { return vol == volume; });
@@ -5809,7 +5809,7 @@ void ObjectList::set_volume_type(ModelVolumeType new_type)
} }
} }
take_snapshot("Change part type"); take_snapshot(_u8L("Change part type"));
std::set<const ModelVolume*> changed_volumes; std::set<const ModelVolume*> changed_volumes;
std::set<int> touched_objects; std::set<int> touched_objects;
@@ -6043,7 +6043,7 @@ void ObjectList::split_instances()
if (obj_idx == -1) if (obj_idx == -1)
return; return;
Plater::TakeSnapshot snapshot(wxGetApp().plater(), "Instances to Separated Objects"); Plater::TakeSnapshot snapshot(wxGetApp().plater(), _u8L("Instances to Separated Objects"));
if (selection.is_single_full_object()) if (selection.is_single_full_object())
{ {
@@ -6174,7 +6174,7 @@ void ObjectList::fix_through_cgal()
return true; return true;
}; };
Plater::TakeSnapshot snapshot(plater, "Repairing model object"); Plater::TakeSnapshot snapshot(plater, _u8L("Repairing model object"));
// Open a progress dialog. // Open a progress dialog.
ProgressDialog progress_dlg(_L("Repairing model object"), "", 100, find_toplevel_parent(plater), ProgressDialog progress_dlg(_L("Repairing model object"), "", 100, find_toplevel_parent(plater),
@@ -6505,7 +6505,7 @@ void ObjectList::OnEditingStarted(wxDataViewEvent &event)
else if (col == colSinking) { else if (col == colSinking) {
Plater * plater = wxGetApp().plater(); Plater * plater = wxGetApp().plater();
GLCanvas3D *cnv = plater->canvas3D(); GLCanvas3D *cnv = plater->canvas3D();
Plater::TakeSnapshot(plater, "Shift objects to bed"); Plater::TakeSnapshot(plater, _u8L("Shift objects to bed"));
int obj_idx, vol_idx; int obj_idx, vol_idx;
get_selected_item_indexes(obj_idx, vol_idx, item); get_selected_item_indexes(obj_idx, vol_idx, item);
(*m_objects)[obj_idx]->ensure_on_bed(); (*m_objects)[obj_idx]->ensure_on_bed();
@@ -6592,7 +6592,7 @@ void ObjectList::set_extruder_for_selected_items(const int extruder)
if (sels.empty()) if (sels.empty())
return; return;
take_snapshot("Change Filaments"); take_snapshot(_u8L("Change Filaments"));
for (const wxDataViewItem& sel_item : sels) for (const wxDataViewItem& sel_item : sels)
{ {
+3 -3
View File
@@ -2975,7 +2975,7 @@ void GLGizmoCut3D::render_cut_plane_input_window(CutConnectors &connectors, floa
ImGui::SameLine(); ImGui::SameLine();
m_imgui->disabled_begin(is_cut_plane_init && !has_connectors); m_imgui->disabled_begin(is_cut_plane_init && !has_connectors);
if (m_imgui->button(_L("Reset"), _L("Reset cutting plane and remove connectors"))) { if (m_imgui->button(_L("Reset"), _L("Reset cutting plane and remove connectors"))) {
Plater::TakeSnapshot snapshot(wxGetApp().plater(), "Reset Cut", UndoRedo::SnapshotType::GizmoAction); Plater::TakeSnapshot snapshot(wxGetApp().plater(), _u8L("Reset Cut"), UndoRedo::SnapshotType::GizmoAction);
reset_cut_plane(); reset_cut_plane();
reset_connectors(); reset_connectors();
} }
@@ -3500,10 +3500,10 @@ static void check_objects_after_cut(const ModelObjectPtrs& objects)
wxString names = from_u8(err_objects_names[0]); wxString names = from_u8(err_objects_names[0]);
for (size_t i = 1; i < err_objects_names.size(); i++) for (size_t i = 1; i < err_objects_names.size(); i++)
names += ", " + from_u8(err_objects_names[i]); names += ", " + from_u8(err_objects_names[i]);
WarningDialog(wxGetApp().plater(), format_wxstr("Objects(%1%) have duplicated connectors. " WarningDialog(wxGetApp().plater(), format_wxstr(_L("Objects(%1%) have duplicated connectors. "
"Some connectors may be missing in slicing result.\n" "Some connectors may be missing in slicing result.\n"
"Please report to PrusaSlicer team in which scenario this issue happened.\n" "Please report to PrusaSlicer team in which scenario this issue happened.\n"
"Thank you.", names)).ShowModal(); "Thank you."), names)).ShowModal();
} }
void synchronize_model_after_cut(Model& model, const CutObjectBase& cut_id) void synchronize_model_after_cut(Model& model, const CutObjectBase& cut_id)
+1 -1
View File
@@ -3735,7 +3735,7 @@ void MainFrame::load_config_file()
// return; // return;
wxFileDialog dlg(this, _L("Select profile to load:"), wxFileDialog dlg(this, _L("Select profile to load:"),
!m_last_config.IsEmpty() ? get_dir_name(m_last_config) : wxGetApp().app_config->get_last_dir(), !m_last_config.IsEmpty() ? get_dir_name(m_last_config) : wxGetApp().app_config->get_last_dir(),
"config.json", "Config files (*.json;*.zip;*.orca_printer;*.orca_bundle;*.orca_filament)|*.json;*.zip;*.orca_printer;*.orca_bundle;*.orca_filament", wxFD_OPEN | wxFD_MULTIPLE | wxFD_FILE_MUST_EXIST); "config.json", _L("Config files (*.json;*.zip;*.orca_printer;*.orca_bundle;*.orca_filament)|*.json;*.zip;*.orca_printer;*.orca_bundle;*.orca_filament"), wxFD_OPEN | wxFD_MULTIPLE | wxFD_FILE_MUST_EXIST);
wxArrayString files; wxArrayString files;
if (dlg.ShowModal() != wxID_OK) if (dlg.ShowModal() != wxID_OK)
return; return;
+16 -13
View File
@@ -7624,7 +7624,7 @@ std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_
// BBS // BBS
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" << __LINE__ << " " << boost::format("import 3mf IMPORT_LOAD_MODEL_OBJECTS \n"); BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" << __LINE__ << " " << boost::format("import 3mf IMPORT_LOAD_MODEL_OBJECTS \n");
wxString msg = wxString::Format("Loading file: %s", from_path(real_filename)); wxString msg = wxString::Format(_L("Loading file: %s"), from_path(real_filename));
model_idx++; model_idx++;
dlg_cont = dlg.Update(progress_percent, msg); dlg_cont = dlg.Update(progress_percent, msg);
if (!dlg_cont) { if (!dlg_cont) {
@@ -8324,7 +8324,7 @@ bool Plater::priv::delete_object_from_model(size_t obj_idx, bool refresh_immedia
return false; return false;
} }
std::string snapshot_label = "Delete Object"; std::string snapshot_label = _u8L("Delete Object");
if (!obj->name.empty()) if (!obj->name.empty())
snapshot_label += ": " + obj->name; snapshot_label += ": " + obj->name;
Plater::TakeSnapshot snapshot(q, snapshot_label); Plater::TakeSnapshot snapshot(q, snapshot_label);
@@ -8348,7 +8348,7 @@ bool Plater::priv::delete_object_from_model(size_t obj_idx, bool refresh_immedia
void Plater::priv::delete_all_objects_from_model() void Plater::priv::delete_all_objects_from_model()
{ {
Plater::TakeSnapshot snapshot(q, "Delete All Objects"); Plater::TakeSnapshot snapshot(q, _u8L("Delete All Objects"));
if (view3D->is_layers_editing_enabled()) if (view3D->is_layers_editing_enabled())
view3D->enable_layers_editing(false); view3D->enable_layers_editing(false);
@@ -8379,7 +8379,7 @@ void Plater::priv::delete_all_objects_from_model()
void Plater::priv::reset(bool apply_presets_change) void Plater::priv::reset(bool apply_presets_change)
{ {
Plater::TakeSnapshot snapshot(q, "Reset Project", UndoRedo::SnapshotType::ProjectSeparator); Plater::TakeSnapshot snapshot(q, _u8L("Reset Project"), UndoRedo::SnapshotType::ProjectSeparator);
clear_warnings(); clear_warnings();
@@ -8528,7 +8528,7 @@ void Plater::priv::split_object(int obj_idx, bool auto_drop /* = true */)
// NotificationManager::NotificationLevel::PrintInfoNotificationLevel, // NotificationManager::NotificationLevel::PrintInfoNotificationLevel,
// _u8L("All non-solid parts (modifiers) were deleted")); // _u8L("All non-solid parts (modifiers) were deleted"));
Plater::TakeSnapshot snapshot(q, "Split to Objects"); Plater::TakeSnapshot snapshot(q, _u8L("Split to Objects"));
auto is_atleast_one_floating = [new_objects]() { auto is_atleast_one_floating = [new_objects]() {
for (ModelObject* new_object : new_objects) { for (ModelObject* new_object : new_objects) {
@@ -9342,7 +9342,7 @@ void Plater::priv::replace_with_stl()
return; return;
} }
if (!replace_volume_with_stl(object_idx, volume_idx, out_path, "Replace with 3D file")) if (!replace_volume_with_stl(object_idx, volume_idx, out_path, _u8L("Replace with 3D file")))
return; return;
// update 3D scene // update 3D scene
@@ -9459,7 +9459,7 @@ void Plater::priv::replace_all_with_stl()
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " replacing volume : " << input_path << " with " << new_path; BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " replacing volume : " << input_path << " with " << new_path;
if (!replace_volume_with_stl(object_idx, volume_idx, new_path, "Replace with 3D file")) { if (!replace_volume_with_stl(object_idx, volume_idx, new_path, _u8L("Replace with 3D file"))) {
status += boost::str(boost::format(_L("✖ Skipped %1%: failed to replace.\n").ToStdString()) % volume_name); status += boost::str(boost::format(_L("✖ Skipped %1%: failed to replace.\n").ToStdString()) % volume_name);
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " cannot replace volume : failed to replace with " << new_path; BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " cannot replace volume : failed to replace with " << new_path;
continue; continue;
@@ -9519,7 +9519,7 @@ void Plater::priv::reload_from_disk()
return (v1.first == v2.first) && (v1.second == v2.second); return (v1.first == v2.first) && (v1.second == v2.second);
}), selected_volumes.end()); }), selected_volumes.end());
#else #else
Plater::TakeSnapshot snapshot(q, "Reload from disk"); Plater::TakeSnapshot snapshot(q, _u8L("Reload from disk"));
const Selection& selection = get_selection(); const Selection& selection = get_selection();
@@ -9668,7 +9668,7 @@ void Plater::priv::reload_from_disk()
replace_paths.erase(std::unique(replace_paths.begin(), replace_paths.end()), replace_paths.end()); replace_paths.erase(std::unique(replace_paths.begin(), replace_paths.end()), replace_paths.end());
#if ENABLE_RELOAD_FROM_DISK_REWORK #if ENABLE_RELOAD_FROM_DISK_REWORK
Plater::TakeSnapshot snapshot(q, "Reload from disk"); Plater::TakeSnapshot snapshot(q, _u8L("Reload from disk"));
#endif // ENABLE_RELOAD_FROM_DISK_REWORK #endif // ENABLE_RELOAD_FROM_DISK_REWORK
std::vector<wxString> fail_list; std::vector<wxString> fail_list;
@@ -9961,7 +9961,7 @@ void Plater::priv::reload_all_from_disk()
if (model.objects.empty()) if (model.objects.empty())
return; return;
Plater::TakeSnapshot snapshot(q, "Reload all"); Plater::TakeSnapshot snapshot(q, _u8L("Reload all"));
Plater::SuppressSnapshots suppress(q); Plater::SuppressSnapshots suppress(q);
Selection& selection = get_selection(); Selection& selection = get_selection();
@@ -10474,11 +10474,14 @@ void Plater::priv::on_select_preset(wxCommandEvent &evt)
} }
} }
} }
} } else {
// BBS // BBS
// wxWindowUpdateLocker noUpdates1(sidebar->print_panel()); // wxWindowUpdateLocker noUpdates1(sidebar->print_panel());
wxWindowUpdateLocker noUpdates2(sidebar->filament_panel()); wxWindowUpdateLocker noUpdates2(sidebar->filament_panel());
wxGetApp().get_tab(preset_type)->select_preset(preset_name); wxGetApp().get_tab(preset_type)->select_preset(preset_name);
// update plater with new config
q->on_config_change(wxGetApp().preset_bundle->full_config());
}
} }
// ORCA: Always refresh the selected filament combo so its color swatch (clr_picker) // ORCA: Always refresh the selected filament combo so its color swatch (clr_picker)
@@ -13000,8 +13003,9 @@ void Plater::load_project(wxString const& filename2,
BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(": current loading other project, return directly"); BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(": current loading other project, return directly");
return; return;
} }
else
m_loading_project = true; m_loading_project = true;
ScopeGuard loading_project_sc([this]() { m_loading_project = false; }); // Make sure state restored on any early return
m_only_gcode = false; m_only_gcode = false;
m_exported_file = false; m_exported_file = false;
@@ -13095,7 +13099,6 @@ void Plater::load_project(wxString const& filename2,
sidebar().set_flushing_volume_warning(has_modify); sidebar().set_flushing_volume_warning(has_modify);
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << __LINE__ << " load project done"; BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << __LINE__ << " load project done";
m_loading_project = false;
} }
// BBS: save logic // BBS: save logic
+2 -2
View File
@@ -1099,7 +1099,7 @@ void PlaterPresetComboBox::show_edit_menu()
#ifdef __linux__ #ifdef __linux__
// To edit extruder color from the sidebar // To edit extruder color from the sidebar
if (m_type == Preset::TYPE_FILAMENT) { if (m_type == Preset::TYPE_FILAMENT) {
append_menu_item(menu, wxID_ANY, _devL("Change extruder color"), "", append_menu_item(menu, wxID_ANY, _L("Change extruder color"), "",
[this](wxCommandEvent&) { this->change_extruder_color(); }, "blank_14", menu, []() { return true; }, wxGetApp().plater()); [this](wxCommandEvent&) { this->change_extruder_color(); }, "blank_14", menu, []() { return true; }, wxGetApp().plater());
wxGetApp().plater()->PopupMenu(menu); wxGetApp().plater()->PopupMenu(menu);
return; return;
@@ -1338,7 +1338,7 @@ void PlaterPresetComboBox::update()
selected_in_ams = add_ams_filaments(into_u8(selected_alias), true); selected_in_ams = add_ams_filaments(into_u8(selected_alias), true);
} }
std::vector<std::string> filament_orders = {"Bambu PLA Basic", "Bambu PLA Matte", "Bambu PETG HF", "Bambu ABS", "Bambu PLA Silk", "Bambu PLA-CF", std::vector<wxString> filament_orders = {"Bambu PLA Basic", "Bambu PLA Matte", "Bambu PETG HF", "Bambu ABS", "Bambu PLA Silk", "Bambu PLA-CF",
"Bambu PLA Galaxy", "Bambu PLA Metal", "Bambu PLA Marble", "Bambu PETG-CF", "Bambu PETG Translucent", "Bambu ABS-GF"}; "Bambu PLA Galaxy", "Bambu PLA Metal", "Bambu PLA Marble", "Bambu PETG-CF", "Bambu PETG Translucent", "Bambu ABS-GF"};
std::vector<std::string> first_vendors = {"", "Bambu", "Generic"}; // Empty vendor for non-system presets std::vector<std::string> first_vendors = {"", "Bambu", "Generic"}; // Empty vendor for non-system presets
std::vector<std::string> first_types = {"PLA", "PETG", "ABS", "TPU"}; std::vector<std::string> first_types = {"PLA", "PETG", "ABS", "TPU"};
+1 -1
View File
@@ -95,7 +95,7 @@ void PrinterCloudAuthDialog::OnScriptMessage(wxWebViewEvent& evt)
} }
Close(); Close();
} catch (std::exception& e) { } catch (std::exception& e) {
wxMessageBox(e.what(), "parse json failed", wxICON_WARNING); wxMessageBox(e.what(), _L("parse json failed"), wxICON_WARNING);
Close(); Close();
} }
} }
+1 -1
View File
@@ -1524,7 +1524,7 @@ InputIpAddressDialog::InputIpAddressDialog(wxWindow *parent)
m_tip4->SetMaxSize(wxSize(FromDIP(355), -1)); m_tip4->SetMaxSize(wxSize(FromDIP(355), -1));
// ORCA standardized HyperLink // ORCA standardized HyperLink
m_trouble_shoot = new HyperLink(this, "How to trouble shooting"); m_trouble_shoot = new HyperLink(this, _L("How to trouble shooting"));
m_img_help = new wxStaticBitmap(this, wxID_ANY, create_scaled_bitmap("input_access_code_x1_en", this, 198), wxDefaultPosition, wxSize(FromDIP(355), -1), 0); m_img_help = new wxStaticBitmap(this, wxID_ANY, create_scaled_bitmap("input_access_code_x1_en", this, 198), wxDefaultPosition, wxSize(FromDIP(355), -1), 0);
+2 -2
View File
@@ -673,7 +673,7 @@ SelectMachineDialog::SelectMachineDialog(Plater *plater)
sizer_error_code->Add(m_st_txt_error_code, 0, wxALL, 0); sizer_error_code->Add(m_st_txt_error_code, 0, wxALL, 0);
auto st_title_error_desc = new wxStaticText(m_sw_print_failed_info, wxID_ANY, wxT("Error desc")); auto st_title_error_desc = new wxStaticText(m_sw_print_failed_info, wxID_ANY, _L("Error desc"));
auto st_title_error_desc_doc = new wxStaticText(m_sw_print_failed_info, wxID_ANY,": "); auto st_title_error_desc_doc = new wxStaticText(m_sw_print_failed_info, wxID_ANY,": ");
m_st_txt_error_desc = new Label(m_sw_print_failed_info, wxEmptyString); m_st_txt_error_desc = new Label(m_sw_print_failed_info, wxEmptyString);
st_title_error_desc->SetForegroundColour(0x909090); st_title_error_desc->SetForegroundColour(0x909090);
@@ -690,7 +690,7 @@ SelectMachineDialog::SelectMachineDialog(Plater *plater)
sizer_error_desc->Add(st_title_error_desc_doc, 0, wxALL, 0); sizer_error_desc->Add(st_title_error_desc_doc, 0, wxALL, 0);
sizer_error_desc->Add(m_st_txt_error_desc, 0, wxALL, 0); sizer_error_desc->Add(m_st_txt_error_desc, 0, wxALL, 0);
auto st_title_extra_info = new wxStaticText(m_sw_print_failed_info, wxID_ANY, wxT("Extra info")); auto st_title_extra_info = new wxStaticText(m_sw_print_failed_info, wxID_ANY, _L("Extra info"));
auto st_title_extra_info_doc = new wxStaticText(m_sw_print_failed_info, wxID_ANY, ": "); auto st_title_extra_info_doc = new wxStaticText(m_sw_print_failed_info, wxID_ANY, ": ");
m_st_txt_extra_info = new Label(m_sw_print_failed_info, wxEmptyString); m_st_txt_extra_info = new Label(m_sw_print_failed_info, wxEmptyString);
st_title_extra_info->SetForegroundColour(0x909090); st_title_extra_info->SetForegroundColour(0x909090);
+3
View File
@@ -760,6 +760,9 @@ void Selection::clear()
#endif #endif
// #et_FIXME fake KillFocus from sidebar // #et_FIXME fake KillFocus from sidebar
// Skip on shutdown: Plater's pImpl is already freed, so plater()->canvas3D() would use-after-free.
if (wxGetApp().is_closing())
return;
wxGetApp().plater()->canvas3D()->handle_sidebar_focus_event("", false); wxGetApp().plater()->canvas3D()->handle_sidebar_focus_event("", false);
} }
+2 -2
View File
@@ -412,7 +412,7 @@ SendToPrinterDialog::SendToPrinterDialog(Plater *plater)
sizer_error_code->Add(st_title_error_code_doc, 0, wxALL, 0); sizer_error_code->Add(st_title_error_code_doc, 0, wxALL, 0);
sizer_error_code->Add(m_st_txt_error_code, 0, wxALL, 0); sizer_error_code->Add(m_st_txt_error_code, 0, wxALL, 0);
auto st_title_error_desc = new wxStaticText(m_sw_print_failed_info, wxID_ANY, wxT("Error desc")); auto st_title_error_desc = new wxStaticText(m_sw_print_failed_info, wxID_ANY, _L("Error desc"));
auto st_title_error_desc_doc = new wxStaticText(m_sw_print_failed_info, wxID_ANY, ": "); auto st_title_error_desc_doc = new wxStaticText(m_sw_print_failed_info, wxID_ANY, ": ");
m_st_txt_error_desc = new Label(m_sw_print_failed_info, wxEmptyString); m_st_txt_error_desc = new Label(m_sw_print_failed_info, wxEmptyString);
st_title_error_desc->SetForegroundColour(0x909090); st_title_error_desc->SetForegroundColour(0x909090);
@@ -429,7 +429,7 @@ SendToPrinterDialog::SendToPrinterDialog(Plater *plater)
sizer_error_desc->Add(st_title_error_desc_doc, 0, wxALL, 0); sizer_error_desc->Add(st_title_error_desc_doc, 0, wxALL, 0);
sizer_error_desc->Add(m_st_txt_error_desc, 0, wxALL, 0); sizer_error_desc->Add(m_st_txt_error_desc, 0, wxALL, 0);
auto st_title_extra_info = new wxStaticText(m_sw_print_failed_info, wxID_ANY, wxT("Extra info")); auto st_title_extra_info = new wxStaticText(m_sw_print_failed_info, wxID_ANY, _L("Extra info"));
auto st_title_extra_info_doc = new wxStaticText(m_sw_print_failed_info, wxID_ANY, ": "); auto st_title_extra_info_doc = new wxStaticText(m_sw_print_failed_info, wxID_ANY, ": ");
m_st_txt_extra_info = new Label(m_sw_print_failed_info, wxEmptyString); m_st_txt_extra_info = new Label(m_sw_print_failed_info, wxEmptyString);
st_title_extra_info->SetForegroundColour(0x909090); st_title_extra_info->SetForegroundColour(0x909090);
+1 -1
View File
@@ -5852,7 +5852,7 @@ wxBoxSizer *ScoreDialog::get_photo_btn_sizer() {
m_add_photo->Bind(wxEVT_LEFT_DOWN, [this](auto &e) { m_add_photo->Bind(wxEVT_LEFT_DOWN, [this](auto &e) {
// add photo logic // add photo logic
wxFileDialog openFileDialog(this, "Select Images", "", "", "Image files (*.png;*.jpg;*jpeg)|*.png;*.jpg;*.jpeg", wxFD_OPEN | wxFD_FILE_MUST_EXIST | wxFD_MULTIPLE); wxFileDialog openFileDialog(this, _L("Select Images"), "", "", _L("Image files (*.png;*.jpg;*jpeg)|*.png;*.jpg;*.jpeg"), wxFD_OPEN | wxFD_FILE_MUST_EXIST | wxFD_MULTIPLE);
if (openFileDialog.ShowModal() == wxID_CANCEL) return; if (openFileDialog.ShowModal() == wxID_CANCEL) return;
+9 -4
View File
@@ -7514,11 +7514,11 @@ wxSizer* Tab::compatible_widget_create(wxWindow* parent, PresetDependencies &dep
} }
if(deps.type == Preset::TYPE_PRINTER){ if(deps.type == Preset::TYPE_PRINTER){
deps.dialog_title = "Compatible printers"; deps.dialog_title = _L("Compatible printers");
deps.dialog_label = "Select printers"; deps.dialog_label = _L("Select printers");
}else{ }else{
deps.dialog_title = "Compatible process profiles"; deps.dialog_title = _L("Compatible process profiles");
deps.dialog_label = "Select profiles"; deps.dialog_label = _L("Select profiles");
} }
MultiChoiceDialog dlg(parent, deps.dialog_label, deps.dialog_title, presets); MultiChoiceDialog dlg(parent, deps.dialog_label, deps.dialog_title, presets);
@@ -7805,6 +7805,11 @@ void Tab::update_extruder_variants(int extruder_id, bool reload)
auto nozzle_volumes = m_preset_bundle->project_config.option<ConfigOptionEnumsGeneric>("nozzle_volume_type"); auto nozzle_volumes = m_preset_bundle->project_config.option<ConfigOptionEnumsGeneric>("nozzle_volume_type");
int extruder_nums = m_preset_bundle->get_printer_extruder_count(); int extruder_nums = m_preset_bundle->get_printer_extruder_count();
nozzle_volumes->values.resize(extruder_nums); nozzle_volumes->values.resize(extruder_nums);
// Orca: update `m_actual_nozzle_volumes` to current selected ones
m_actual_nozzle_volumes.resize(extruder_nums, NozzleVolumeType::nvtStandard);
for (int i = 0; i < extruder_nums; i++) m_actual_nozzle_volumes[i] = (NozzleVolumeType)nozzle_volumes->values[i];
if (extruder_nums == 2) { if (extruder_nums == 2) {
auto options = generate_extruder_options(); auto options = generate_extruder_options();
m_extruder_switch->SetOptions(options); m_extruder_switch->SetOptions(options);
+3 -3
View File
@@ -2281,7 +2281,7 @@ void DiffPresetDialog::update_tree()
const Preset* left_preset = presets->find_preset(get_selection(preset_combos.presets_left)); const Preset* left_preset = presets->find_preset(get_selection(preset_combos.presets_left));
const Preset* right_preset = presets->find_preset(get_selection(preset_combos.presets_right)); const Preset* right_preset = presets->find_preset(get_selection(preset_combos.presets_right));
if (!left_preset || !right_preset) { if (!left_preset || !right_preset) {
bottom_info = "One of the presets does not exist"; bottom_info = _L("One of the presets does not exist");
preset_combos.equal_bmp->SetBitmap_(ScalableBitmap(this, "question")); preset_combos.equal_bmp->SetBitmap_(ScalableBitmap(this, "question"));
preset_combos.equal_bmp->SetToolTip(bottom_info); preset_combos.equal_bmp->SetToolTip(bottom_info);
continue; continue;
@@ -2292,7 +2292,7 @@ void DiffPresetDialog::update_tree()
const DynamicPrintConfig& right_congig = right_preset->config; const DynamicPrintConfig& right_congig = right_preset->config;
if (left_pt != right_preset->printer_technology()) { if (left_pt != right_preset->printer_technology()) {
bottom_info = "Compared presets has different printer technology"; bottom_info = _L("Compared presets has different printer technology");
preset_combos.equal_bmp->SetBitmap_(ScalableBitmap(this, "question")); preset_combos.equal_bmp->SetBitmap_(ScalableBitmap(this, "question"));
preset_combos.equal_bmp->SetToolTip(bottom_info); preset_combos.equal_bmp->SetToolTip(bottom_info);
continue; continue;
@@ -2336,7 +2336,7 @@ void DiffPresetDialog::update_tree()
wxString left_val = from_u8((boost::format("%1%") % left_config.opt<ConfigOptionStrings>("extruder_colour")->values.size()).str()); wxString left_val = from_u8((boost::format("%1%") % left_config.opt<ConfigOptionStrings>("extruder_colour")->values.size()).str());
wxString right_val = from_u8((boost::format("%1%") % right_congig.opt<ConfigOptionStrings>("extruder_colour")->values.size()).str()); wxString right_val = from_u8((boost::format("%1%") % right_congig.opt<ConfigOptionStrings>("extruder_colour")->values.size()).str());
m_tree->Append("extruders_count", type, "General", "Capabilities", local_label, left_val, right_val, m_tree->Append("extruders_count", type, _L("General"), _L("Capabilities"), local_label, left_val, right_val,
get_category_icon("Basic information")); get_category_icon("Basic information"));
} }
+1 -1
View File
@@ -506,7 +506,7 @@ void ZUserLogin::OnScriptMessage(wxWebViewEvent &evt)
return; return;
} }
} catch (std::exception &e) { } catch (std::exception &e) {
wxMessageBox(e.what(), "parse json failed", wxICON_WARNING); wxMessageBox(e.what(), _L("parse json failed"), wxICON_WARNING);
Close(); Close();
} }
} }
+1 -1
View File
@@ -556,7 +556,7 @@ bool ProgressDialog::Update(int value, const wxString &newmsg, bool *skip)
if (newmsg.empty()) { if (newmsg.empty()) {
// also provide the finishing message if the application didn't // also provide the finishing message if the application didn't
m_msg->SetLabel(wxGetTranslation("Done.")); m_msg->SetLabel(_L("Done."));
} }
// allow the window to repaint: // allow the window to repaint: