diff --git a/.github/workflows/check_profiles.yml b/.github/workflows/check_profiles.yml index 9da59f43a7..68b27ba291 100644 --- a/.github/workflows/check_profiles.yml +++ b/.github/workflows/check_profiles.yml @@ -15,12 +15,11 @@ on: default: 'warning' permissions: - pull-requests: write contents: read jobs: - check_translation: + check_profiles: name: Check profiles runs-on: ubuntu-24.04 steps: @@ -62,11 +61,11 @@ jobs: ./OrcaSlicer_profile_validator -p ${{ github.workspace }}/resources/profiles -l 2 2>&1 | tee ${{ runner.temp }}/validate_custom.log exit ${PIPESTATUS[0]} - - name: Post error comment on PR + - name: Prepare comment artifact if: ${{ always() && github.event_name == 'pull_request' && (steps.extra_json_check.outcome == 'failure' || steps.validate_system.outcome == 'failure' || steps.validate_custom.outcome == 'failure') }} - env: - GH_TOKEN: ${{ github.token }} run: | + mkdir -p ${{ runner.temp }}/profile-check-results + { echo "## :x: Profile Validation Errors" echo "" @@ -100,16 +99,20 @@ jobs: echo "---" echo "*Please fix the above errors and push a new commit.*" - } > ${{ runner.temp }}/pr_comment.md + } > ${{ runner.temp }}/profile-check-results/pr_comment.md - gh pr comment ${{ github.event.pull_request.number }} --body-file ${{ runner.temp }}/pr_comment.md + echo "${{ github.event.pull_request.number }}" > ${{ runner.temp }}/profile-check-results/pr_number.txt + + - name: Upload comment artifact + if: ${{ always() && github.event_name == 'pull_request' && (steps.extra_json_check.outcome == 'failure' || steps.validate_system.outcome == 'failure' || steps.validate_custom.outcome == 'failure') }} + uses: actions/upload-artifact@v4 + with: + name: profile-check-results + path: ${{ runner.temp }}/profile-check-results/ + retention-days: 1 - name: Fail if any check failed if: ${{ always() && (steps.extra_json_check.outcome == 'failure' || steps.validate_system.outcome == 'failure' || steps.validate_custom.outcome == 'failure') }} run: | echo "One or more profile checks failed. See above for details." exit 1 - - - - diff --git a/.github/workflows/check_profiles_comment.yml b/.github/workflows/check_profiles_comment.yml new file mode 100644 index 0000000000..514eeed384 --- /dev/null +++ b/.github/workflows/check_profiles_comment.yml @@ -0,0 +1,46 @@ +name: Post profile check comment + +# NOTE: The workflow name in the 'workflows' filter below must match the 'name' +# field in check_profiles.yml exactly. If that name changes, update it here too. +on: + workflow_run: + workflows: ["Check profiles"] + types: + - completed + +permissions: + pull-requests: write + +jobs: + post_comment: + name: Post PR comment + runs-on: ubuntu-24.04 + if: ${{ github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.conclusion == 'failure' }} + steps: + - name: Download artifact + id: download + uses: actions/download-artifact@v4 + continue-on-error: true + with: + name: profile-check-results + run-id: ${{ github.event.workflow_run.id }} + github-token: ${{ github.token }} + + - name: Post comment on PR + if: ${{ steps.download.outcome == 'success' }} + env: + GH_TOKEN: ${{ github.token }} + GH_REPO: ${{ github.repository }} + run: | + if [ ! -f pr_number.txt ] || [ ! -f pr_comment.md ]; then + echo "No comment artifact found, skipping." + exit 0 + fi + + PR_NUMBER=$(cat pr_number.txt) + if ! [[ "$PR_NUMBER" =~ ^[0-9]+$ ]]; then + echo "Invalid PR number: $PR_NUMBER" + exit 1 + fi + + gh pr comment "$PR_NUMBER" --body-file pr_comment.md diff --git a/.gitignore b/.gitignore index 4b186b4e14..8007f0a05c 100644 --- a/.gitignore +++ b/.gitignore @@ -44,4 +44,5 @@ test.js /.cache/ .clangd internal_docs/ -*.flatpak \ No newline at end of file +*.flatpak +/flatpak-repo/ \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 5c5be1d49f..008f9e9563 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -493,7 +493,8 @@ if (APPLE) endif () if(MSVC) -# 添加编译选项,忽略警告 C4305 (格式转换截断) +# Ignore truncating casts in initializers & constructors +# https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-1-c4305 add_compile_options(/wd4305) endif() diff --git a/localization/i18n/OrcaSlicer.pot b/localization/i18n/OrcaSlicer.pot index 23c69128d1..8caad343e7 100644 --- a/localization/i18n/OrcaSlicer.pot +++ b/localization/i18n/OrcaSlicer.pot @@ -13699,7 +13699,7 @@ msgstr "" msgid "Topmost surface" msgstr "" -msgid "All solid layer" +msgid "All solid layers" msgstr "" msgid "Ironing Pattern" @@ -14125,7 +14125,7 @@ msgid "" "conical material. A value of 0 will fill all the holes in the model base." msgstr "" -msgid "Detect overhang wall" +msgid "Detect overhang walls" msgstr "" #, possible-c-format, possible-boost-format @@ -14675,7 +14675,7 @@ msgid "Minimum sparse infill threshold" msgstr "" msgid "" -"Sparse infill area which is smaller than threshold value is replaced by " +"Sparse infill areas smaller than this threshold value are replaced by " "internal solid infill." msgstr "" @@ -15281,12 +15281,12 @@ msgstr "" msgid "Nozzle temperature for layers after the initial one." msgstr "" -msgid "Detect thin wall" +msgid "Detect thin walls" msgstr "" msgid "" -"Detect thin wall which can't contain two line width. And use single line to " -"print. Maybe printed not very well, because it's not closed loop." +"Detect thin walls which can't contain two line widths, and use single line " +"to print. Maybe not printed very well, because it's not a closed loop." msgstr "" msgid "" @@ -15748,7 +15748,7 @@ msgid "" "itself. It's expressed as a percentage over nozzle diameter." msgstr "" -msgid "Detect narrow internal solid infill" +msgid "Detect narrow internal solid infills" msgstr "" msgid "" diff --git a/localization/i18n/ca/OrcaSlicer_ca.po b/localization/i18n/ca/OrcaSlicer_ca.po index 50c6e5f054..66f4ce784d 100644 --- a/localization/i18n/ca/OrcaSlicer_ca.po +++ b/localization/i18n/ca/OrcaSlicer_ca.po @@ -15335,7 +15335,8 @@ msgstr "Totes les superfícies superiors" msgid "Topmost surface" msgstr "Només la última superfície superior" -msgid "All solid layer" +#, fuzzy +msgid "All solid layers" msgstr "Tota la capa sòlida" msgid "Ironing Pattern" @@ -15862,7 +15863,8 @@ msgstr "" "Àrea màxima d'un forat a la base del model abans que s'ompli amb material " "cònic. Un valor de 0 omplirà tots els forats de la base del model." -msgid "Detect overhang wall" +#, fuzzy +msgid "Detect overhang walls" msgstr "Detectar voladís de perímetre" #, c-format, boost-format @@ -16560,8 +16562,9 @@ msgstr "" msgid "Minimum sparse infill threshold" msgstr "Llindar mínim de farciment poc dens" +#, fuzzy msgid "" -"Sparse infill area which is smaller than threshold value is replaced by " +"Sparse infill areas smaller than this threshold value are replaced by " "internal solid infill." msgstr "" "L'àrea de farciment poc dens que sigui més petita que el valor del llindar " @@ -17321,12 +17324,14 @@ msgstr "" msgid "Nozzle temperature for layers after the initial one." msgstr "Temperatura del broquet per les capes després de l'inicial" -msgid "Detect thin wall" +#, fuzzy +msgid "Detect thin walls" msgstr "Detectar perímetres prims" +#, fuzzy msgid "" -"Detect thin wall which can't contain two line width. And use single line to " -"print. Maybe printed not very well, because it's not closed loop." +"Detect thin walls which can't contain two line widths, and use single line " +"to print. Maybe not printed very well, because it's not a closed loop." msgstr "" "Detecta un perímetre prim que no pugui contenir dues línies d'amplada. I " "utilitzar una sola línia per imprimir. Potser no s'imprimeix gaire bé, " @@ -17940,7 +17945,8 @@ msgstr "" "fina que el gruix de l'element el perímetre esdevindrà tan gruixut com el " "propi element. S'expressa en percentatge sobre el diàmetre del broquet" -msgid "Detect narrow internal solid infill" +#, fuzzy +msgid "Detect narrow internal solid infills" msgstr "Detectar de farciment sòlid intern estret" msgid "" diff --git a/localization/i18n/cs/OrcaSlicer_cs.po b/localization/i18n/cs/OrcaSlicer_cs.po index 1cb30ab350..0b8d3b267e 100644 --- a/localization/i18n/cs/OrcaSlicer_cs.po +++ b/localization/i18n/cs/OrcaSlicer_cs.po @@ -14975,7 +14975,8 @@ msgstr "Horní povrchy" msgid "Topmost surface" msgstr "Nejvyšší povrch" -msgid "All solid layer" +#, fuzzy +msgid "All solid layers" msgstr "Všechny pevné vrstvy" msgid "Ironing Pattern" @@ -15464,7 +15465,8 @@ msgstr "" "Maximální plocha otvoru ve spodní části modelu, než bude vyplněn kuželovitým " "materiálem. Hodnota 0 vyplní všechny otvory ve spodní části modelu." -msgid "Detect overhang wall" +#, fuzzy +msgid "Detect overhang walls" msgstr "Detekovat převislou stěnu" #, c-format, boost-format @@ -16143,8 +16145,9 @@ msgstr "" msgid "Minimum sparse infill threshold" msgstr "Minimální práh řídké výplně" +#, fuzzy msgid "" -"Sparse infill area which is smaller than threshold value is replaced by " +"Sparse infill areas smaller than this threshold value are replaced by " "internal solid infill." msgstr "" "Oblast řídké výplně menší než prahová hodnota bude nahrazena vnitřní plnou " @@ -16867,12 +16870,14 @@ msgstr "" msgid "Nozzle temperature for layers after the initial one." msgstr "Teplota trysky pro vrstvy po úvodní vrstvě." -msgid "Detect thin wall" +#, fuzzy +msgid "Detect thin walls" msgstr "Detekovat tenkou stěnu" +#, fuzzy msgid "" -"Detect thin wall which can't contain two line width. And use single line to " -"print. Maybe printed not very well, because it's not closed loop." +"Detect thin walls which can't contain two line widths, and use single line " +"to print. Maybe not printed very well, because it's not a closed loop." msgstr "" "Detekovat tenkou stěnu, do které se nevejdou dvě šířky čáry. A použít pro " "tisk pouze jednu čáru. Tisk nemusí být zcela kvalitní, protože nejde o " @@ -17476,7 +17481,8 @@ msgstr "" "modelu. Pokud je minimální šířka stěny menší než tloušťka prvku, bude stěna " "tak silná, jako je samotný prvek. Je vyjádřena jako procento průměru trysky." -msgid "Detect narrow internal solid infill" +#, fuzzy +msgid "Detect narrow internal solid infills" msgstr "Detekovat úzkou vnitřní plnou výplň" msgid "" diff --git a/localization/i18n/de/OrcaSlicer_de.po b/localization/i18n/de/OrcaSlicer_de.po index 290102a94a..319c081b49 100644 --- a/localization/i18n/de/OrcaSlicer_de.po +++ b/localization/i18n/de/OrcaSlicer_de.po @@ -16128,7 +16128,8 @@ msgstr "Obere Oberflächen" msgid "Topmost surface" msgstr "Oberste Oberfläche" -msgid "All solid layer" +#, fuzzy +msgid "All solid layers" msgstr "Alle soliden Schichten" msgid "Ironing Pattern" @@ -16661,7 +16662,8 @@ msgstr "" "konischem Material gefüllt wird. Ein Wert von 0 füllt alle Löcher in der " "Basis des Modells." -msgid "Detect overhang wall" +#, fuzzy +msgid "Detect overhang walls" msgstr "Erkennen von Wandüberhängen" #, c-format, boost-format @@ -17370,8 +17372,9 @@ msgstr "" msgid "Minimum sparse infill threshold" msgstr "Mindestschwelle für Füllung" +#, fuzzy msgid "" -"Sparse infill area which is smaller than threshold value is replaced by " +"Sparse infill areas smaller than this threshold value are replaced by " "internal solid infill." msgstr "" "Innere Füllbereiche, die kleiner als dieser Wert sind, werden durch massive " @@ -18165,12 +18168,14 @@ msgstr "" msgid "Nozzle temperature for layers after the initial one." msgstr "Düsentemperatur nach der ersten Schicht" -msgid "Detect thin wall" +#, fuzzy +msgid "Detect thin walls" msgstr "Dünne Wand erkennen" +#, fuzzy msgid "" -"Detect thin wall which can't contain two line width. And use single line to " -"print. Maybe printed not very well, because it's not closed loop." +"Detect thin walls which can't contain two line widths, and use single line " +"to print. Maybe not printed very well, because it's not a closed loop." msgstr "" "Erkennt dünne Wände, die keine zwei Linienbreiten enthalten können. Und " "verwendet eine einzelne Linie zum Drucken. Diese wird vielleicht nicht sehr " @@ -18823,7 +18828,8 @@ msgstr "" "Dicke des Features, wird die Wand so dick wie das Feature selbst. Wird als " "Prozentsatz des Düsendurchmessers angegeben." -msgid "Detect narrow internal solid infill" +#, fuzzy +msgid "Detect narrow internal solid infills" msgstr "Erkennen einer schmalen internen soliden Füllung" msgid "" diff --git a/localization/i18n/en/OrcaSlicer_en.po b/localization/i18n/en/OrcaSlicer_en.po index 91d2d7e60d..b7de0b61c2 100644 --- a/localization/i18n/en/OrcaSlicer_en.po +++ b/localization/i18n/en/OrcaSlicer_en.po @@ -14006,8 +14006,8 @@ msgstr "All top surfaces" msgid "Topmost surface" msgstr "Topmost surface only" -msgid "All solid layer" -msgstr "All solid layers" +msgid "All solid layers" +msgstr "" msgid "Ironing Pattern" msgstr "" @@ -14444,8 +14444,8 @@ msgid "" "conical material. A value of 0 will fill all the holes in the model base." msgstr "" -msgid "Detect overhang wall" -msgstr "Detect overhang walls" +msgid "Detect overhang walls" +msgstr "" #, c-format, boost-format msgid "" @@ -15008,7 +15008,7 @@ msgid "Minimum sparse infill threshold" msgstr "" msgid "" -"Sparse infill area which is smaller than threshold value is replaced by " +"Sparse infill areas smaller than this threshold value are replaced by " "internal solid infill." msgstr "" "Sparse infill areas which are smaller than this threshold value are replaced " @@ -15641,12 +15641,12 @@ msgstr "" msgid "Nozzle temperature for layers after the initial one." msgstr "Nozzle temperature after the first layer" -msgid "Detect thin wall" -msgstr "Detect thin walls" +msgid "Detect thin walls" +msgstr "" msgid "" -"Detect thin wall which can't contain two line width. And use single line to " -"print. Maybe printed not very well, because it's not closed loop." +"Detect thin walls which can't contain two line widths, and use single line " +"to print. Maybe not printed very well, because it's not a closed loop." msgstr "" "This detects thin walls which can’t contain two lines and uses a single line " "to print. It may not print as well because it’s not a closed loop." @@ -16148,7 +16148,7 @@ msgid "" "itself. It's expressed as a percentage over nozzle diameter." msgstr "" -msgid "Detect narrow internal solid infill" +msgid "Detect narrow internal solid infills" msgstr "" msgid "" @@ -16170,7 +16170,7 @@ msgid " not in range " msgstr "" msgid "Export 3MF" -msgstr "Export 3mf" +msgstr "" msgid "Export project as 3MF." msgstr "This exports the project as a 3MF file." diff --git a/localization/i18n/es/OrcaSlicer_es.po b/localization/i18n/es/OrcaSlicer_es.po index 956e36321e..0258a6c33b 100644 --- a/localization/i18n/es/OrcaSlicer_es.po +++ b/localization/i18n/es/OrcaSlicer_es.po @@ -16065,7 +16065,8 @@ msgstr "Todas las superficies superiores" msgid "Topmost surface" msgstr "Sólo la superficie superior" -msgid "All solid layer" +#, fuzzy +msgid "All solid layers" msgstr "Todas la capas sólidas" msgid "Ironing Pattern" @@ -16617,7 +16618,7 @@ msgstr "" "material cónico. El valor 0 llenará todos los orificios en la base del " "modelo." -msgid "Detect overhang wall" +msgid "Detect overhang walls" msgstr "Detectar perímetros en voladizo" #, c-format, boost-format @@ -17325,8 +17326,9 @@ msgstr "" msgid "Minimum sparse infill threshold" msgstr "Umbral de área mínima de relleno de baja densidad" +#, fuzzy msgid "" -"Sparse infill area which is smaller than threshold value is replaced by " +"Sparse infill areas smaller than this threshold value are replaced by " "internal solid infill." msgstr "" "El área de relleno de baja densidad que es menor que este valor de umbral se " @@ -18117,12 +18119,12 @@ msgstr "" msgid "Nozzle temperature for layers after the initial one." msgstr "Temperatura de la boquilla después de la primera capa." -msgid "Detect thin wall" +msgid "Detect thin walls" msgstr "Detección de perímetros delgados" msgid "" -"Detect thin wall which can't contain two line width. And use single line to " -"print. Maybe printed not very well, because it's not closed loop." +"Detect thin walls which can't contain two line widths, and use single line " +"to print. Maybe not printed very well, because it's not a closed loop." msgstr "" "Detectar los perímetros delgados que no pueden contener dos líneas de ancho, " "y utilizar una sola línea para imprimir. Tal vez no se imprima muy bien, " @@ -18777,7 +18779,8 @@ msgstr "" "propia característica. Se expresa en porcentaje en base al diámetro de la " "boquilla." -msgid "Detect narrow internal solid infill" +#, fuzzy +msgid "Detect narrow internal solid infills" msgstr "Detección de relleno interno estrecho" msgid "" diff --git a/localization/i18n/fr/OrcaSlicer_fr.po b/localization/i18n/fr/OrcaSlicer_fr.po index 83526d097c..eb5e601d7d 100644 --- a/localization/i18n/fr/OrcaSlicer_fr.po +++ b/localization/i18n/fr/OrcaSlicer_fr.po @@ -15465,7 +15465,8 @@ msgstr "Surfaces supérieures" msgid "Topmost surface" msgstr "Surface la plus élevée" -msgid "All solid layer" +#, fuzzy +msgid "All solid layers" msgstr "Toutes les couches pleines" msgid "Ironing Pattern" @@ -16001,7 +16002,8 @@ msgstr "" "par un matériau conique. Une valeur de 0 remplira tous les trous dans la " "base du modèle." -msgid "Detect overhang wall" +#, fuzzy +msgid "Detect overhang walls" msgstr "Détecter une paroi en surplomb" #, c-format, boost-format @@ -16704,8 +16706,9 @@ msgstr "" msgid "Minimum sparse infill threshold" msgstr "Seuil minimum de remplissage" +#, fuzzy msgid "" -"Sparse infill area which is smaller than threshold value is replaced by " +"Sparse infill areas smaller than this threshold value are replaced by " "internal solid infill." msgstr "" "La zone de remplissage inférieure à la valeur seuil est remplacée par un " @@ -17475,12 +17478,14 @@ msgstr "" msgid "Nozzle temperature for layers after the initial one." msgstr "Température de la buse pour les couches après la première" -msgid "Detect thin wall" +#, fuzzy +msgid "Detect thin walls" msgstr "Détecter les parois fines" +#, fuzzy msgid "" -"Detect thin wall which can't contain two line width. And use single line to " -"print. Maybe printed not very well, because it's not closed loop." +"Detect thin walls which can't contain two line widths, and use single line " +"to print. Maybe not printed very well, because it's not a closed loop." msgstr "" "Détecte les parois fines qui ne peuvent pas contenir deux largeurs de ligne. " "Et utilisez une seule ligne pour imprimer. Peut ne pas être très bien " @@ -18098,7 +18103,8 @@ msgstr "" "l'élément lui-même. Elle est exprimée en pourcentage par rapport au diamètre " "de la buse" -msgid "Detect narrow internal solid infill" +#, fuzzy +msgid "Detect narrow internal solid infills" msgstr "Détecter un remplissage plein interne étroit" msgid "" diff --git a/localization/i18n/hu/OrcaSlicer_hu.po b/localization/i18n/hu/OrcaSlicer_hu.po index e5a3dbc2fb..89fc03574c 100644 --- a/localization/i18n/hu/OrcaSlicer_hu.po +++ b/localization/i18n/hu/OrcaSlicer_hu.po @@ -15675,7 +15675,8 @@ msgstr "Felső felületek" msgid "Topmost surface" msgstr "Legfelső felület" -msgid "All solid layer" +#, fuzzy +msgid "All solid layers" msgstr "Összes szilárd réteg" msgid "Ironing Pattern" @@ -16205,7 +16206,8 @@ msgstr "" "A modell alján lévő lyuk maximális területe, mielőtt kúpos anyag töltené " "ki. A 0 érték a modellalap összes lyukát kitölti." -msgid "Detect overhang wall" +#, fuzzy +msgid "Detect overhang walls" msgstr "Túlnyúló fal felismerése" #, c-format, boost-format @@ -16902,8 +16904,9 @@ msgstr "" msgid "Minimum sparse infill threshold" msgstr "Ritkás kitöltés küszöbértéke" +#, fuzzy msgid "" -"Sparse infill area which is smaller than threshold value is replaced by " +"Sparse infill areas smaller than this threshold value are replaced by " "internal solid infill." msgstr "" "A küszöbérték alatti ritkás kitöltési terület belső szilárd kitöltéssel " @@ -17680,12 +17683,14 @@ msgstr "" msgid "Nozzle temperature for layers after the initial one." msgstr "Fúvóka hőmérséklete az első réteg után" -msgid "Detect thin wall" +#, fuzzy +msgid "Detect thin walls" msgstr "Vékony fal felismerése" +#, fuzzy msgid "" -"Detect thin wall which can't contain two line width. And use single line to " -"print. Maybe printed not very well, because it's not closed loop." +"Detect thin walls which can't contain two line widths, and use single line " +"to print. Maybe not printed very well, because it's not a closed loop." msgstr "" "Felismeri a vékony falat, amit nem lehet két vonalnyi szélességgel " "nyomtatni, és egyetlen vonallal nyomtatja" @@ -18319,7 +18324,8 @@ msgstr "" "mint a nyomtatandó elem vastagsága, akkor a fal olyan vastag lesz, mint maga " "a nyomtatott elem. A fúvóka átmérőjének százalékában van kifejezve" -msgid "Detect narrow internal solid infill" +#, fuzzy +msgid "Detect narrow internal solid infills" msgstr "Keskeny belső szilárd kitöltés felismerése" msgid "" diff --git a/localization/i18n/it/OrcaSlicer_it.po b/localization/i18n/it/OrcaSlicer_it.po index 96d7707448..200361b23a 100644 --- a/localization/i18n/it/OrcaSlicer_it.po +++ b/localization/i18n/it/OrcaSlicer_it.po @@ -15411,7 +15411,7 @@ msgstr "Superfici superiori" msgid "Topmost surface" msgstr "Superficie superiore più alta" -msgid "All solid layer" +msgid "All solid layers" msgstr "Tutti gli strati solidi" msgid "Ironing Pattern" @@ -15945,7 +15945,8 @@ msgstr "" "una forma conica. Un valore pari a 0 riempirà tutti i fori nella base del " "modello." -msgid "Detect overhang wall" +#, fuzzy +msgid "Detect overhang walls" msgstr "Rileva parete sporgente" #, c-format, boost-format @@ -16651,8 +16652,9 @@ msgstr "" msgid "Minimum sparse infill threshold" msgstr "Soglia minima riempimento sparso" +#, fuzzy msgid "" -"Sparse infill area which is smaller than threshold value is replaced by " +"Sparse infill areas smaller than this threshold value are replaced by " "internal solid infill." msgstr "" "L'area del riempimento sparso che è inferiore al valore di soglia, viene " @@ -17422,12 +17424,13 @@ msgstr "" msgid "Nozzle temperature for layers after the initial one." msgstr "Temperatura dell'ugello per gli strati successivi a quello iniziale." -msgid "Detect thin wall" +msgid "Detect thin walls" msgstr "Rileva pareti sottili" +#, fuzzy msgid "" -"Detect thin wall which can't contain two line width. And use single line to " -"print. Maybe printed not very well, because it's not closed loop." +"Detect thin walls which can't contain two line widths, and use single line " +"to print. Maybe not printed very well, because it's not a closed loop." msgstr "" "Rileva le pareti sottili che non possono contenere due linee di larghezza, " "utilizzandone quindi una sola per la stampa. Potrebbe non essere stampato " @@ -18044,7 +18047,8 @@ msgstr "" "spessa quanto l'elemento stesso. Questo valore è espresso come percentuale " "rispetto al diametro dell'ugello." -msgid "Detect narrow internal solid infill" +#, fuzzy +msgid "Detect narrow internal solid infills" msgstr "Rileva riempimento solido interno stretto" msgid "" diff --git a/localization/i18n/ja/OrcaSlicer_ja.po b/localization/i18n/ja/OrcaSlicer_ja.po index 4a6c53b66e..60b47bd5ea 100644 --- a/localization/i18n/ja/OrcaSlicer_ja.po +++ b/localization/i18n/ja/OrcaSlicer_ja.po @@ -14082,7 +14082,8 @@ msgstr "全てのトップ面" msgid "Topmost surface" msgstr "最上部のみ" -msgid "All solid layer" +#, fuzzy +msgid "All solid layers" msgstr "全てのソリッド積層" msgid "Ironing Pattern" @@ -14525,7 +14526,8 @@ msgid "" "conical material. A value of 0 will fill all the holes in the model base." msgstr "" -msgid "Detect overhang wall" +#, fuzzy +msgid "Detect overhang walls" msgstr "オーバーハングを検出" #, c-format, boost-format @@ -15097,8 +15099,9 @@ msgstr "" msgid "Minimum sparse infill threshold" msgstr "スパース インフィルの下閾値" +#, fuzzy msgid "" -"Sparse infill area which is smaller than threshold value is replaced by " +"Sparse infill areas smaller than this threshold value are replaced by " "internal solid infill." msgstr "" "スパース インフィルの面積がこの値以下の場合、ソリッド インフィルに変換されま" @@ -15743,12 +15746,14 @@ msgstr "" msgid "Nozzle temperature for layers after the initial one." msgstr "1層目後のノズル温度" -msgid "Detect thin wall" +#, fuzzy +msgid "Detect thin walls" msgstr "薄い壁を検出" +#, fuzzy msgid "" -"Detect thin wall which can't contain two line width. And use single line to " -"print. Maybe printed not very well, because it's not closed loop." +"Detect thin walls which can't contain two line widths, and use single line " +"to print. Maybe not printed very well, because it's not a closed loop." msgstr "" "2ラインの入らない薄い壁面を検出し、1ラインで造形します。仕上がりが悪くなり可" "能性があります。" @@ -16251,7 +16256,8 @@ msgid "" "itself. It's expressed as a percentage over nozzle diameter." msgstr "" -msgid "Detect narrow internal solid infill" +#, fuzzy +msgid "Detect narrow internal solid infills" msgstr "薄いソリッド インフィル検出" msgid "" diff --git a/localization/i18n/ko/OrcaSlicer_ko.po b/localization/i18n/ko/OrcaSlicer_ko.po index 08316d573a..fa79c5a36a 100644 --- a/localization/i18n/ko/OrcaSlicer_ko.po +++ b/localization/i18n/ko/OrcaSlicer_ko.po @@ -14809,7 +14809,8 @@ msgstr "상단 표면" msgid "Topmost surface" msgstr "최상단 표면" -msgid "All solid layer" +#, fuzzy +msgid "All solid layers" msgstr "모든 꽉찬 레이어" msgid "Ironing Pattern" @@ -15303,7 +15304,8 @@ msgstr "" "원뿔형 재료로 채워지기 전에 모델 베이스에 있는 구멍의 최대 면적입니다. 값이 0" "이면 모델 베이스의 모든 구멍이 채워집니다." -msgid "Detect overhang wall" +#, fuzzy +msgid "Detect overhang walls" msgstr "오버행 벽 감지" #, c-format, boost-format @@ -15962,8 +15964,9 @@ msgstr "" msgid "Minimum sparse infill threshold" msgstr "최소 드문 채우기 임계값" +#, fuzzy msgid "" -"Sparse infill area which is smaller than threshold value is replaced by " +"Sparse infill areas smaller than this threshold value are replaced by " "internal solid infill." msgstr "임계값보다 작은 드문 채우기 영역은 꽉찬 내부 채우기로 대체됩니다" @@ -16671,12 +16674,14 @@ msgstr "" msgid "Nozzle temperature for layers after the initial one." msgstr "초기 레이어 이후의 노즐 온도" -msgid "Detect thin wall" +#, fuzzy +msgid "Detect thin walls" msgstr "얇은 벽 감지" +#, fuzzy msgid "" -"Detect thin wall which can't contain two line width. And use single line to " -"print. Maybe printed not very well, because it's not closed loop." +"Detect thin walls which can't contain two line widths, and use single line " +"to print. Maybe not printed very well, because it's not a closed loop." msgstr "" "두개의 선 너비를 포함할 수 없는 얇은 벽을 감지합니다. 그리고 한 선으로 출력합" "니다. 폐쇄 루프가 아니기 때문에 출력이 잘 되지 않을 수 있습니다" @@ -17246,7 +17251,8 @@ msgstr "" "비가 형상의 두께보다 얇은 경우 벽은 형상 자체만큼 두꺼워집니다. 노즐 직경에 " "대한 백분율로 표시됩니다" -msgid "Detect narrow internal solid infill" +#, fuzzy +msgid "Detect narrow internal solid infills" msgstr "좁은 꽉찬 내부 채우기 감지" msgid "" diff --git a/localization/i18n/lt/OrcaSlicer_lt.po b/localization/i18n/lt/OrcaSlicer_lt.po index 881b675de9..b5232219e9 100644 --- a/localization/i18n/lt/OrcaSlicer_lt.po +++ b/localization/i18n/lt/OrcaSlicer_lt.po @@ -15362,7 +15362,8 @@ msgstr "Viršutiniai paviršiai" msgid "Topmost surface" msgstr "Aukščiausias paviršius" -msgid "All solid layer" +#, fuzzy +msgid "All solid layers" msgstr "Visas vientisas sluoksnis" msgid "Ironing Pattern" @@ -15891,7 +15892,8 @@ msgstr "" "Didžiausias modelio pagrindo skylės plotas prieš ją užpildant kūgine " "medžiaga. 0 reikšmė užpildys visas modelio pagrindo skyles." -msgid "Detect overhang wall" +#, fuzzy +msgid "Detect overhang walls" msgstr "Aptikti išsikišusią sieną" #, c-format, boost-format @@ -16581,8 +16583,9 @@ msgstr "" msgid "Minimum sparse infill threshold" msgstr "Minimali reto užpildymo riba" +#, fuzzy msgid "" -"Sparse infill area which is smaller than threshold value is replaced by " +"Sparse infill areas smaller than this threshold value are replaced by " "internal solid infill." msgstr "" "Reto užpildymo sritys, kurios yra mažesnės už šią ribinę vertę, pakeičiamos " @@ -17342,12 +17345,14 @@ msgstr "" msgid "Nozzle temperature for layers after the initial one." msgstr "Po pradinio sluoksnio esančių sluoksnių purkštuko temperatūra." -msgid "Detect thin wall" +#, fuzzy +msgid "Detect thin walls" msgstr "Aptikti plonas sieneles" +#, fuzzy msgid "" -"Detect thin wall which can't contain two line width. And use single line to " -"print. Maybe printed not very well, because it's not closed loop." +"Detect thin walls which can't contain two line widths, and use single line " +"to print. Maybe not printed very well, because it's not a closed loop." msgstr "" "Aptikti ploną sienelę, kurioje negali būti dviejų eilučių pločio. " "Spausdinimui naudoti vieną liniją. Gali būti, kad nebus išspausdinta labai " @@ -17975,7 +17980,8 @@ msgstr "" "siena taps tokio pat storio kaip ir pats elementas. Jis išreiškiamas " "procentais nuo purkštuko skersmens." -msgid "Detect narrow internal solid infill" +#, fuzzy +msgid "Detect narrow internal solid infills" msgstr "Aptikti siaurą vidinį vientisą užpildą" msgid "" diff --git a/localization/i18n/nl/OrcaSlicer_nl.po b/localization/i18n/nl/OrcaSlicer_nl.po index 108bb6f17a..d0a0be3a0b 100644 --- a/localization/i18n/nl/OrcaSlicer_nl.po +++ b/localization/i18n/nl/OrcaSlicer_nl.po @@ -14479,7 +14479,8 @@ msgstr "Alle bovenoppervlakken" msgid "Topmost surface" msgstr "Alleen het bovenste oppervlak" -msgid "All solid layer" +#, fuzzy +msgid "All solid layers" msgstr "Alle vaste lagen" msgid "Ironing Pattern" @@ -14942,7 +14943,8 @@ msgid "" "conical material. A value of 0 will fill all the holes in the model base." msgstr "" -msgid "Detect overhang wall" +#, fuzzy +msgid "Detect overhang walls" msgstr "Overhange wand detecteren" #, c-format, boost-format @@ -15538,8 +15540,9 @@ msgstr "" msgid "Minimum sparse infill threshold" msgstr "Minimale drempel voor dunne opvulling (infill)" +#, fuzzy msgid "" -"Sparse infill area which is smaller than threshold value is replaced by " +"Sparse infill areas smaller than this threshold value are replaced by " "internal solid infill." msgstr "" "Dunne opvullingen (infill) die kleiner zijn dan deze drempelwaarde worden " @@ -16216,12 +16219,14 @@ msgstr "" msgid "Nozzle temperature for layers after the initial one." msgstr "Mondstuk temperatuur voor de lagen na de eerste laag" -msgid "Detect thin wall" +#, fuzzy +msgid "Detect thin walls" msgstr "Detecteer dunne wanden" +#, fuzzy msgid "" -"Detect thin wall which can't contain two line width. And use single line to " -"print. Maybe printed not very well, because it's not closed loop." +"Detect thin walls which can't contain two line widths, and use single line " +"to print. Maybe not printed very well, because it's not a closed loop." msgstr "" "Dit detecteert dunne wanden die geen twee lijnen kunnen bevatten en gebruikt " "een enkele lijn tijdens het printen. Het kan zijn dat de kwaliteit minder " @@ -16772,7 +16777,8 @@ msgstr "" "van het element, wordt de muur net zo dik als het object zelf. Dit wordt " "uitgedrukt als een percentage ten opzichte van de diameter van het mondstuk" -msgid "Detect narrow internal solid infill" +#, fuzzy +msgid "Detect narrow internal solid infills" msgstr "Detecteer dichte interne solide vulling (infill)" msgid "" diff --git a/localization/i18n/pl/OrcaSlicer_pl.po b/localization/i18n/pl/OrcaSlicer_pl.po index 5b941645f6..05417ef5d5 100644 --- a/localization/i18n/pl/OrcaSlicer_pl.po +++ b/localization/i18n/pl/OrcaSlicer_pl.po @@ -15262,7 +15262,8 @@ msgstr "Górne powierzchnie" msgid "Topmost surface" msgstr "Tylko ostatnia warstwa" -msgid "All solid layer" +#, fuzzy +msgid "All solid layers" msgstr "Wszystkie jednolite warstwy" msgid "Ironing Pattern" @@ -15789,7 +15790,8 @@ msgstr "" "Maksymalna powierzchnia otworu w podstawie modelu przed jego wypełnieniem " "materiałem stożkowym. Wartość 0 wypełni wszystkie otwory w podstawie modelu." -msgid "Detect overhang wall" +#, fuzzy +msgid "Detect overhang walls" msgstr "Wykrywanie ścian nawisu" #, c-format, boost-format @@ -16486,8 +16488,9 @@ msgstr "" msgid "Minimum sparse infill threshold" msgstr "Minimalny próg wypełnienia" +#, fuzzy msgid "" -"Sparse infill area which is smaller than threshold value is replaced by " +"Sparse infill areas smaller than this threshold value are replaced by " "internal solid infill." msgstr "" "Obszar wypełnienia, który jest mniejszy od wartości progowej zostaje " @@ -17239,12 +17242,14 @@ msgstr "" msgid "Nozzle temperature for layers after the initial one." msgstr "Temperatura dyszy dla warstw po początkowej" -msgid "Detect thin wall" +#, fuzzy +msgid "Detect thin walls" msgstr "Wykrywanie cienkich ścian" +#, fuzzy msgid "" -"Detect thin wall which can't contain two line width. And use single line to " -"print. Maybe printed not very well, because it's not closed loop." +"Detect thin walls which can't contain two line widths, and use single line " +"to print. Maybe not printed very well, because it's not a closed loop." msgstr "" "Wykrywaj ściany o grubości jednego obrysu. Są to obszary, gdzie 2 obrysy nie " "zmieszczą się i trzeba będzie połączyć je w jedną linię" @@ -17850,7 +17855,8 @@ msgstr "" "grubość detalu, obrys będzie miał taką samą grubość jak sam element. Jest " "wyrażona w procentach i zostanie obliczona na podstawie średnicy dyszy." -msgid "Detect narrow internal solid infill" +#, fuzzy +msgid "Detect narrow internal solid infills" msgstr "Wykryj wąskie wewnętrzne pełne wypełnienie" msgid "" diff --git a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po index 2148b2f3d2..a5e4502814 100644 --- a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po +++ b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po @@ -15957,7 +15957,7 @@ msgstr "Superfícies superiores" msgid "Topmost surface" msgstr "Superfície superior mais alta" -msgid "All solid layer" +msgid "All solid layers" msgstr "Todas as camadas sólidas" msgid "Ironing Pattern" @@ -16497,7 +16497,7 @@ msgstr "" "Área maxima de um furo na base do modelo antes que ele seja preenchido por " "uma forma cônica. Um valor 0 irá preencher todos os furos do modelo." -msgid "Detect overhang wall" +msgid "Detect overhang walls" msgstr "Detectar paredes salientes" #, c-format, boost-format @@ -17197,11 +17197,11 @@ msgid "Minimum sparse infill threshold" msgstr "Limiar mínimo de preenchimento esparso" msgid "" -"Sparse infill area which is smaller than threshold value is replaced by " +"Sparse infill areas smaller than this threshold value are replaced by " "internal solid infill." msgstr "" -"A área de preenchimento esparso que é menor que o valor limiar é substituída " -"por preenchimento sólido interno." +"Áreas de preenchimento esparso menores que este valor limiar são " +"substituídas por preenchimento sólido interno." msgid "Solid infill" msgstr "Preenchimento sólido" @@ -17980,15 +17980,15 @@ msgstr "" msgid "Nozzle temperature for layers after the initial one." msgstr "Temperatura do bico para camadas após a inicial." -msgid "Detect thin wall" -msgstr "Detectar parede fina" +msgid "Detect thin walls" +msgstr "Detectar paredes finas" msgid "" -"Detect thin wall which can't contain two line width. And use single line to " -"print. Maybe printed not very well, because it's not closed loop." +"Detect thin walls which can't contain two line widths, and use single line " +"to print. Maybe not printed very well, because it's not a closed loop." msgstr "" -"Detecta paredes finas que não podem conter duas larguras de linha. E usa uma " -"linha única para imprimir. Talvez seja impresso não muito bem, porque não é " +"Detecta paredes finas que não podem conter duas larguras de linha, e usa uma " +"linha única para imprimir. Talvez não seja impresso muito bem, porque não é " "uma volta fechada." msgid "" @@ -18625,8 +18625,8 @@ msgstr "" "do que a espessura do elemento, a parede será tão espesso quanto o próprio " "elemento. É expresso como uma porcentagem sobre o diâmetro do bico." -msgid "Detect narrow internal solid infill" -msgstr "Detectar preenchimento sólido interno estreito" +msgid "Detect narrow internal solid infills" +msgstr "Detectar preenchimentos sólidos internos estreitos" msgid "" "This option will auto-detect narrow internal solid infill areas. If enabled, " diff --git a/localization/i18n/ru/OrcaSlicer_ru.po b/localization/i18n/ru/OrcaSlicer_ru.po index 98c2225e9d..7081a80d40 100644 --- a/localization/i18n/ru/OrcaSlicer_ru.po +++ b/localization/i18n/ru/OrcaSlicer_ru.po @@ -16033,7 +16033,8 @@ msgstr "Поверхности" msgid "Topmost surface" msgstr "Верхний слой" -msgid "All solid layer" +#, fuzzy +msgid "All solid layers" msgstr "Сплошные слои" msgid "Ironing Pattern" @@ -16587,7 +16588,8 @@ msgstr "" "материалом конической геометрии. При 0 все отверстия в основании модели " "будут заполнены." -msgid "Detect overhang wall" +#, fuzzy +msgid "Detect overhang walls" msgstr "Обнаруживать нависающие периметры" #, c-format, boost-format @@ -17325,8 +17327,9 @@ msgstr "" msgid "Minimum sparse infill threshold" msgstr "Мин. порог разреженного заполнения" +#, fuzzy msgid "" -"Sparse infill area which is smaller than threshold value is replaced by " +"Sparse infill areas smaller than this threshold value are replaced by " "internal solid infill." msgstr "" "Область с разреженным заполнением, размер которого меньше этого порогового " @@ -18165,12 +18168,14 @@ msgstr "" msgid "Nozzle temperature for layers after the initial one." msgstr "Температура при печати последующих слоёв." -msgid "Detect thin wall" +#, fuzzy +msgid "Detect thin walls" msgstr "Обнаруживать тонкие стенки" +#, fuzzy msgid "" -"Detect thin wall which can't contain two line width. And use single line to " -"print. Maybe printed not very well, because it's not closed loop." +"Detect thin walls which can't contain two line widths, and use single line " +"to print. Maybe not printed very well, because it's not a closed loop." msgstr "" "Обнаруживать стенки, которые можно напечатать только в одну линию. Возможно, " "будет напечатано не очень хорошо, так как это разомкнутый контур.\n" @@ -18852,7 +18857,8 @@ msgstr "" "подогнана под размер элемента, если значение этого параметра меньше его " "ширины. Можно указать процент от диаметра сопла." -msgid "Detect narrow internal solid infill" +#, fuzzy +msgid "Detect narrow internal solid infills" msgstr "Оптимизация заполнения узких мест" msgid "" diff --git a/localization/i18n/sv/OrcaSlicer_sv.po b/localization/i18n/sv/OrcaSlicer_sv.po index 46ab83b2a2..beb302be7f 100644 --- a/localization/i18n/sv/OrcaSlicer_sv.po +++ b/localization/i18n/sv/OrcaSlicer_sv.po @@ -14263,7 +14263,8 @@ msgstr "Top ytor" msgid "Topmost surface" msgstr "Endast högsta ytan" -msgid "All solid layer" +#, fuzzy +msgid "All solid layers" msgstr "Alla solida lager" msgid "Ironing Pattern" @@ -14704,7 +14705,8 @@ msgid "" "conical material. A value of 0 will fill all the holes in the model base." msgstr "" -msgid "Detect overhang wall" +#, fuzzy +msgid "Detect overhang walls" msgstr "Upptäck överhängs vägg" #, c-format, boost-format @@ -15283,8 +15285,9 @@ msgstr "" msgid "Minimum sparse infill threshold" msgstr "Min sparsam ifyllnads gräns" +#, fuzzy msgid "" -"Sparse infill area which is smaller than threshold value is replaced by " +"Sparse infill areas smaller than this threshold value are replaced by " "internal solid infill." msgstr "" "Sparsam ifyllnads ytor som är mindre än detta gränsvärde ersätts med inre " @@ -15939,12 +15942,14 @@ msgstr "" msgid "Nozzle temperature for layers after the initial one." msgstr "Nozzel temperatur efter första lager" -msgid "Detect thin wall" +#, fuzzy +msgid "Detect thin walls" msgstr "Upptäck tunna väggar" +#, fuzzy msgid "" -"Detect thin wall which can't contain two line width. And use single line to " -"print. Maybe printed not very well, because it's not closed loop." +"Detect thin walls which can't contain two line widths, and use single line " +"to print. Maybe not printed very well, because it's not a closed loop." msgstr "" "Upptäck tunna väggar som inte kan ha två linjer och använder en linje för " "att skrivas ut. Utskrifts kvaliteten begränsas efter som det inte är en " @@ -16472,7 +16477,8 @@ msgstr "" "elementet blir väggen lika tjock som själva elementet. Den uttrycks i " "procent av nozzel diametern." -msgid "Detect narrow internal solid infill" +#, fuzzy +msgid "Detect narrow internal solid infills" msgstr "Upptäck tight inre solid ifyllnad" msgid "" diff --git a/localization/i18n/tr/OrcaSlicer_tr.po b/localization/i18n/tr/OrcaSlicer_tr.po index de4e536e05..ccb36862ad 100644 --- a/localization/i18n/tr/OrcaSlicer_tr.po +++ b/localization/i18n/tr/OrcaSlicer_tr.po @@ -15259,7 +15259,8 @@ msgstr "Üst yüzeyler" msgid "Topmost surface" msgstr "En üst yüzey" -msgid "All solid layer" +#, fuzzy +msgid "All solid layers" msgstr "Tamamı katı katman" msgid "Ironing Pattern" @@ -15787,7 +15788,8 @@ msgstr "" "Modelin tabanındaki bir deliğin, konik malzemeyle doldurulmadan önce " "maksimum alanı. 0 değeri, model tabanındaki tüm delikleri dolduracaktır." -msgid "Detect overhang wall" +#, fuzzy +msgid "Detect overhang walls" msgstr "Çıkıntılı duvarı algıla" #, c-format, boost-format @@ -16482,8 +16484,9 @@ msgstr "" msgid "Minimum sparse infill threshold" msgstr "Minimum seyrek dolgu" +#, fuzzy msgid "" -"Sparse infill area which is smaller than threshold value is replaced by " +"Sparse infill areas smaller than this threshold value are replaced by " "internal solid infill." msgstr "" "Eşik değerinden küçük olan seyrek dolgu alanı, yerini iç katı dolguya " @@ -17237,12 +17240,14 @@ msgstr "" msgid "Nozzle temperature for layers after the initial one." msgstr "İlk katmandan sonraki katmanlar için nozul sıcaklığı." -msgid "Detect thin wall" +#, fuzzy +msgid "Detect thin walls" msgstr "İnce duvarı algıla" +#, fuzzy msgid "" -"Detect thin wall which can't contain two line width. And use single line to " -"print. Maybe printed not very well, because it's not closed loop." +"Detect thin walls which can't contain two line widths, and use single line " +"to print. Maybe not printed very well, because it's not a closed loop." msgstr "" "İki çizgi genişliğini içeremeyen ince duvarı tespit edin. Ve yazdırmak için " "tek satır kullanın. Kapalı döngü olmadığından pek iyi basılmamış olabilir." @@ -17867,7 +17872,8 @@ msgstr "" "duvar, özelliğin kendisi kadar kalın olacaktır. Nozul çapına göre yüzde " "olarak ifade edilir." -msgid "Detect narrow internal solid infill" +#, fuzzy +msgid "Detect narrow internal solid infills" msgstr "Dar iç katı dolguyu tespit et" msgid "" diff --git a/localization/i18n/uk/OrcaSlicer_uk.po b/localization/i18n/uk/OrcaSlicer_uk.po index 1f30456817..4409c66475 100644 --- a/localization/i18n/uk/OrcaSlicer_uk.po +++ b/localization/i18n/uk/OrcaSlicer_uk.po @@ -15263,7 +15263,8 @@ msgstr "Верхові поверхні" msgid "Topmost surface" msgstr "Найвища поверхня" -msgid "All solid layer" +#, fuzzy +msgid "All solid layers" msgstr "Весь суцільний шар" msgid "Ironing Pattern" @@ -15780,7 +15781,8 @@ msgstr "" "Максимальна площа отвору в основі моделі перед заповненням його конічним " "матеріалом. Значення 0 заповнює всі отвори в основі моделі." -msgid "Detect overhang wall" +#, fuzzy +msgid "Detect overhang walls" msgstr "Виявлення стінок що нависають" #, c-format, boost-format @@ -16468,8 +16470,9 @@ msgstr "" msgid "Minimum sparse infill threshold" msgstr "Мінімальний поріг часткового заповнення" +#, fuzzy msgid "" -"Sparse infill area which is smaller than threshold value is replaced by " +"Sparse infill areas smaller than this threshold value are replaced by " "internal solid infill." msgstr "" "Ділянки часткового заповнення, менші за порогове значення, замінюються " @@ -17212,12 +17215,14 @@ msgstr "" msgid "Nozzle temperature for layers after the initial one." msgstr "Температура сопла для шарів після першого" -msgid "Detect thin wall" +#, fuzzy +msgid "Detect thin walls" msgstr "Виявлення тонкої стінки" +#, fuzzy msgid "" -"Detect thin wall which can't contain two line width. And use single line to " -"print. Maybe printed not very well, because it's not closed loop." +"Detect thin walls which can't contain two line widths, and use single line " +"to print. Maybe not printed very well, because it's not a closed loop." msgstr "" "Виявляти тонкі стінки, товщина яких менше ніж ширина двох ліній і " "використовувати лише одну лінію для друку. Можуть бути надруковані не дуже " @@ -17815,7 +17820,8 @@ msgstr "" "елемента, то товщина периметра дорівнюватиме товщині самого елемента. Він " "виражається у відсотках від діаметра сопла" -msgid "Detect narrow internal solid infill" +#, fuzzy +msgid "Detect narrow internal solid infills" msgstr "Виявлення вузького внутрішнього суцільного заповнення" msgid "" diff --git a/localization/i18n/vi/OrcaSlicer_vi.po b/localization/i18n/vi/OrcaSlicer_vi.po index 8a01af9b69..1d397ae96a 100644 --- a/localization/i18n/vi/OrcaSlicer_vi.po +++ b/localization/i18n/vi/OrcaSlicer_vi.po @@ -15026,7 +15026,8 @@ msgstr "Bề mặt trên" msgid "Topmost surface" msgstr "Bề mặt trên cùng" -msgid "All solid layer" +#, fuzzy +msgid "All solid layers" msgstr "Tất cả lớp đặc" msgid "Ironing Pattern" @@ -15542,7 +15543,8 @@ msgstr "" "Diện tích tối đa của lỗ ở đáy model trước khi nó được lấp bởi vật liệu hình " "nón. Giá trị 0 sẽ lấp tất cả các lỗ ở đáy model." -msgid "Detect overhang wall" +#, fuzzy +msgid "Detect overhang walls" msgstr "Phát hiện thành nhô" #, c-format, boost-format @@ -16213,8 +16215,9 @@ msgstr "" msgid "Minimum sparse infill threshold" msgstr "Ngưỡng infill thưa tối thiểu" +#, fuzzy msgid "" -"Sparse infill area which is smaller than threshold value is replaced by " +"Sparse infill areas smaller than this threshold value are replaced by " "internal solid infill." msgstr "" "Vùng infill thưa nhỏ hơn giá trị ngưỡng được thay thế bằng infill đặc bên " @@ -16948,12 +16951,14 @@ msgstr "" msgid "Nozzle temperature for layers after the initial one." msgstr "Nhiệt độ đầu phun cho các lớp sau lớp đầu tiên." -msgid "Detect thin wall" +#, fuzzy +msgid "Detect thin walls" msgstr "Phát hiện thành mỏng" +#, fuzzy msgid "" -"Detect thin wall which can't contain two line width. And use single line to " -"print. Maybe printed not very well, because it's not closed loop." +"Detect thin walls which can't contain two line widths, and use single line " +"to print. Maybe not printed very well, because it's not a closed loop." msgstr "" "Phát hiện thành mỏng không thể chứa hai độ rộng đường. Và sử dụng đường đơn " "để in. Có thể in không tốt lắm, vì nó không phải vòng kín." @@ -17560,7 +17565,8 @@ msgstr "" "thành sẽ trở nên dày như tính năng đó. Nó được biểu thị dưới dạng phần trăm " "trên đường kính đầu phun." -msgid "Detect narrow internal solid infill" +#, fuzzy +msgid "Detect narrow internal solid infills" msgstr "Phát hiện infill đặc bên trong hẹp" msgid "" diff --git a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po index 2d7132e55c..c298908081 100644 --- a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po +++ b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po @@ -14570,7 +14570,8 @@ msgstr "顶面" msgid "Topmost surface" msgstr "最顶面" -msgid "All solid layer" +#, fuzzy +msgid "All solid layers" msgstr "所有实心层" msgid "Ironing Pattern" @@ -15044,7 +15045,8 @@ msgstr "" "模型底部的孔洞在被圆锥形材料填充前所允许的最大面积。值为0将填充模型底部的所有" "孔洞。" -msgid "Detect overhang wall" +#, fuzzy +msgid "Detect overhang walls" msgstr "识别悬垂外墙" #, c-format, boost-format @@ -15654,8 +15656,9 @@ msgstr "" msgid "Minimum sparse infill threshold" msgstr "稀疏填充最小阈值" +#, fuzzy msgid "" -"Sparse infill area which is smaller than threshold value is replaced by " +"Sparse infill areas smaller than this threshold value are replaced by " "internal solid infill." msgstr "小于这个阈值的稀疏填充区域将会被内部实心填充替代。" @@ -16342,12 +16345,14 @@ msgstr "" msgid "Nozzle temperature for layers after the initial one." msgstr "除首层外的其它层的喷嘴温度" -msgid "Detect thin wall" +#, fuzzy +msgid "Detect thin walls" msgstr "检查薄壁" +#, fuzzy msgid "" -"Detect thin wall which can't contain two line width. And use single line to " -"print. Maybe printed not very well, because it's not closed loop." +"Detect thin walls which can't contain two line widths, and use single line " +"to print. Maybe not printed very well, because it's not a closed loop." msgstr "" "检查无法容纳两条走线的薄壁。使用单条走线打印。可能会打地不是很好,因为走线不" "再闭合。" @@ -16910,7 +16915,8 @@ msgstr "" "用于替换模型上的细小特征(根据最小特征尺寸决定)的墙线宽。如果最小墙宽度小于" "最小特征宽度,则墙将变得和特征本身一样厚。本设置以喷嘴直径的百分比表示。" -msgid "Detect narrow internal solid infill" +#, fuzzy +msgid "Detect narrow internal solid infills" msgstr "识别狭窄的内部实心填充" msgid "" diff --git a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po index 825847a73a..577aa7cc1f 100644 --- a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po +++ b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po @@ -14694,7 +14694,8 @@ msgstr "頂面" msgid "Topmost surface" msgstr "最頂面" -msgid "All solid layer" +#, fuzzy +msgid "All solid layers" msgstr "所有實心層" msgid "Ironing Pattern" @@ -15174,7 +15175,8 @@ msgstr "" "模型底部的孔洞在被圓錐形材料填充前所允許的最大面積。值為 0 將填充模型底部的所" "有孔洞。" -msgid "Detect overhang wall" +#, fuzzy +msgid "Detect overhang walls" msgstr "檢測懸空外牆" #, c-format, boost-format @@ -15786,8 +15788,9 @@ msgstr "" msgid "Minimum sparse infill threshold" msgstr "稀疏填充最小臨界值" +#, fuzzy msgid "" -"Sparse infill area which is smaller than threshold value is replaced by " +"Sparse infill areas smaller than this threshold value are replaced by " "internal solid infill." msgstr "小於設定閾值的稀疏填充區域將替換為內部實心填充" @@ -16482,12 +16485,14 @@ msgstr "" msgid "Nozzle temperature for layers after the initial one." msgstr "除首層外的其它層的噴嘴溫度" -msgid "Detect thin wall" +#, fuzzy +msgid "Detect thin walls" msgstr "檢查薄壁" +#, fuzzy msgid "" -"Detect thin wall which can't contain two line width. And use single line to " -"print. Maybe printed not very well, because it's not closed loop." +"Detect thin walls which can't contain two line widths, and use single line " +"to print. Maybe not printed very well, because it's not a closed loop." msgstr "" "檢查無法容納兩條走線的薄壁。使用單條走線列印。可能會打地不是很好,因為走線不" "再閉合" @@ -17045,7 +17050,8 @@ msgstr "" "設定替代模型中細薄特徵(依據最小特徵尺寸)的牆體寬度。若最小牆寬小於特徵厚" "度,牆體將與特徵的厚度一致。此值以噴嘴直徑的百分比表示" -msgid "Detect narrow internal solid infill" +#, fuzzy +msgid "Detect narrow internal solid infills" msgstr "識別狹窄內部實心填充" msgid "" diff --git a/resources/profiles/Qidi/filament/Q2/Generic PC @Q2.json b/resources/profiles/Qidi/filament/Q2/Generic PC @Q2.json index fb50534800..e3fee379ff 100644 --- a/resources/profiles/Qidi/filament/Q2/Generic PC @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/Generic PC @Q2.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_q_common", "from": "system", "setting_id": "GFSA04", - "filament_id": "GFB99", + "filament_id": "QD_1_0_23", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/Q2/Generic PC @Q2C.json b/resources/profiles/Qidi/filament/Q2/Generic PC @Q2C.json index b23b635181..ccdfdddd3c 100644 --- a/resources/profiles/Qidi/filament/Q2/Generic PC @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/Generic PC @Q2C.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFB99", + "filament_id": "QD_2_0_23", "setting_id": "GFSA04", "name": "Generic PC@Q2C-Series", "from": "system", diff --git a/resources/profiles/Qidi/filament/X4/Generic PC @X-Max 4.json b/resources/profiles/Qidi/filament/X4/Generic PC @X-Max 4.json index ffebfa765f..21dc071697 100644 --- a/resources/profiles/Qidi/filament/X4/Generic PC @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/Generic PC @X-Max 4.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFB99", + "filament_id": "QD_3_0_23", "setting_id": "GFSA04", "name": "Generic PC@X-Max 4-Series", "from": "system", diff --git a/resources/profiles/Qidi/process/0.06mm Standard @Qidi Q2 0.2 nozzle.json b/resources/profiles/Qidi/process/0.06mm Standard @Qidi Q2 0.2 nozzle.json index a4f25c6ace..ed3a101665 100644 --- a/resources/profiles/Qidi/process/0.06mm Standard @Qidi Q2 0.2 nozzle.json +++ b/resources/profiles/Qidi/process/0.06mm Standard @Qidi Q2 0.2 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP024", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2 0.2 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.06mm Standard @Qidi Q2C 0.2 nozzle.json b/resources/profiles/Qidi/process/0.06mm Standard @Qidi Q2C 0.2 nozzle.json index 41706b0975..2eef948b43 100644 --- a/resources/profiles/Qidi/process/0.06mm Standard @Qidi Q2C 0.2 nozzle.json +++ b/resources/profiles/Qidi/process/0.06mm Standard @Qidi Q2C 0.2 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP024", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2C 0.2 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.06mm Standard @Qidi XPlus4 0.2 nozzle.json b/resources/profiles/Qidi/process/0.06mm Standard @Qidi XPlus4 0.2 nozzle.json index 9854ba2431..022f5dfde8 100644 --- a/resources/profiles/Qidi/process/0.06mm Standard @Qidi XPlus4 0.2 nozzle.json +++ b/resources/profiles/Qidi/process/0.06mm Standard @Qidi XPlus4 0.2 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP024", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi X-Plus 4 0.2 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.08mm Extra Fine @X-Max 4 0.2 nozzle.json b/resources/profiles/Qidi/process/0.08mm Extra Fine @X-Max 4 0.2 nozzle.json index d3c238398a..081ea69ea6 100644 --- a/resources/profiles/Qidi/process/0.08mm Extra Fine @X-Max 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/process/0.08mm Extra Fine @X-Max 4 0.2 nozzle.json @@ -10,7 +10,7 @@ "bridge_flow": "1", "default_acceleration": ["4000"], "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "initial_layer_infill_speed": ["70"], "initial_layer_line_width": "0.25", "initial_layer_print_height": "0.1", diff --git a/resources/profiles/Qidi/process/0.08mm Extra Fine @X-Max 4.json b/resources/profiles/Qidi/process/0.08mm Extra Fine @X-Max 4.json index a0ab9987e8..981b6ff989 100644 --- a/resources/profiles/Qidi/process/0.08mm Extra Fine @X-Max 4.json +++ b/resources/profiles/Qidi/process/0.08mm Extra Fine @X-Max 4.json @@ -10,7 +10,7 @@ "bridge_flow": "1", "default_acceleration": ["10000"], "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "gap_infill_speed": ["350"], "initial_layer_infill_speed": ["105"], "initial_layer_speed": ["50"], diff --git a/resources/profiles/Qidi/process/0.08mm Standard @Qidi Q2 0.2 nozzle.json b/resources/profiles/Qidi/process/0.08mm Standard @Qidi Q2 0.2 nozzle.json index 50af2c198f..bc0f1f8323 100644 --- a/resources/profiles/Qidi/process/0.08mm Standard @Qidi Q2 0.2 nozzle.json +++ b/resources/profiles/Qidi/process/0.08mm Standard @Qidi Q2 0.2 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP025", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2 0.2 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.08mm Standard @Qidi Q2C 0.2 nozzle.json b/resources/profiles/Qidi/process/0.08mm Standard @Qidi Q2C 0.2 nozzle.json index dc4924ee41..45ee7d49de 100644 --- a/resources/profiles/Qidi/process/0.08mm Standard @Qidi Q2C 0.2 nozzle.json +++ b/resources/profiles/Qidi/process/0.08mm Standard @Qidi Q2C 0.2 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP025", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2C 0.2 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.08mm Standard @Qidi XPlus4 0.2 nozzle.json b/resources/profiles/Qidi/process/0.08mm Standard @Qidi XPlus4 0.2 nozzle.json index 7dfa363390..117e8ddaf1 100644 --- a/resources/profiles/Qidi/process/0.08mm Standard @Qidi XPlus4 0.2 nozzle.json +++ b/resources/profiles/Qidi/process/0.08mm Standard @Qidi XPlus4 0.2 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP025", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi X-Plus 4 0.2 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.10mm Standard @Qidi Q2 0.2 nozzle.json b/resources/profiles/Qidi/process/0.10mm Standard @Qidi Q2 0.2 nozzle.json index 46f8d1231e..9b58d8fa33 100644 --- a/resources/profiles/Qidi/process/0.10mm Standard @Qidi Q2 0.2 nozzle.json +++ b/resources/profiles/Qidi/process/0.10mm Standard @Qidi Q2 0.2 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP007", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2 0.2 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.10mm Standard @Qidi Q2C 0.2 nozzle.json b/resources/profiles/Qidi/process/0.10mm Standard @Qidi Q2C 0.2 nozzle.json index 378dad8510..9f82619f53 100644 --- a/resources/profiles/Qidi/process/0.10mm Standard @Qidi Q2C 0.2 nozzle.json +++ b/resources/profiles/Qidi/process/0.10mm Standard @Qidi Q2C 0.2 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP007", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2C 0.2 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.10mm Standard @Qidi XPlus4 0.2 nozzle.json b/resources/profiles/Qidi/process/0.10mm Standard @Qidi XPlus4 0.2 nozzle.json index 26e37936d8..486dc67ae9 100644 --- a/resources/profiles/Qidi/process/0.10mm Standard @Qidi XPlus4 0.2 nozzle.json +++ b/resources/profiles/Qidi/process/0.10mm Standard @Qidi XPlus4 0.2 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP007", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi X-Plus 4 0.2 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.10mm Standard @X-Max 4 0.2 nozzle.json b/resources/profiles/Qidi/process/0.10mm Standard @X-Max 4 0.2 nozzle.json index 2df08a18ef..3924e00ff9 100644 --- a/resources/profiles/Qidi/process/0.10mm Standard @X-Max 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/process/0.10mm Standard @X-Max 4 0.2 nozzle.json @@ -10,7 +10,7 @@ "bridge_flow": "1", "default_acceleration": ["10000"], "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "initial_layer_infill_speed": ["70"], "initial_layer_line_width": "0.25", "initial_layer_print_height": "0.1", diff --git a/resources/profiles/Qidi/process/0.12mm Balanced Quality @X-Max 4 0.2 nozzle.json b/resources/profiles/Qidi/process/0.12mm Balanced Quality @X-Max 4 0.2 nozzle.json index accc43854f..d96b15218b 100644 --- a/resources/profiles/Qidi/process/0.12mm Balanced Quality @X-Max 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/process/0.12mm Balanced Quality @X-Max 4 0.2 nozzle.json @@ -10,7 +10,7 @@ "bridge_flow": "1", "default_acceleration": ["10000"], "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "initial_layer_infill_speed": ["70"], "initial_layer_line_width": "0.25", "initial_layer_print_height": "0.1", diff --git a/resources/profiles/Qidi/process/0.12mm Fine @Qidi Q2.json b/resources/profiles/Qidi/process/0.12mm Fine @Qidi Q2.json index 7714a78270..494f3e84fa 100644 --- a/resources/profiles/Qidi/process/0.12mm Fine @Qidi Q2.json +++ b/resources/profiles/Qidi/process/0.12mm Fine @Qidi Q2.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP004", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2 0.4 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.12mm Fine @Qidi Q2C.json b/resources/profiles/Qidi/process/0.12mm Fine @Qidi Q2C.json index ef93a94e14..e7223561d5 100644 --- a/resources/profiles/Qidi/process/0.12mm Fine @Qidi Q2C.json +++ b/resources/profiles/Qidi/process/0.12mm Fine @Qidi Q2C.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP004", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2C 0.4 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.12mm Fine @Qidi XPlus4.json b/resources/profiles/Qidi/process/0.12mm Fine @Qidi XPlus4.json index 2c16b9c133..0d55ba3d3c 100644 --- a/resources/profiles/Qidi/process/0.12mm Fine @Qidi XPlus4.json +++ b/resources/profiles/Qidi/process/0.12mm Fine @Qidi XPlus4.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP004", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi X-Plus 4 0.4 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.12mm Fine @X-Max 4.json b/resources/profiles/Qidi/process/0.12mm Fine @X-Max 4.json index 15ac8fe659..c99a3bce80 100644 --- a/resources/profiles/Qidi/process/0.12mm Fine @X-Max 4.json +++ b/resources/profiles/Qidi/process/0.12mm Fine @X-Max 4.json @@ -10,7 +10,7 @@ "bridge_flow": "1", "default_acceleration": ["10000"], "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "gap_infill_speed": ["350"], "initial_layer_infill_speed": ["105"], "initial_layer_speed": ["50"], diff --git a/resources/profiles/Qidi/process/0.12mm Standard @Qidi Q2 0.2 nozzle.json b/resources/profiles/Qidi/process/0.12mm Standard @Qidi Q2 0.2 nozzle.json index 74c4c9fc3b..f730629b7d 100644 --- a/resources/profiles/Qidi/process/0.12mm Standard @Qidi Q2 0.2 nozzle.json +++ b/resources/profiles/Qidi/process/0.12mm Standard @Qidi Q2 0.2 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP026", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2 0.2 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.12mm Standard @Qidi Q2C 0.2 nozzle.json b/resources/profiles/Qidi/process/0.12mm Standard @Qidi Q2C 0.2 nozzle.json index 99d13a5d62..90b0423a0d 100644 --- a/resources/profiles/Qidi/process/0.12mm Standard @Qidi Q2C 0.2 nozzle.json +++ b/resources/profiles/Qidi/process/0.12mm Standard @Qidi Q2C 0.2 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP026", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2C 0.2 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.12mm Standard @Qidi XPlus4 0.2 nozzle.json b/resources/profiles/Qidi/process/0.12mm Standard @Qidi XPlus4 0.2 nozzle.json index dbe672dd29..18cbb546b7 100644 --- a/resources/profiles/Qidi/process/0.12mm Standard @Qidi XPlus4 0.2 nozzle.json +++ b/resources/profiles/Qidi/process/0.12mm Standard @Qidi XPlus4 0.2 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP026", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi X-Plus 4 0.2 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.14mm Standard @Qidi Q2 0.2 nozzle.json b/resources/profiles/Qidi/process/0.14mm Standard @Qidi Q2 0.2 nozzle.json index b76af06149..51e0172709 100644 --- a/resources/profiles/Qidi/process/0.14mm Standard @Qidi Q2 0.2 nozzle.json +++ b/resources/profiles/Qidi/process/0.14mm Standard @Qidi Q2 0.2 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP027", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2 0.2 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.14mm Standard @Qidi Q2C 0.2 nozzle.json b/resources/profiles/Qidi/process/0.14mm Standard @Qidi Q2C 0.2 nozzle.json index 1c1a62120b..cb817e03b9 100644 --- a/resources/profiles/Qidi/process/0.14mm Standard @Qidi Q2C 0.2 nozzle.json +++ b/resources/profiles/Qidi/process/0.14mm Standard @Qidi Q2C 0.2 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP027", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2C 0.2 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.14mm Standard @Qidi XPlus4 0.2 nozzle.json b/resources/profiles/Qidi/process/0.14mm Standard @Qidi XPlus4 0.2 nozzle.json index 40fbb35a2b..a2aa98b462 100644 --- a/resources/profiles/Qidi/process/0.14mm Standard @Qidi XPlus4 0.2 nozzle.json +++ b/resources/profiles/Qidi/process/0.14mm Standard @Qidi XPlus4 0.2 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP027", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi X-Plus 4 0.2 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.16mm Balanced Quality @X-Max 4.json b/resources/profiles/Qidi/process/0.16mm Balanced Quality @X-Max 4.json index f2193c9ba8..0b652a05fb 100644 --- a/resources/profiles/Qidi/process/0.16mm Balanced Quality @X-Max 4.json +++ b/resources/profiles/Qidi/process/0.16mm Balanced Quality @X-Max 4.json @@ -10,7 +10,7 @@ "bridge_flow": "1", "default_acceleration": ["4000"], "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "gap_infill_speed": ["250"], "inner_wall_acceleration": ["5000"], "internal_solid_infill_speed": ["200"], diff --git a/resources/profiles/Qidi/process/0.16mm Optimal @Qidi Q2.json b/resources/profiles/Qidi/process/0.16mm Optimal @Qidi Q2.json index f97195b998..ca6ee72e77 100644 --- a/resources/profiles/Qidi/process/0.16mm Optimal @Qidi Q2.json +++ b/resources/profiles/Qidi/process/0.16mm Optimal @Qidi Q2.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP004", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2 0.4 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.16mm Optimal @Qidi Q2C.json b/resources/profiles/Qidi/process/0.16mm Optimal @Qidi Q2C.json index 04c66770c6..57c5244c10 100644 --- a/resources/profiles/Qidi/process/0.16mm Optimal @Qidi Q2C.json +++ b/resources/profiles/Qidi/process/0.16mm Optimal @Qidi Q2C.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP004", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2C 0.4 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XPlus4.json b/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XPlus4.json index 51bf8f7792..e5275c8967 100644 --- a/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XPlus4.json +++ b/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XPlus4.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP004", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi X-Plus 4 0.4 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.16mm Standard @X-Max 4.json b/resources/profiles/Qidi/process/0.16mm Standard @X-Max 4.json index 653631df18..d65f058f71 100644 --- a/resources/profiles/Qidi/process/0.16mm Standard @X-Max 4.json +++ b/resources/profiles/Qidi/process/0.16mm Standard @X-Max 4.json @@ -10,7 +10,7 @@ "bridge_flow": "1", "default_acceleration": ["10000"], "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "gap_infill_speed": ["300"], "inner_wall_acceleration": ["5000"], "inner_wall_speed": ["300"], diff --git a/resources/profiles/Qidi/process/0.18mm Balanced Quality @X-Max 4 0.6 nozzle.json b/resources/profiles/Qidi/process/0.18mm Balanced Quality @X-Max 4 0.6 nozzle.json index 25e4edfa4f..e1a0cd22cc 100644 --- a/resources/profiles/Qidi/process/0.18mm Balanced Quality @X-Max 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/process/0.18mm Balanced Quality @X-Max 4 0.6 nozzle.json @@ -9,7 +9,7 @@ "bridge_speed": ["30"], "default_acceleration": ["10000"], "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "gap_infill_speed": ["50"], "initial_layer_infill_speed": ["55"], "initial_layer_line_width": "0.62", diff --git a/resources/profiles/Qidi/process/0.18mm Standard @Qidi Q2 0.6 nozzle.json b/resources/profiles/Qidi/process/0.18mm Standard @Qidi Q2 0.6 nozzle.json index b1bf6ec7ba..7e2e5d1885 100644 --- a/resources/profiles/Qidi/process/0.18mm Standard @Qidi Q2 0.6 nozzle.json +++ b/resources/profiles/Qidi/process/0.18mm Standard @Qidi Q2 0.6 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP028", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2 0.6 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.18mm Standard @Qidi Q2C 0.6 nozzle.json b/resources/profiles/Qidi/process/0.18mm Standard @Qidi Q2C 0.6 nozzle.json index e86bf6dba0..ec12f7937d 100644 --- a/resources/profiles/Qidi/process/0.18mm Standard @Qidi Q2C 0.6 nozzle.json +++ b/resources/profiles/Qidi/process/0.18mm Standard @Qidi Q2C 0.6 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP028", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2C 0.6 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.18mm Standard @Qidi XPlus4 0.6 nozzle.json b/resources/profiles/Qidi/process/0.18mm Standard @Qidi XPlus4 0.6 nozzle.json index 258b1243a2..50799f06d0 100644 --- a/resources/profiles/Qidi/process/0.18mm Standard @Qidi XPlus4 0.6 nozzle.json +++ b/resources/profiles/Qidi/process/0.18mm Standard @Qidi XPlus4 0.6 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP028", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi X-Plus 4 0.6 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.20mm Balanced Strength @X-Max 4.json b/resources/profiles/Qidi/process/0.20mm Balanced Strength @X-Max 4.json index 5ea9cc80c4..cfee275cd8 100644 --- a/resources/profiles/Qidi/process/0.20mm Balanced Strength @X-Max 4.json +++ b/resources/profiles/Qidi/process/0.20mm Balanced Strength @X-Max 4.json @@ -9,7 +9,7 @@ "bridge_flow": "1", "default_acceleration": ["10000"], "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "gap_infill_speed": ["250"], "inner_wall_acceleration": ["5000"], "inner_wall_speed": ["300"], diff --git a/resources/profiles/Qidi/process/0.20mm Standard @Qidi Q2.json b/resources/profiles/Qidi/process/0.20mm Standard @Qidi Q2.json index 0b110b518c..4848d23c8f 100644 --- a/resources/profiles/Qidi/process/0.20mm Standard @Qidi Q2.json +++ b/resources/profiles/Qidi/process/0.20mm Standard @Qidi Q2.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP004", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2 0.4 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.20mm Standard @Qidi Q2C.json b/resources/profiles/Qidi/process/0.20mm Standard @Qidi Q2C.json index 02678202ff..6fbb62b2ab 100644 --- a/resources/profiles/Qidi/process/0.20mm Standard @Qidi Q2C.json +++ b/resources/profiles/Qidi/process/0.20mm Standard @Qidi Q2C.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP004", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2C 0.4 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.20mm Standard @Qidi XPlus4.json b/resources/profiles/Qidi/process/0.20mm Standard @Qidi XPlus4.json index fb22dafb11..c43c921b0e 100644 --- a/resources/profiles/Qidi/process/0.20mm Standard @Qidi XPlus4.json +++ b/resources/profiles/Qidi/process/0.20mm Standard @Qidi XPlus4.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP004", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi X-Plus 4 0.4 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.20mm Standard @X-Max 4.json b/resources/profiles/Qidi/process/0.20mm Standard @X-Max 4.json index 5c197b9c41..608e3365e2 100644 --- a/resources/profiles/Qidi/process/0.20mm Standard @X-Max 4.json +++ b/resources/profiles/Qidi/process/0.20mm Standard @X-Max 4.json @@ -8,7 +8,7 @@ "bridge_flow": "1", "default_acceleration": ["10000"], "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "gap_infill_speed": ["250"], "inner_wall_speed": ["300"], "inner_wall_acceleration": ["5000"], diff --git a/resources/profiles/Qidi/process/0.24mm Balanced Quality @X-Max 4 0.8 nozzle.json b/resources/profiles/Qidi/process/0.24mm Balanced Quality @X-Max 4 0.8 nozzle.json index 6960badde1..f50e217c87 100644 --- a/resources/profiles/Qidi/process/0.24mm Balanced Quality @X-Max 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/process/0.24mm Balanced Quality @X-Max 4 0.8 nozzle.json @@ -9,7 +9,7 @@ "bridge_speed": ["30"], "default_acceleration": ["10000"], "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "gap_infill_speed": ["50"], "initial_layer_infill_speed": ["55"], "initial_layer_line_width": "0.82", diff --git a/resources/profiles/Qidi/process/0.24mm Balanced Strength @X-Max 4 0.6 nozzle.json b/resources/profiles/Qidi/process/0.24mm Balanced Strength @X-Max 4 0.6 nozzle.json index 1ed8b9efa1..92302d053e 100644 --- a/resources/profiles/Qidi/process/0.24mm Balanced Strength @X-Max 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/process/0.24mm Balanced Strength @X-Max 4 0.6 nozzle.json @@ -9,7 +9,7 @@ "bridge_speed": ["30"], "default_acceleration": ["10000"], "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "gap_infill_speed": ["50"], "initial_layer_infill_speed": ["55"], "initial_layer_line_width": "0.62", diff --git a/resources/profiles/Qidi/process/0.24mm Draft @Qidi Q2.json b/resources/profiles/Qidi/process/0.24mm Draft @Qidi Q2.json index 3b01b6ee25..9b912483f7 100644 --- a/resources/profiles/Qidi/process/0.24mm Draft @Qidi Q2.json +++ b/resources/profiles/Qidi/process/0.24mm Draft @Qidi Q2.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP004", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2 0.4 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.24mm Draft @Qidi Q2C.json b/resources/profiles/Qidi/process/0.24mm Draft @Qidi Q2C.json index 8d905be4a9..c2cb43315d 100644 --- a/resources/profiles/Qidi/process/0.24mm Draft @Qidi Q2C.json +++ b/resources/profiles/Qidi/process/0.24mm Draft @Qidi Q2C.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP004", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2C 0.4 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.24mm Draft @Qidi XPlus4.json b/resources/profiles/Qidi/process/0.24mm Draft @Qidi XPlus4.json index d38b7ec0e0..118af9c624 100644 --- a/resources/profiles/Qidi/process/0.24mm Draft @Qidi XPlus4.json +++ b/resources/profiles/Qidi/process/0.24mm Draft @Qidi XPlus4.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP004", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi X-Plus 4 0.4 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.24mm Standard @Qidi Q2 0.6 nozzle.json b/resources/profiles/Qidi/process/0.24mm Standard @Qidi Q2 0.6 nozzle.json index 3eae347cee..fd2d00255d 100644 --- a/resources/profiles/Qidi/process/0.24mm Standard @Qidi Q2 0.6 nozzle.json +++ b/resources/profiles/Qidi/process/0.24mm Standard @Qidi Q2 0.6 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP029", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2 0.6 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.24mm Standard @Qidi Q2 0.8 nozzle.json b/resources/profiles/Qidi/process/0.24mm Standard @Qidi Q2 0.8 nozzle.json index c2a0a753ac..039ce49226 100644 --- a/resources/profiles/Qidi/process/0.24mm Standard @Qidi Q2 0.8 nozzle.json +++ b/resources/profiles/Qidi/process/0.24mm Standard @Qidi Q2 0.8 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP032", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2 0.8 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.24mm Standard @Qidi Q2C 0.6 nozzle.json b/resources/profiles/Qidi/process/0.24mm Standard @Qidi Q2C 0.6 nozzle.json index 068e7897e9..3895e959c8 100644 --- a/resources/profiles/Qidi/process/0.24mm Standard @Qidi Q2C 0.6 nozzle.json +++ b/resources/profiles/Qidi/process/0.24mm Standard @Qidi Q2C 0.6 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP029", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2C 0.6 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.24mm Standard @Qidi Q2C 0.8 nozzle.json b/resources/profiles/Qidi/process/0.24mm Standard @Qidi Q2C 0.8 nozzle.json index 9f71a3d522..3c4d203446 100644 --- a/resources/profiles/Qidi/process/0.24mm Standard @Qidi Q2C 0.8 nozzle.json +++ b/resources/profiles/Qidi/process/0.24mm Standard @Qidi Q2C 0.8 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP032", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2C 0.8 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.24mm Standard @Qidi XPlus4 0.6 nozzle.json b/resources/profiles/Qidi/process/0.24mm Standard @Qidi XPlus4 0.6 nozzle.json index 2b22057534..4bc59ad603 100644 --- a/resources/profiles/Qidi/process/0.24mm Standard @Qidi XPlus4 0.6 nozzle.json +++ b/resources/profiles/Qidi/process/0.24mm Standard @Qidi XPlus4 0.6 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP029", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi X-Plus 4 0.6 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.24mm Standard @Qidi XPlus4 0.8 nozzle.json b/resources/profiles/Qidi/process/0.24mm Standard @Qidi XPlus4 0.8 nozzle.json index 9b68afbbe8..5585d47610 100644 --- a/resources/profiles/Qidi/process/0.24mm Standard @Qidi XPlus4 0.8 nozzle.json +++ b/resources/profiles/Qidi/process/0.24mm Standard @Qidi XPlus4 0.8 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP032", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi X-Plus 4 0.8 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.24mm Standard @X-Max 4.json b/resources/profiles/Qidi/process/0.24mm Standard @X-Max 4.json index 8198908e93..727157f999 100644 --- a/resources/profiles/Qidi/process/0.24mm Standard @X-Max 4.json +++ b/resources/profiles/Qidi/process/0.24mm Standard @X-Max 4.json @@ -8,7 +8,7 @@ "bridge_flow": "1", "default_acceleration": ["10000"], "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "gap_infill_speed": ["230"], "inner_wall_acceleration": ["5000"], "inner_wall_speed": ["230"], diff --git a/resources/profiles/Qidi/process/0.25mm Draft @Qidi Q2.json b/resources/profiles/Qidi/process/0.25mm Draft @Qidi Q2.json index 62f7d391be..4045189fbd 100644 --- a/resources/profiles/Qidi/process/0.25mm Draft @Qidi Q2.json +++ b/resources/profiles/Qidi/process/0.25mm Draft @Qidi Q2.json @@ -6,7 +6,7 @@ "setting_id": "GP004", "instantiation": "true", "adaptive_layer_height": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "reduce_crossing_wall": "0", "layer_height": "0.25", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Qidi/process/0.25mm Draft @Qidi Q2C.json b/resources/profiles/Qidi/process/0.25mm Draft @Qidi Q2C.json index 7650e7eb8f..762b64abc1 100644 --- a/resources/profiles/Qidi/process/0.25mm Draft @Qidi Q2C.json +++ b/resources/profiles/Qidi/process/0.25mm Draft @Qidi Q2C.json @@ -6,7 +6,7 @@ "setting_id": "GP004", "instantiation": "true", "adaptive_layer_height": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "reduce_crossing_wall": "0", "layer_height": "0.25", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Qidi/process/0.25mm Draft @Qidi XPlus4.json b/resources/profiles/Qidi/process/0.25mm Draft @Qidi XPlus4.json index 606d80135a..29b53739cf 100644 --- a/resources/profiles/Qidi/process/0.25mm Draft @Qidi XPlus4.json +++ b/resources/profiles/Qidi/process/0.25mm Draft @Qidi XPlus4.json @@ -6,7 +6,7 @@ "setting_id": "GP004", "instantiation": "true", "adaptive_layer_height": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "reduce_crossing_wall": "0", "layer_height": "0.25", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Qidi/process/0.28mm Extra Draft @Qidi Q2.json b/resources/profiles/Qidi/process/0.28mm Extra Draft @Qidi Q2.json index 7fb7dfe92f..b695144d83 100644 --- a/resources/profiles/Qidi/process/0.28mm Extra Draft @Qidi Q2.json +++ b/resources/profiles/Qidi/process/0.28mm Extra Draft @Qidi Q2.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP004", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2 0.4 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.28mm Extra Draft @Qidi Q2C.json b/resources/profiles/Qidi/process/0.28mm Extra Draft @Qidi Q2C.json index 97c3abb3d6..9252c9b65f 100644 --- a/resources/profiles/Qidi/process/0.28mm Extra Draft @Qidi Q2C.json +++ b/resources/profiles/Qidi/process/0.28mm Extra Draft @Qidi Q2C.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP004", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2C 0.4 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.28mm Extra Draft @Qidi XPlus4.json b/resources/profiles/Qidi/process/0.28mm Extra Draft @Qidi XPlus4.json index 9a5fbc9c81..981ff6f9ad 100644 --- a/resources/profiles/Qidi/process/0.28mm Extra Draft @Qidi XPlus4.json +++ b/resources/profiles/Qidi/process/0.28mm Extra Draft @Qidi XPlus4.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP004", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi X-Plus 4 0.4 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi Q2.json b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi Q2.json index 5c796a9e1f..1b8c5ba6ec 100644 --- a/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi Q2.json +++ b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi Q2.json @@ -6,7 +6,7 @@ "setting_id": "GP004", "instantiation": "true", "adaptive_layer_height": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "reduce_crossing_wall": "0", "layer_height": "0.3", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi Q2C.json b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi Q2C.json index 7fbf18cfd4..c7655e5a17 100644 --- a/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi Q2C.json +++ b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi Q2C.json @@ -6,7 +6,7 @@ "setting_id": "GP004", "instantiation": "true", "adaptive_layer_height": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "reduce_crossing_wall": "0", "layer_height": "0.3", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XPlus4.json b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XPlus4.json index 5d08b003d6..ee191e0154 100644 --- a/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XPlus4.json +++ b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XPlus4.json @@ -6,7 +6,7 @@ "setting_id": "GP004", "instantiation": "true", "adaptive_layer_height": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "reduce_crossing_wall": "0", "layer_height": "0.3", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Qidi/process/0.30mm Standard @Qidi Q2 0.6 nozzle.json b/resources/profiles/Qidi/process/0.30mm Standard @Qidi Q2 0.6 nozzle.json index 14c772018b..2cfd393a6f 100644 --- a/resources/profiles/Qidi/process/0.30mm Standard @Qidi Q2 0.6 nozzle.json +++ b/resources/profiles/Qidi/process/0.30mm Standard @Qidi Q2 0.6 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP010", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2 0.6 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.30mm Standard @Qidi Q2C 0.6 nozzle.json b/resources/profiles/Qidi/process/0.30mm Standard @Qidi Q2C 0.6 nozzle.json index f9e444b169..0d407fbd77 100644 --- a/resources/profiles/Qidi/process/0.30mm Standard @Qidi Q2C 0.6 nozzle.json +++ b/resources/profiles/Qidi/process/0.30mm Standard @Qidi Q2C 0.6 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP010", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2C 0.6 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.30mm Standard @Qidi XPlus4 0.6 nozzle.json b/resources/profiles/Qidi/process/0.30mm Standard @Qidi XPlus4 0.6 nozzle.json index 18f97db991..15f7a527b4 100644 --- a/resources/profiles/Qidi/process/0.30mm Standard @Qidi XPlus4 0.6 nozzle.json +++ b/resources/profiles/Qidi/process/0.30mm Standard @Qidi XPlus4 0.6 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP010", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi X-Plus 4 0.6 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.30mm Standard @X-Max 4 0.6 nozzle.json b/resources/profiles/Qidi/process/0.30mm Standard @X-Max 4 0.6 nozzle.json index a8cb22ee91..c7c37d0eba 100644 --- a/resources/profiles/Qidi/process/0.30mm Standard @X-Max 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/process/0.30mm Standard @X-Max 4 0.6 nozzle.json @@ -9,7 +9,7 @@ "bridge_speed": ["30"], "default_acceleration": ["10000"], "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "gap_infill_speed": ["50"], "initial_layer_infill_speed": ["55"], "initial_layer_line_width": "0.62", diff --git a/resources/profiles/Qidi/process/0.32mm Balanced Strength @X-Max 4 0.8 nozzle.json b/resources/profiles/Qidi/process/0.32mm Balanced Strength @X-Max 4 0.8 nozzle.json index 7f014a50e8..1d47f304cd 100644 --- a/resources/profiles/Qidi/process/0.32mm Balanced Strength @X-Max 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/process/0.32mm Balanced Strength @X-Max 4 0.8 nozzle.json @@ -9,7 +9,7 @@ "bridge_speed": ["50"], "default_acceleration": ["10000"], "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "gap_infill_speed": ["50"], "initial_layer_infill_speed": ["55"], "initial_layer_line_width": "0.82", diff --git a/resources/profiles/Qidi/process/0.32mm Standard @Qidi Q2 0.8 nozzle.json b/resources/profiles/Qidi/process/0.32mm Standard @Qidi Q2 0.8 nozzle.json index f19dbcbd16..ba5517a7d0 100644 --- a/resources/profiles/Qidi/process/0.32mm Standard @Qidi Q2 0.8 nozzle.json +++ b/resources/profiles/Qidi/process/0.32mm Standard @Qidi Q2 0.8 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP033", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2 0.8 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.32mm Standard @Qidi Q2C 0.8 nozzle.json b/resources/profiles/Qidi/process/0.32mm Standard @Qidi Q2C 0.8 nozzle.json index c70c02bf9d..ab04a2d2c3 100644 --- a/resources/profiles/Qidi/process/0.32mm Standard @Qidi Q2C 0.8 nozzle.json +++ b/resources/profiles/Qidi/process/0.32mm Standard @Qidi Q2C 0.8 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP033", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2C 0.8 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.32mm Standard @Qidi XPlus4 0.8 nozzle.json b/resources/profiles/Qidi/process/0.32mm Standard @Qidi XPlus4 0.8 nozzle.json index e31a97e07a..29730bf03a 100644 --- a/resources/profiles/Qidi/process/0.32mm Standard @Qidi XPlus4 0.8 nozzle.json +++ b/resources/profiles/Qidi/process/0.32mm Standard @Qidi XPlus4 0.8 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP033", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi X-Plus 4 0.8 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.36mm Standard @Qidi Q2 0.6 nozzle.json b/resources/profiles/Qidi/process/0.36mm Standard @Qidi Q2 0.6 nozzle.json index b1dd3f5e7a..b6ea10d3bd 100644 --- a/resources/profiles/Qidi/process/0.36mm Standard @Qidi Q2 0.6 nozzle.json +++ b/resources/profiles/Qidi/process/0.36mm Standard @Qidi Q2 0.6 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP030", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2 0.6 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.36mm Standard @Qidi Q2C 0.6 nozzle.json b/resources/profiles/Qidi/process/0.36mm Standard @Qidi Q2C 0.6 nozzle.json index 729e005e7d..1701a10ab8 100644 --- a/resources/profiles/Qidi/process/0.36mm Standard @Qidi Q2C 0.6 nozzle.json +++ b/resources/profiles/Qidi/process/0.36mm Standard @Qidi Q2C 0.6 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP030", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2C 0.6 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.36mm Standard @Qidi XPlus4 0.6 nozzle.json b/resources/profiles/Qidi/process/0.36mm Standard @Qidi XPlus4 0.6 nozzle.json index 8fbe3ac0ee..0c7c54cf65 100644 --- a/resources/profiles/Qidi/process/0.36mm Standard @Qidi XPlus4 0.6 nozzle.json +++ b/resources/profiles/Qidi/process/0.36mm Standard @Qidi XPlus4 0.6 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP030", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi X-Plus 4 0.6 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.40mm Standard @Qidi Q2 0.8 nozzle.json b/resources/profiles/Qidi/process/0.40mm Standard @Qidi Q2 0.8 nozzle.json index 5b878b1135..95d6352a42 100644 --- a/resources/profiles/Qidi/process/0.40mm Standard @Qidi Q2 0.8 nozzle.json +++ b/resources/profiles/Qidi/process/0.40mm Standard @Qidi Q2 0.8 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP009", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2 0.8 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.40mm Standard @Qidi Q2C 0.8 nozzle.json b/resources/profiles/Qidi/process/0.40mm Standard @Qidi Q2C 0.8 nozzle.json index f416bcda98..720c5f1c03 100644 --- a/resources/profiles/Qidi/process/0.40mm Standard @Qidi Q2C 0.8 nozzle.json +++ b/resources/profiles/Qidi/process/0.40mm Standard @Qidi Q2C 0.8 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP009", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2C 0.8 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.40mm Standard @Qidi XPlus4 0.8 nozzle.json b/resources/profiles/Qidi/process/0.40mm Standard @Qidi XPlus4 0.8 nozzle.json index 8464a0c095..8fd66091a5 100644 --- a/resources/profiles/Qidi/process/0.40mm Standard @Qidi XPlus4 0.8 nozzle.json +++ b/resources/profiles/Qidi/process/0.40mm Standard @Qidi XPlus4 0.8 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP009", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi X-Plus 4 0.8 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.40mm Standard @X-Max 4 0.8 nozzle.json b/resources/profiles/Qidi/process/0.40mm Standard @X-Max 4 0.8 nozzle.json index 9c9af356c5..6270e74e3b 100644 --- a/resources/profiles/Qidi/process/0.40mm Standard @X-Max 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/process/0.40mm Standard @X-Max 4 0.8 nozzle.json @@ -9,7 +9,7 @@ "bridge_speed": ["30"], "default_acceleration": ["10000"], "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "gap_infill_speed": ["50"], "initial_layer_infill_speed": ["55"], "initial_layer_line_width": "0.82", diff --git a/resources/profiles/Qidi/process/0.42mm Standard @Qidi Q2 0.6 nozzle.json b/resources/profiles/Qidi/process/0.42mm Standard @Qidi Q2 0.6 nozzle.json index 52e9b76f42..fa2e6f3321 100644 --- a/resources/profiles/Qidi/process/0.42mm Standard @Qidi Q2 0.6 nozzle.json +++ b/resources/profiles/Qidi/process/0.42mm Standard @Qidi Q2 0.6 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP031", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2 0.6 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.42mm Standard @Qidi Q2C 0.6 nozzle.json b/resources/profiles/Qidi/process/0.42mm Standard @Qidi Q2C 0.6 nozzle.json index 69f14e90bd..f9c2a17cb1 100644 --- a/resources/profiles/Qidi/process/0.42mm Standard @Qidi Q2C 0.6 nozzle.json +++ b/resources/profiles/Qidi/process/0.42mm Standard @Qidi Q2C 0.6 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP031", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2C 0.6 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.42mm Standard @Qidi XPlus4 0.6 nozzle.json b/resources/profiles/Qidi/process/0.42mm Standard @Qidi XPlus4 0.6 nozzle.json index 24c05f6a40..426092a9a5 100644 --- a/resources/profiles/Qidi/process/0.42mm Standard @Qidi XPlus4 0.6 nozzle.json +++ b/resources/profiles/Qidi/process/0.42mm Standard @Qidi XPlus4 0.6 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP031", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi X-Plus 4 0.6 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.48mm Standard @Qidi Q2 0.8 nozzle.json b/resources/profiles/Qidi/process/0.48mm Standard @Qidi Q2 0.8 nozzle.json index 149ae2a287..589516f05c 100644 --- a/resources/profiles/Qidi/process/0.48mm Standard @Qidi Q2 0.8 nozzle.json +++ b/resources/profiles/Qidi/process/0.48mm Standard @Qidi Q2 0.8 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP034", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2 0.8 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.48mm Standard @Qidi Q2C 0.8 nozzle.json b/resources/profiles/Qidi/process/0.48mm Standard @Qidi Q2C 0.8 nozzle.json index 73ee492d6c..5eebf2f97a 100644 --- a/resources/profiles/Qidi/process/0.48mm Standard @Qidi Q2C 0.8 nozzle.json +++ b/resources/profiles/Qidi/process/0.48mm Standard @Qidi Q2C 0.8 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP034", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2C 0.8 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.48mm Standard @Qidi XPlus4 0.8 nozzle.json b/resources/profiles/Qidi/process/0.48mm Standard @Qidi XPlus4 0.8 nozzle.json index abdb0ff7b3..a3e4dbe450 100644 --- a/resources/profiles/Qidi/process/0.48mm Standard @Qidi XPlus4 0.8 nozzle.json +++ b/resources/profiles/Qidi/process/0.48mm Standard @Qidi XPlus4 0.8 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP034", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi X-Plus 4 0.8 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.56mm Standard @Qidi Q2 0.8 nozzle.json b/resources/profiles/Qidi/process/0.56mm Standard @Qidi Q2 0.8 nozzle.json index da8d2233a5..84017f1c8f 100644 --- a/resources/profiles/Qidi/process/0.56mm Standard @Qidi Q2 0.8 nozzle.json +++ b/resources/profiles/Qidi/process/0.56mm Standard @Qidi Q2 0.8 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP035", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2 0.8 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.56mm Standard @Qidi Q2C 0.8 nozzle.json b/resources/profiles/Qidi/process/0.56mm Standard @Qidi Q2C 0.8 nozzle.json index 6506b8b33c..8aeb38ddf5 100644 --- a/resources/profiles/Qidi/process/0.56mm Standard @Qidi Q2C 0.8 nozzle.json +++ b/resources/profiles/Qidi/process/0.56mm Standard @Qidi Q2C 0.8 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP035", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2C 0.8 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.56mm Standard @Qidi XPlus4 0.8 nozzle.json b/resources/profiles/Qidi/process/0.56mm Standard @Qidi XPlus4 0.8 nozzle.json index d8370a3beb..0de2493058 100644 --- a/resources/profiles/Qidi/process/0.56mm Standard @Qidi XPlus4 0.8 nozzle.json +++ b/resources/profiles/Qidi/process/0.56mm Standard @Qidi XPlus4 0.8 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP035", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi X-Plus 4 0.8 nozzle" ] diff --git a/resources/profiles/Qidi/process/fdm_process_n_common.json b/resources/profiles/Qidi/process/fdm_process_n_common.json index 64db71f946..ee9bdbcaaa 100644 --- a/resources/profiles/Qidi/process/fdm_process_n_common.json +++ b/resources/profiles/Qidi/process/fdm_process_n_common.json @@ -24,7 +24,7 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0", "embedding_wall_into_infill": "0", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "enable_height_slowdown": ["0"], "enable_overhang_speed": ["1"], "enable_prime_tower": "1", diff --git a/scripts/build_flatpak_with_docker.sh b/scripts/build_flatpak_with_docker.sh new file mode 100755 index 0000000000..8e490f8f8b --- /dev/null +++ b/scripts/build_flatpak_with_docker.sh @@ -0,0 +1,218 @@ +#!/usr/bin/env bash +# +# Build OrcaSlicer Flatpak locally using Docker with the same container image +# as the CI (build_all.yml). +# +# Usage: +# ./scripts/build_flatpak_with_docker.sh [--arch ] [--no-debug-info] +# +# Requirements: +# - Docker (or Podman with docker compatibility) +# +# The resulting .flatpak bundle is placed in the project root. + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" + +# ---------- defaults ---------- +ARCH="$(uname -m)" +NO_DEBUG_INFO=false +NO_PULL=false +FORCE_CLEAN=true +PRIVILEGED=false +CONTAINER_IMAGE="ghcr.io/flathub-infra/flatpak-github-actions:gnome-49" + +normalize_arch() { + case "$1" in + arm64|aarch64) + echo "aarch64" + ;; + x86_64|amd64) + echo "x86_64" + ;; + *) + echo "$1" + ;; + esac +} + +# ---------- parse args ---------- +while [[ $# -gt 0 ]]; do + case "$1" in + --arch) + ARCH="$2"; shift 2 ;; + --no-debug-info) + NO_DEBUG_INFO=true; shift ;; + --no-pull) + NO_PULL=true; shift ;; + --keep-build) + FORCE_CLEAN=false; shift ;; + --privileged) + PRIVILEGED=true; shift ;; + --image) + CONTAINER_IMAGE="$2"; shift 2 ;; + -h|--help) + echo "Usage: $0 [--arch ] [--no-debug-info] [--no-pull] [--keep-build] [--privileged] [--image ]" + exit 0 ;; + *) + echo "Unknown option: $1" >&2; exit 1 ;; + esac +done + +ARCH="$(normalize_arch "$ARCH")" + +case "$ARCH" in + x86_64|aarch64) + ;; + *) + echo "Unsupported architecture: $ARCH. Supported: x86_64, aarch64" >&2 + exit 1 + ;; +esac + +# ---------- version & commit ---------- +cd "$PROJECT_ROOT" + +VER_PURE=$(grep 'set(SoftFever_VERSION' version.inc | cut -d '"' -f2) +if [ -z "$VER_PURE" ]; then + echo "Error: could not extract version from version.inc" >&2 + exit 1 +fi +VER="V${VER_PURE}" +GIT_COMMIT_HASH=$(git rev-parse HEAD) +BUNDLE_NAME="OrcaSlicer-Linux-flatpak_${VER}_${ARCH}.flatpak" + +echo "=== OrcaSlicer Flatpak Build ===" +echo " Version: ${VER} (${VER_PURE})" +echo " Commit: ${GIT_COMMIT_HASH}" +echo " Arch: ${ARCH}" +echo " Image: ${CONTAINER_IMAGE}" +echo " Bundle: ${BUNDLE_NAME}" +echo " Debug info: $([ "$NO_DEBUG_INFO" = true ] && echo "disabled" || echo "enabled")" +echo " Privileged: $([ "$PRIVILEGED" = true ] && echo "enabled" || echo "disabled")" +echo " ccache: enabled" +echo "" + +# ---------- prepare manifest ---------- +MANIFEST_SRC="scripts/flatpak/io.github.orcaslicer.OrcaSlicer.yml" +MANIFEST_DOCKER="scripts/flatpak/io.github.orcaslicer.OrcaSlicer.docker.yml" +# Ensure cleanup on exit (success or failure) +trap 'rm -f "$PROJECT_ROOT/$MANIFEST_DOCKER"' EXIT + +# Build Docker-specific manifest with customizations (piped to avoid sed -i portability) +{ + if [ "$NO_DEBUG_INFO" = true ]; then + sed '/^build-options:/a\ + no-debuginfo: true\ + strip: true +' + else + cat + fi +} < "$MANIFEST_SRC" | \ +sed "/name: OrcaSlicer/{ + n + s|^\([[:space:]]*\)buildsystem: simple|\1buildsystem: simple\\ +\1build-options:\\ +\1 env:\\ +\1 git_commit_hash: \"$GIT_COMMIT_HASH\"| +}" > "$MANIFEST_DOCKER" + +# ---------- run build in Docker ---------- +DOCKER="${DOCKER:-docker}" + +if [ "$NO_PULL" = false ]; then + echo "=== Pulling container image ===" + "$DOCKER" pull "$CONTAINER_IMAGE" +fi + +FORCE_CLEAN_FLAG="" +if [ "$FORCE_CLEAN" = true ]; then + FORCE_CLEAN_FLAG="--force-clean" +fi + +DOCKER_RUN_ARGS=(run --rm) +if [ "$PRIVILEGED" = true ]; then + DOCKER_RUN_ARGS+=(--privileged) +fi + +# Pass build parameters as env vars so the inner script doesn't need +# variable expansion from the outer shell (avoids quoting issues). +echo "=== Starting Flatpak build inside container ===" +"$DOCKER" "${DOCKER_RUN_ARGS[@]}" \ + -v "$PROJECT_ROOT":/src:Z \ + -w /src \ + -e "BUILD_ARCH=$ARCH" \ + -e "BUNDLE_NAME=$BUNDLE_NAME" \ + -e "FORCE_CLEAN_FLAG=$FORCE_CLEAN_FLAG" \ + "$CONTAINER_IMAGE" \ + bash -s <<'EOF' +set -euo pipefail + +format_duration() { + local total_seconds="$1" + local hours=$((total_seconds / 3600)) + local minutes=$(((total_seconds % 3600) / 60)) + local seconds=$((total_seconds % 60)) + + printf "%02d:%02d:%02d" "$hours" "$minutes" "$seconds" +} + +overall_start=$(date +%s) +install_start=$overall_start + +# Install required SDK extensions (not pre-installed in the container image) +flatpak install -y --noninteractive --arch="$BUILD_ARCH" flathub \ + org.gnome.Platform//49 \ + org.gnome.Sdk//49 \ + org.freedesktop.Sdk.Extension.llvm21//25.08 || true + +install_end=$(date +%s) +install_duration=$((install_end - install_start)) + +builder_start=$(date +%s) +flatpak-builder $FORCE_CLEAN_FLAG \ + --verbose \ + --ccache \ + --disable-rofiles-fuse \ + --state-dir=.flatpak-builder \ + --arch="$BUILD_ARCH" \ + --repo=flatpak-repo \ + flatpak-build \ + scripts/flatpak/io.github.orcaslicer.OrcaSlicer.docker.yml +builder_end=$(date +%s) +builder_duration=$((builder_end - builder_start)) + +bundle_start=$(date +%s) +flatpak build-bundle \ + --arch="$BUILD_ARCH" \ + flatpak-repo \ + "$BUNDLE_NAME" \ + io.github.orcaslicer.OrcaSlicer +bundle_end=$(date +%s) +bundle_duration=$((bundle_end - bundle_start)) + +# Fix ownership so output files are not root-owned on the host +owner="$(stat -c %u:%g /src)" +chown -R "$owner" .flatpak-builder flatpak-build flatpak-repo "$BUNDLE_NAME" 2>/dev/null || true + +overall_end=$(date +%s) +overall_duration=$((overall_end - overall_start)) + +echo "" +echo "=== Build complete ===" +echo "=== Build Stats ===" +echo " Runtime install: $(format_duration "$install_duration")" +echo " flatpak-builder: $(format_duration "$builder_duration")" +echo " Bundle export: $(format_duration "$bundle_duration")" +echo " Overall: $(format_duration "$overall_duration")" +EOF + +echo "" +echo "=== Flatpak bundle ready ===" +echo " ${PROJECT_ROOT}/${BUNDLE_NAME}" +echo "" +echo "Install with:" +echo " flatpak install --user ${BUNDLE_NAME}" \ No newline at end of file diff --git a/scripts/flatpak/.gitignore b/scripts/flatpak/.gitignore index 49269ac6b0..3b01f15d01 100644 --- a/scripts/flatpak/.gitignore +++ b/scripts/flatpak/.gitignore @@ -1,2 +1,3 @@ builddir .flatpak-builder +*.docker.yml diff --git a/scripts/flatpak/entrypoint b/scripts/flatpak/entrypoint index 38fd86f451..f8e108e85f 100644 --- a/scripts/flatpak/entrypoint +++ b/scripts/flatpak/entrypoint @@ -4,6 +4,8 @@ grep -q org.freedesktop.Platform.GL.nvidia /.flatpak-info && export WEBKIT_DISABLE_DMABUF_RENDERER=1 # Work-around https://github.com/bambulab/BambuStudio/issues/3440 -export LC_ALL=C.UTF-8 +# Use LC_NUMERIC instead of LC_ALL to prevent decimal separator issues +# while preserving the user's language/locale for translations. +export LC_NUMERIC=C exec /app/bin/orca-slicer "$@" diff --git a/scripts/flatpak/io.github.orcaslicer.OrcaSlicer.yml b/scripts/flatpak/io.github.orcaslicer.OrcaSlicer.yml index b161f99477..814636e142 100644 --- a/scripts/flatpak/io.github.orcaslicer.OrcaSlicer.yml +++ b/scripts/flatpak/io.github.orcaslicer.OrcaSlicer.yml @@ -117,10 +117,9 @@ modules: - -DCMAKE_SHARED_LINKER_FLAGS=-fuse-ld=lld - -DCMAKE_MODULE_LINKER_FLAGS=-fuse-ld=lld sources: - - type: git - url: https://github.com/SoftFever/Orca-deps-wxWidgets - tag: orca-3.1.5-1 - commit: 139e4f2a62a9d1c40bdcf36523d94a517b14ca79 + - type: archive + url: https://github.com/SoftFever/Orca-deps-wxWidgets/archive/refs/tags/orca-3.1.5-1.tar.gz + sha256: 1dc9d3865d899cb71c27a7e549aa5491e832ef6e81a7b6653ccb11f9c37fa99d # OrcaSlicer C++ dependencies (built offline with pre-downloaded archives) - name: orca_deps @@ -333,6 +332,11 @@ modules: - install -Dm644 LICENSE.txt /app/share/licenses/${FLATPAK_ID}/LICENSE.txt + - | # Install fonts into fontconfig-scanned directory so Pango finds them + # before initialization (avoids ensure_faces crash from AddPrivateFont) + install -Dm644 -t /app/share/fonts/OrcaSlicer/ resources/fonts/*.ttf + fc-cache -f /app/share/fonts/OrcaSlicer/ + sources: # OrcaSlicer source tree (specific dirs to avoid copying .git from worktree) - type: dir @@ -347,6 +351,9 @@ modules: - type: dir path: ../../src dest: src + - type: dir + path: ../../localization + dest: localization - type: file path: ../../CMakeLists.txt diff --git a/src/libslic3r/Feature/Interlocking/InterlockingGenerator.cpp b/src/libslic3r/Feature/Interlocking/InterlockingGenerator.cpp index a3e6cd21b0..726ee2ffd8 100644 --- a/src/libslic3r/Feature/Interlocking/InterlockingGenerator.cpp +++ b/src/libslic3r/Feature/Interlocking/InterlockingGenerator.cpp @@ -23,10 +23,11 @@ template<> struct hash namespace Slic3r { -void InterlockingGenerator::generate_interlocking_structure(PrintObject* print_object) +void InterlockingGenerator::generate_interlocking_structure(PrintObject* print_object, const std::function& throw_on_cancel) { const auto& config = print_object->config(); - if (!config.interlocking_beam) { + // Check if interlocking is enabled, and avoid errors like division by zero due to invalid configuration. + if (!config.interlocking_beam || config.interlocking_beam_layer_count < 1 || config.interlocking_depth < 1 || config.interlocking_beam_width < EPSILON ) { return; } @@ -55,8 +56,10 @@ void InterlockingGenerator::generate_interlocking_structure(PrintObject* print_o continue; } + throw_on_cancel(); + InterlockingGenerator gen(*print_object, region_a_index, region_b_index, beam_width, boundary_avoidance, rotation, cell_size, beam_layer_count, - interface_dilation, air_dilation, air_filtering); + interface_dilation, air_dilation, air_filtering, throw_on_cancel); gen.generateInterlockingStructure(); } } @@ -108,12 +111,14 @@ void InterlockingGenerator::handleThinAreas(const std::unordered_set } } for (auto& near_interlock : near_interlock_per_layer) { + throw_on_cancel(); near_interlock = offset(union_(closing(near_interlock, rounding_errors)), detect); polygons_rotate(near_interlock, rotation); } // Only alter layers when they are present in both meshes, zip should take care if that. for (size_t layer_nr = 0; layer_nr < print_object.layer_count(); layer_nr++){ + throw_on_cancel(); auto layer = print_object.get_layer(layer_nr); ExPolygons polys_a = to_expolygons(layer->get_region(region_a_index)->slices.surfaces); ExPolygons polys_b = to_expolygons(layer->get_region(region_b_index)->slices.surfaces); @@ -199,7 +204,8 @@ void InterlockingGenerator::addBoundaryCells(const std::vector& lay const DilationKernel& kernel, std::unordered_set& cells) const { - auto voxel_emplacer = [&cells](GridPoint3 p) { + auto voxel_emplacer = [this, &cells](GridPoint3 p) { + this->throw_on_cancel(); if (p.z() < 0) { return true; } @@ -313,6 +319,7 @@ void InterlockingGenerator::applyMicrostructureToOutlines(const std::unordered_s for (size_t region_idx = 0; region_idx < 2; region_idx++) { const size_t region = (region_idx == 0) ? region_a_index : region_b_index; for (size_t layer_nr = 0; layer_nr < max_layer_count; layer_nr++) { + throw_on_cancel(); ExPolygons layer_outlines = layer_regions[layer_nr]; expolygons_rotate(layer_outlines, unapply_rotation); diff --git a/src/libslic3r/Feature/Interlocking/InterlockingGenerator.hpp b/src/libslic3r/Feature/Interlocking/InterlockingGenerator.hpp index 6f331fb8ef..e6b79f9bc8 100644 --- a/src/libslic3r/Feature/Interlocking/InterlockingGenerator.hpp +++ b/src/libslic3r/Feature/Interlocking/InterlockingGenerator.hpp @@ -45,7 +45,7 @@ public: /*! * Generate an interlocking structure between each two adjacent meshes. */ - static void generate_interlocking_structure(PrintObject* print_object); + static void generate_interlocking_structure(PrintObject* print_object, const std::function& throw_on_cancel); private: /*! @@ -75,7 +75,8 @@ private: const coord_t beam_layer_count, const DilationKernel& interface_dilation, const DilationKernel& air_dilation, - const bool air_filtering) + const bool air_filtering, + const std::function& throw_on_cancel) : print_object(print_object) , region_a_index(region_a_index) , region_b_index(region_b_index) @@ -88,6 +89,7 @@ private: , interface_dilation(interface_dilation) , air_dilation(air_dilation) , air_filtering(air_filtering) + , throw_on_cancel(throw_on_cancel) {} /*! Given two polygons, return the parts that border on air, and grow 'perpendicular' up to 'detect' distance. @@ -165,6 +167,8 @@ private: // Whether to fully remove all of the interlocking cells which would be visible on the outside. If no air filtering then those cells // will be cut off midway in a beam. const bool air_filtering; + + const std::function& throw_on_cancel; }; } // namespace Slic3r diff --git a/src/libslic3r/Fill/Fill.cpp b/src/libslic3r/Fill/Fill.cpp index 500eb944ac..9d9962dbc8 100644 --- a/src/libslic3r/Fill/Fill.cpp +++ b/src/libslic3r/Fill/Fill.cpp @@ -882,6 +882,7 @@ std::vector group_fills(const Layer &layer, LockRegionParam &lock_p if (surface.is_top()) { params.pattern = region_config.top_surface_pattern.value; params.density = float(region_config.top_surface_density); + if (params.density <= 0.0f) continue; } else { // Surface is bottom params.pattern = region_config.bottom_surface_pattern.value; params.density = float(region_config.bottom_surface_density); diff --git a/src/libslic3r/GCode/ToolOrdering.cpp b/src/libslic3r/GCode/ToolOrdering.cpp index 2fed1924ac..d4784c5278 100644 --- a/src/libslic3r/GCode/ToolOrdering.cpp +++ b/src/libslic3r/GCode/ToolOrdering.cpp @@ -1321,19 +1321,18 @@ void ToolOrdering::reorder_extruders_for_minimum_flush_volume(bool reorder_first return false; }; - if (m_print->is_BBL_printer() || number_of_extruders == 1){ + auto maps_without_group = filament_maps; + for (auto& item : maps_without_group) + item = 0; + reorder_filaments_for_minimum_flush_volume( filament_lists, - filament_maps, + m_print->is_BBL_printer() ? filament_maps : maps_without_group, // non-bbl printers do not support filament group yet layer_filaments, nozzle_flush_mtx, get_custom_seq, &filament_sequences ); - } else { - // For non-bbl multi-extruder printers we don't support filament group yet, so we keep the layer sequence because we don't flush based on order - filament_sequences = layer_filaments; - } auto curr_flush_info = calc_filament_change_info_by_toolorder(print_config, filament_maps, nozzle_flush_mtx, filament_sequences); if (nozzle_nums <= 1) @@ -1349,9 +1348,6 @@ void ToolOrdering::reorder_extruders_for_minimum_flush_volume(bool reorder_first // always calculate the info by one extruder { std::vector>filament_sequences_one_extruder; - auto maps_without_group = filament_maps; - for (auto& item : maps_without_group) - item = 0; reorder_filaments_for_minimum_flush_volume( filament_lists, maps_without_group, diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 80308156a8..50be57e0f8 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -3979,7 +3979,7 @@ void PrintConfigDef::init_fff_params() def->enum_labels.push_back(L("No ironing")); def->enum_labels.push_back(L("Top surfaces")); def->enum_labels.push_back(L("Topmost surface")); - def->enum_labels.push_back(L("All solid layer")); + def->enum_labels.push_back(L("All solid layers")); def->mode = comAdvanced; def->set_default_value(new ConfigOptionEnum(IroningType::NoIroning)); @@ -4561,7 +4561,7 @@ void PrintConfigDef::init_fff_params() def->set_default_value(new ConfigOptionFloat(0.)); def = this->add("detect_overhang_wall", coBool); - def->label = L("Detect overhang wall"); + def->label = L("Detect overhang walls"); def->category = L("Quality"); def->tooltip = L("Detect the overhang percentage relative to line width and use different speed to print. " "For 100%% overhang, bridge speed is used."); @@ -5311,7 +5311,7 @@ void PrintConfigDef::init_fff_params() def = this->add("minimum_sparse_infill_area", coFloat); def->label = L("Minimum sparse infill threshold"); def->category = L("Strength"); - def->tooltip = L("Sparse infill area which is smaller than threshold value is replaced by internal solid infill."); + def->tooltip = L("Sparse infill areas smaller than this threshold value are replaced by internal solid infill."); def->sidetext = L(u8"mm²"); // square milimeters, CIS languages need translation def->min = 0; def->mode = comAdvanced; @@ -6163,10 +6163,10 @@ void PrintConfigDef::init_fff_params() def->set_default_value(new ConfigOptionPoints{}); def = this->add("detect_thin_wall", coBool); - def->label = L("Detect thin wall"); + def->label = L("Detect thin walls"); def->category = L("Strength"); - def->tooltip = L("Detect thin wall which can't contain two line width. And use single line to print. " - "Maybe printed not very well, because it's not closed loop."); + def->tooltip = L("Detect thin walls which can't contain two line widths, and use single line to print. " + "Maybe not printed very well, because it's not a closed loop."); def->mode = comAdvanced; def->set_default_value(new ConfigOptionBool(false)); @@ -6777,7 +6777,7 @@ void PrintConfigDef::init_fff_params() } def = this->add("detect_narrow_internal_solid_infill", coBool); - def->label = L("Detect narrow internal solid infill"); + def->label = L("Detect narrow internal solid infills"); def->category = L("Strength"); def->tooltip = L("This option will auto-detect narrow internal solid infill areas. " "If enabled, the concentric pattern will be used for the area to speed up printing. " diff --git a/src/libslic3r/PrintObjectSlice.cpp b/src/libslic3r/PrintObjectSlice.cpp index 532307414d..2d67ac0939 100644 --- a/src/libslic3r/PrintObjectSlice.cpp +++ b/src/libslic3r/PrintObjectSlice.cpp @@ -1212,7 +1212,7 @@ void PrintObject::slice_volumes() apply_fuzzy_skin_segmentation(*this, [print]() { print->throw_if_canceled(); }); } - InterlockingGenerator::generate_interlocking_structure(this); + InterlockingGenerator::generate_interlocking_structure(this, [print]() { print->throw_if_canceled(); }); m_print->throw_if_canceled(); BOOST_LOG_TRIVIAL(debug) << "Slicing volumes - make_slices in parallel - begin"; diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 157b168372..04334c73c5 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -6199,7 +6199,7 @@ static const wxLanguageInfo* linux_get_existing_locale_language(const wxLanguage if (! it->empty()) { const std::string &locale = *it; const wxLanguageInfo* lang = wxLocale::FindLanguageInfo(from_u8(locale)); - if (wxLocale::IsAvailable(lang->Language)) + if (lang != nullptr && wxLocale::IsAvailable(lang->Language)) return lang; } return language; @@ -6241,7 +6241,10 @@ bool GUI_App::select_language() names.Alloc(language_infos.size()); // Some valid language should be selected since the application start up. - const wxLanguage current_language = wxLanguage(m_wxLocale->GetLanguage()); + const wxString active_language_code = current_language_code(); + const wxLanguageInfo* active_language_info = wxLocale::FindLanguageInfo(active_language_code); + const wxLanguage current_language = active_language_info != nullptr ? wxLanguage(active_language_info->Language) : wxLanguage(m_wxLocale->GetLanguage()); + const wxString active_lang_prefix = active_language_code.BeforeFirst('_'); int init_selection = -1; int init_selection_alt = -1; int init_selection_default = -1; @@ -6249,9 +6252,9 @@ bool GUI_App::select_language() if (wxLanguage(language_infos[i]->Language) == current_language) // The dictionary matches the active language and country. init_selection = i; - else if ((language_infos[i]->CanonicalName.BeforeFirst('_') == m_wxLocale->GetCanonicalName().BeforeFirst('_')) || + else if ((language_infos[i]->CanonicalName.BeforeFirst('_') == active_lang_prefix) || // if the active language is Slovak, mark the Czech language as active. - (language_infos[i]->CanonicalName.BeforeFirst('_') == "cs" && m_wxLocale->GetCanonicalName().BeforeFirst('_') == "sk")) + (language_infos[i]->CanonicalName.BeforeFirst('_') == "cs" && active_lang_prefix == "sk")) // The dictionary matches the active language, it does not necessarily match the country. init_selection_alt = i; if (language_infos[i]->CanonicalName.BeforeFirst('_') == "en") @@ -6369,7 +6372,10 @@ bool GUI_App::load_language(wxString language, bool initial) language_info = wxLocale::GetLanguageInfo(wxLANGUAGE_ENGLISH_US); } - BOOST_LOG_TRIVIAL(trace) << boost::format("Switching wxLocales to %1%") % language_info->CanonicalName.ToUTF8().data(); + const wxLanguageInfo *translation_language_info = language_info; + const wxString requested_language_code = translation_language_info->CanonicalName; + const wxLanguageInfo *locale_language_info = translation_language_info; + BOOST_LOG_TRIVIAL(trace) << boost::format("Requested translation language %1%") % requested_language_code.ToUTF8().data(); // Select language for locales. This language may be different from the language of the dictionary. //if (language_info == m_language_info_best || language_info == m_language_info_system) { @@ -6382,8 +6388,8 @@ bool GUI_App::load_language(wxString language, bool initial) // language_info = m_language_info_system; // Alternate language code. - wxLanguage language_dict = wxLanguage(language_info->Language); - if (language_info->CanonicalName.BeforeFirst('_') == "sk") { + wxLanguage language_dict = wxLanguage(translation_language_info->Language); + if (translation_language_info->CanonicalName.BeforeFirst('_') == "sk") { // Slovaks understand Czech well. Give them the Czech translation. language_dict = wxLANGUAGE_CZECH; BOOST_LOG_TRIVIAL(info) << "Using Czech dictionaries for Slovak language"; @@ -6392,19 +6398,34 @@ bool GUI_App::load_language(wxString language, bool initial) #ifdef __linux__ // If we can't find this locale , try to use different one for the language // instead of just reporting that it is impossible to switch. - if (! wxLocale::IsAvailable(language_info->Language) && m_language_info_system) { - std::string original_lang = into_u8(language_info->CanonicalName); - language_info = linux_get_existing_locale_language(language_info, m_language_info_system); - BOOST_LOG_TRIVIAL(info) << boost::format("Can't switch language to %1% (missing locales). Using %2% instead.") - % original_lang % language_info->CanonicalName.ToUTF8().data(); + if (!wxLocale::IsAvailable(locale_language_info->Language) && m_language_info_system) { + std::string original_lang = into_u8(locale_language_info->CanonicalName); + locale_language_info = linux_get_existing_locale_language(locale_language_info, m_language_info_system); + if (locale_language_info != nullptr && locale_language_info != translation_language_info) { + BOOST_LOG_TRIVIAL(info) << boost::format("Can't use locale %1% directly (missing locales). Using locale %2% instead.") + % original_lang % locale_language_info->CanonicalName.ToUTF8().data(); + } + } + + if (locale_language_info == nullptr || !wxLocale::IsAvailable(locale_language_info->Language)) { + auto try_locale = [](const wxLanguageInfo* candidate) -> const wxLanguageInfo* { + return (candidate && wxLocale::IsAvailable(candidate->Language)) ? candidate : nullptr; + }; + const wxLanguageInfo* fallback_locale_info = + try_locale(m_wxLocale ? wxLocale::GetLanguageInfo(wxLanguage(m_wxLocale->GetLanguage())) : nullptr); + if (!fallback_locale_info) fallback_locale_info = try_locale(m_language_info_system); + if (!fallback_locale_info) fallback_locale_info = try_locale(m_language_info_best); + if (!fallback_locale_info) fallback_locale_info = try_locale(wxLocale::GetLanguageInfo(wxLANGUAGE_ENGLISH_US)); + if (!fallback_locale_info) fallback_locale_info = try_locale(wxLocale::GetLanguageInfo(wxLANGUAGE_ENGLISH_UK)); + if (fallback_locale_info != nullptr) { + BOOST_LOG_TRIVIAL(info) << boost::format("Using fallback locale %1% while keeping translation dictionary %2%.") + % fallback_locale_info->CanonicalName.ToUTF8().data() % requested_language_code.ToUTF8().data(); + locale_language_info = fallback_locale_info; + } } #endif - if (! wxLocale::IsAvailable(language_info->Language)&&initial) { - language_info = wxLocale::GetLanguageInfo(wxLANGUAGE_ENGLISH_UK); - app_config->set("language", language_info->CanonicalName.ToUTF8().data()); - } - else if (initial) { + if (initial) { // bbs supported languages //TODO: use a global one with Preference //wxLanguage supported_languages[]{ @@ -6438,9 +6459,11 @@ bool GUI_App::load_language(wxString language, bool initial) //} } - if (! wxLocale::IsAvailable(language_info->Language)) { + BOOST_LOG_TRIVIAL(trace) << boost::format("Switching wxLocales to %1%") % locale_language_info->CanonicalName.ToUTF8().data(); + + if (!wxLocale::IsAvailable(locale_language_info->Language)) { // Loading the language dictionary failed. - wxString message = "Switching Orca Slicer to language " + language_info->CanonicalName + " failed."; + wxString message = "Switching Orca Slicer to language " + requested_language_code + " failed."; #if !defined(_WIN32) && !defined(__APPLE__) // 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"; @@ -6458,12 +6481,13 @@ bool GUI_App::load_language(wxString language, bool initial) //FIXME wxWidgets cause havoc if the current locale is deleted. We just forget it causing memory leaks for now. m_wxLocale.release(); m_wxLocale = Slic3r::make_unique(); - m_wxLocale->Init(language_info->Language); + m_wxLocale->Init(locale_language_info->Language); // Override language at the active wxTranslations class (which is stored in the active m_wxLocale) // to load possibly different dictionary, for example, load Czech dictionary for Slovak language. wxTranslations::Get()->SetLanguage(language_dict); m_wxLocale->AddCatalog(SLIC3R_APP_KEY); - m_imgui->set_language(into_u8(language_info->CanonicalName)); + m_active_language_code = requested_language_code; + m_imgui->set_language(into_u8(requested_language_code)); //FIXME This is a temporary workaround, the correct solution is to switch to "C" locale during file import / export only. //wxSetlocale(LC_NUMERIC, "C"); @@ -6751,49 +6775,57 @@ void GUI_App::show_ip_address_enter_dialog_handler(wxCommandEvent& evt) void GUI_App::open_preferences(size_t open_on_tab, const std::string& highlight_option) { - bool app_layout_changed = false; + bool need_recreate_gui = false; + std::string pending_language; { // the dialog needs to be destroyed before the call to recreate_GUI() // or sometimes the application crashes into wxDialogBase() destructor // so we put it into an inner scope PreferencesDialog dlg(mainframe, open_on_tab, highlight_option); dlg.ShowModal(); - this->plater_->get_current_canvas3D()->force_set_focus(); - // BBS - //app_layout_changed = dlg.settings_layout_changed(); + need_recreate_gui = dlg.recreate_GUI(); + pending_language = dlg.pending_language(); + if (!need_recreate_gui) { + this->plater_->get_current_canvas3D()->force_set_focus(); #if ENABLE_GCODE_LINES_ID_IN_H_SLIDER - if (dlg.seq_top_layer_only_changed() || dlg.seq_seq_top_gcode_indices_changed()) + if (dlg.seq_top_layer_only_changed() || dlg.seq_seq_top_gcode_indices_changed()) #else - if (dlg.seq_top_layer_only_changed()) + if (dlg.seq_top_layer_only_changed()) #endif // ENABLE_GCODE_LINES_ID_IN_H_SLIDER - this->plater_->reload_print(); + this->plater_->reload_print(); #ifdef _WIN32 - if (is_editor()) { - if (app_config->get("associate_3mf") == "true") - associate_files(L"3mf"); - if (app_config->get("associate_stl") == "true") - associate_files(L"stl"); - if (app_config->get("associate_step") == "true") { - associate_files(L"step"); - associate_files(L"stp"); + if (is_editor()) { + if (app_config->get("associate_3mf") == "true") + associate_files(L"3mf"); + if (app_config->get("associate_stl") == "true") + associate_files(L"stl"); + if (app_config->get("associate_step") == "true") { + associate_files(L"step"); + associate_files(L"stp"); + } + associate_url(L"orcaslicer"); + } + else { + if (app_config->get("associate_gcode") == "true") + associate_files(L"gcode"); } - associate_url(L"orcaslicer"); - } - else { - if (app_config->get("associate_gcode") == "true") - associate_files(L"gcode"); - } #endif // _WIN32 + } } - // BBS - /* - if (app_layout_changed) { - // hide full main_sizer for mainFrame - mainframe->GetSizer()->Show(false); - mainframe->update_layout(); - mainframe->select_tab(size_t(0)); - }*/ + if (!pending_language.empty()) { + const std::string previous_language = app_config->get("language"); + app_config->set("language", pending_language); + if (!load_language(wxString::FromUTF8(pending_language), false)) { + app_config->set("language", previous_language); + if (this->plater_) + this->plater_->get_current_canvas3D()->force_set_focus(); + return; + } + } + + if (need_recreate_gui) + recreate_GUI(_L("Changing application language")); } bool GUI_App::has_unsaved_preset_changes() const diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp index ae51add264..f89f583873 100644 --- a/src/slic3r/GUI/GUI_App.hpp +++ b/src/slic3r/GUI/GUI_App.hpp @@ -273,6 +273,7 @@ private: const wxLanguageInfo *m_language_info_system = nullptr; // Best translation language, provided by Windows or OSX, owned by wxWidgets. const wxLanguageInfo *m_language_info_best = nullptr; + wxString m_active_language_code; OpenGLManager m_opengl_mgr; std::unique_ptr m_removable_drive_manager; @@ -563,7 +564,7 @@ public: void preset_deleted_from_cloud(std::string setting_id); wxString filter_string(wxString str); - wxString current_language_code() const { return m_wxLocale->GetCanonicalName(); } + wxString current_language_code() const { return m_active_language_code.empty() && m_wxLocale ? m_wxLocale->GetCanonicalName() : m_active_language_code; } // Translate the language code to a code, for which Prusa Research maintains translations. Defaults to "en_US". wxString current_language_code_safe() const; bool is_localized() const { return m_wxLocale->GetLocale() != "English"; } diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 80b801a4c0..83689db053 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -2485,7 +2485,7 @@ static wxMenu* generate_help_menu() // //TODO // }); // Check New Version - append_menu_item(helpMenu, wxID_ANY, _L("Check for Update"), _L("Check for Update"), + append_menu_item(helpMenu, wxID_ANY, _L("Check for Updates"), _L("Check for Updates"), [](wxCommandEvent&) { wxGetApp().check_new_version_sf(true, 1); }, "", nullptr, []() { @@ -3145,15 +3145,7 @@ void MainFrame::init_menubar_as_editor() append_menu_item( parent_menu, wxID_ANY, _L("Preferences") + "\t" + ctrl + ",", "", [this](wxCommandEvent &) { - PreferencesDialog dlg(this); - dlg.ShowModal(); - plater()->get_current_canvas3D()->force_set_focus(); -#if ENABLE_GCODE_LINES_ID_IN_H_SLIDER - if (dlg.seq_top_layer_only_changed() || dlg.seq_seq_top_gcode_indices_changed()) -#else - if (dlg.seq_top_layer_only_changed()) -#endif - plater()->reload_print(); + wxGetApp().open_preferences(); }, "", nullptr, []() { return true; }, this, 1); //parent_menu->Insert(1, preference_item); @@ -3174,7 +3166,6 @@ void MainFrame::init_menubar_as_editor() [this](wxCommandEvent &) { // Orca: Use GUI_App::open_preferences instead of direct call so windows associations are updated on exit wxGetApp().open_preferences(); - plater()->get_current_canvas3D()->force_set_focus(); }, "", nullptr, []() { return true; }, this); //m_topbar->AddDropDownMenuItem(preference_item); @@ -3215,20 +3206,20 @@ void MainFrame::init_menubar_as_editor() // Flow rate (with submenu) auto flowrate_menu = new wxMenu(); append_menu_item( - flowrate_menu, wxID_ANY, _L("Pass 1"), _L("Flow rate test - Pass 1"), + flowrate_menu, wxID_ANY, _L("Pass 1"), _L("Flow ratio test - Pass 1"), [this](wxCommandEvent&) { if (m_plater) m_plater->calib_flowrate(false, 1); }, "", nullptr, [this]() {return m_plater->is_view3D_shown();; }, this); - append_menu_item(flowrate_menu, wxID_ANY, _L("Pass 2"), _L("Flow rate test - Pass 2"), + append_menu_item(flowrate_menu, wxID_ANY, _L("Pass 2"), _L("Flow ratio test - Pass 2"), [this](wxCommandEvent&) { if (m_plater) m_plater->calib_flowrate(false, 2); }, "", nullptr, [this]() {return m_plater->is_view3D_shown();; }, this); flowrate_menu->AppendSeparator(); - append_menu_item(flowrate_menu, wxID_ANY, _L("YOLO (Recommended)"), _L("Orca YOLO flowrate calibration, 0.01 step"), + append_menu_item(flowrate_menu, wxID_ANY, _L("YOLO (Recommended)"), _L("Orca YOLO flowratio calibration, 0.01 step"), [this](wxCommandEvent&) { if (m_plater) m_plater->calib_flowrate(true, 1); }, "", nullptr, [this]() {return m_plater->is_view3D_shown();; }, this); - append_menu_item(flowrate_menu, wxID_ANY, _L("YOLO (perfectionist version)"), _L("Orca YOLO flowrate calibration, 0.005 step"), + append_menu_item(flowrate_menu, wxID_ANY, _L("YOLO (perfectionist version)"), _L("Orca YOLO flowratio calibration, 0.005 step"), [this](wxCommandEvent&) { if (m_plater) m_plater->calib_flowrate(true, 2); }, "", nullptr, [this]() {return m_plater->is_view3D_shown();; }, this); - m_topbar->GetCalibMenu()->AppendSubMenu(flowrate_menu, _L("Flow rate")); + m_topbar->GetCalibMenu()->AppendSubMenu(flowrate_menu, _L("Flow ratio")); // Retraction test append_menu_item(m_topbar->GetCalibMenu(), wxID_ANY, _L("Retraction test"), _L("Retraction test"), diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 671d5674b6..5e68e9de30 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -469,7 +469,6 @@ struct Sidebar::priv ScalableButton * m_bpButton_ams_filament; ScalableButton * m_bpButton_set_filament; int m_menu_filament_id = -1; - int filament_area_height; wxScrolledWindow* m_panel_filament_content; wxScrolledWindow* m_scrolledWindow_filament_content; wxStaticLine* m_staticline2; @@ -2106,14 +2105,10 @@ Sidebar::Sidebar(Plater *parent) bSizer39->AddSpacer(FromDIP(SidebarProps::TitlebarMargin())); // add filament content - // ORCA use a height with user preference - int filament_count_user = std::stoi(wxGetApp().app_config->get("filaments_area_preferred_count")); - p->filament_area_height = std::ceil(filament_count_user * 0.5) * (30 + SidebarProps::ElementSpacing()) - SidebarProps::ElementSpacing(); - p->m_panel_filament_content = new wxScrolledWindow( p->scrolled, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); p->m_panel_filament_content->SetScrollbars(0, 100, 1, 2); p->m_panel_filament_content->SetScrollRate(0, 5); - p->m_panel_filament_content->SetMaxSize(wxSize{-1, FromDIP(p->filament_area_height)}); // ORCA + //p->m_panel_filament_content->SetMaxSize(wxSize{-1, FromDIP(174)}); p->m_panel_filament_content->SetBackgroundColour(wxColour(255, 255, 255)); //wxBoxSizer* bSizer_filament_content; @@ -2135,10 +2130,9 @@ Sidebar::Sidebar(Plater *parent) sizer_filaments2->Add(p->sizer_filaments, 0, wxEXPAND, 0); p->m_panel_filament_content->SetSizer(sizer_filaments2); p->m_panel_filament_content->Layout(); - auto min_size = sizer_filaments2->GetMinSize(); - if (min_size.y > p->m_panel_filament_content->GetMaxHeight()) - min_size.y = p->m_panel_filament_content->GetMaxHeight(); - p->m_panel_filament_content->SetMinSize(min_size); + + update_filaments_area_height(); // ORCA + scrolled_sizer->Add(p->m_panel_filament_content, 0, wxEXPAND | wxTOP | wxBOTTOM, FromDIP(SidebarProps::ContentMarginV())); // ORCA use vertical margin on parent otherwise it shows scrollbar even on 1 filament } @@ -2776,6 +2770,23 @@ void Sidebar::change_top_border_for_mode_sizer(bool increase_border) #endif } +void Sidebar::update_filaments_area_height() +// ORCA +{ + // ORCA use a height with user preference + auto left_sizer = p->sizer_filaments->GetItem((size_t) 0)->GetSizer(); + auto combo_sizer = left_sizer->GetItem((size_t) 0)->GetSizer(); + int preferred_rows = std::ceil(0.5 * std::stoi(wxGetApp().app_config->get("filaments_area_preferred_count"))); + auto height_with_borders = combo_sizer->GetSize().GetHeight(); // gets height from sizer instead static numbers + p->m_panel_filament_content->SetMaxSize(wxSize{-1, preferred_rows * height_with_borders}); + + // fixes wxScrolledWindow not shrinks its height to content size + auto min_size = p->m_panel_filament_content->GetSizer()->GetMinSize(); + if (min_size.y > p->m_panel_filament_content->GetMaxHeight()) + min_size.y = p->m_panel_filament_content->GetMaxHeight(); + p->m_panel_filament_content->SetMinSize({-1, min_size.y}); +} + void Sidebar::msw_rescale() { SetMinSize(wxSize(42 * wxGetApp().em_unit(), -1)); @@ -2846,6 +2857,9 @@ void Sidebar::msw_rescale() for (PlaterPresetComboBox* combo : p->combos_filament) combo->msw_rescale(); + p->m_panel_filament_content->Layout(); + update_filaments_area_height(); // ORCA resize after combos scaled + // BBS //p->frequently_changed_parameters->msw_rescale(); //obj_list()->msw_rescale(); @@ -3024,10 +3038,7 @@ void Sidebar::on_filament_count_change(size_t num_filaments) } } - auto min_size = p->m_panel_filament_content->GetSizer()->GetMinSize(); - if (min_size.y > p->m_panel_filament_content->GetMaxHeight()) - min_size.y = p->m_panel_filament_content->GetMaxHeight(); - p->m_panel_filament_content->SetMinSize(min_size); + update_filaments_area_height(); // ORCA Layout(); p->m_panel_filament_title->Refresh(); @@ -3087,10 +3098,7 @@ void Sidebar::on_filaments_delete(size_t filament_id) p->combos_filament[idx]->update(); } - auto min_size = p->m_panel_filament_content->GetSizer()->GetMinSize(); - if (min_size.y > p->m_panel_filament_content->GetMaxHeight()) - min_size.y = p->m_panel_filament_content->GetMaxHeight(); - p->m_panel_filament_content->SetMinSize(min_size); + update_filaments_area_height(); // ORCA Layout(); p->m_panel_filament_title->Refresh(); @@ -3524,11 +3532,8 @@ void Sidebar::sync_ams_list(bool is_from_big_sync_btn) for (auto& c : p->combos_filament) c->update(); // Expand filament list - p->m_panel_filament_content->SetMaxSize({-1, FromDIP(p->filament_area_height)}); // ORCA - auto min_size = p->m_panel_filament_content->GetSizer()->GetMinSize(); - if (min_size.y > p->m_panel_filament_content->GetMaxHeight()) - min_size.y = p->m_panel_filament_content->GetMaxHeight(); - p->m_panel_filament_content->SetMinSize({-1, min_size.y}); + update_filaments_area_height(); // ORCA + // BBS:Synchronized consumables information // auto calculation of flushing volumes for (int i = 0; i < p->combos_filament.size(); ++i) { diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index 89b9f560c4..3708e52b42 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -172,6 +172,7 @@ public: void set_bed_type_accord_combox(BedType bed_type); bool reset_bed_type_combox_choices(bool is_sidebar_init = false); void change_top_border_for_mode_sizer(bool increase_border); + void update_filaments_area_height(); void msw_rescale(); void sys_color_changed(); void search(); diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index e5afafad99..1a52f886ca 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -318,13 +318,10 @@ wxBoxSizer *PreferencesDialog::create_item_language_combobox(wxString title, wxS m_current_language_selected = combobox->GetSelection(); if (m_current_language_selected >= 0 && m_current_language_selected < vlist.size()) { - app_config->set(param, vlist[m_current_language_selected]->CanonicalName.ToUTF8().data()); - - wxGetApp().load_language(vlist[m_current_language_selected]->CanonicalName, false); - Close(); - // Reparent(nullptr); - GetParent()->RemoveChild(this); - wxGetApp().recreate_GUI(_L("Changing application language")); + m_pending_language = vlist[m_current_language_selected]->CanonicalName.ToUTF8().data(); + m_recreate_GUI = true; + EndModal(wxID_OK); + return; } } @@ -592,6 +589,14 @@ wxBoxSizer *PreferencesDialog::create_item_spinctrl(wxString title, wxString tit e.Skip(); }); + input->Bind(wxEVT_SPINCTRL, [this, param, input, onchange](wxCommandEvent& e) { + auto value = input->GetValue(); + app_config->set(param, std::to_string(value)); + app_config->save(); + if (onchange != nullptr) onchange(value); + e.Skip(); + }); + input->Bind(wxEVT_KILL_FOCUS, [this, param, input, onchange](wxFocusEvent &e) { auto value = input->GetValue(); app_config->set(param, std::to_string(value)); @@ -1398,7 +1403,13 @@ void PreferencesDialog::create_items() "group_filament_presets", {_L("All"), _L("None"), _L("By type"), _L("By vendor")}, [](wxString value) {wxGetApp().plater()->sidebar().update_presets(Preset::TYPE_FILAMENT);}); g_sizer->Add(item_filament_preset_grouping); - auto item_filament_area_height = create_item_spinctrl(_L("Optimize filaments area height for..."), _L("(Requires restart)"), _L("filaments"), _L("Optimizes filament area maximum height by chosen filament count."), "filaments_area_preferred_count", 8, 99); + // prevent burst calling on keyboard / spin events + m_filament_height_timer.Bind(wxEVT_TIMER, [this](wxTimerEvent&) { + wxGetApp().plater()->sidebar().update_filaments_area_height(); + UpdateSidebarLayout(); + }); + auto item_filament_area_height = create_item_spinctrl(_L("Optimize filaments area height for..."), "", _L("filaments"), _L("Optimizes filament area maximum height by chosen filament count."), + "filaments_area_preferred_count", 8, 99, [this](int value) {m_filament_height_timer.StartOnce(500);}); g_sizer->Add(item_filament_area_height); //// GENERAL > Features @@ -1950,4 +1961,22 @@ wxBoxSizer* PreferencesDialog::create_debug_page() return bSizer; } +void PreferencesDialog::UpdateSidebarLayout() +{ + Plater* plater = wxGetApp().plater(); + if (!plater) return; + + Sidebar& sidebar = plater->sidebar(); + + sidebar.Freeze(); + + sidebar.Layout(); + //plater->Layout(); + //wxGetApp().mainframe->Layout(); + + sidebar.Thaw(); + + plater->PostSizeEvent(); +} + }} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/Preferences.hpp b/src/slic3r/GUI/Preferences.hpp index 886f5f7cec..73e61938d6 100644 --- a/src/slic3r/GUI/Preferences.hpp +++ b/src/slic3r/GUI/Preferences.hpp @@ -6,6 +6,7 @@ #include #include +#include #include #include #include @@ -43,10 +44,12 @@ protected: // bool m_settings_layout_changed {false}; bool m_seq_top_layer_only_changed{false}; bool m_recreate_GUI{false}; + std::string m_pending_language; public: bool seq_top_layer_only_changed() const { return m_seq_top_layer_only_changed; } bool recreate_GUI() const { return m_recreate_GUI; } + const std::string& pending_language() const { return m_pending_language; } void on_dpi_changed(const wxRect &suggested_rect) override; public: @@ -60,6 +63,7 @@ public: ~PreferencesDialog(); wxString m_backup_interval_time; + wxTimer m_filament_height_timer; void create(); @@ -106,6 +110,8 @@ public: void create_shortcuts_page(); wxBoxSizer* create_debug_page(); + void UpdateSidebarLayout(); + // BBS void create_select_domain_widget(); diff --git a/src/slic3r/GUI/PrintOptionsDialog.cpp b/src/slic3r/GUI/PrintOptionsDialog.cpp index 56cc764356..f6681e9d7a 100644 --- a/src/slic3r/GUI/PrintOptionsDialog.cpp +++ b/src/slic3r/GUI/PrintOptionsDialog.cpp @@ -639,7 +639,7 @@ wxBoxSizer* PrintOptionsDialog::create_settings_group(wxWindow* parent) ai_refine_sizer->Add(line_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(18)); line_sizer = new wxBoxSizer(wxHORIZONTAL); - text_spaghetti_detection_caption0 = new Label(ai_refine_panel, _L("Detect spaghetti failure(scattered lose filament).")); + text_spaghetti_detection_caption0 = new Label(ai_refine_panel, _L("Detect spaghetti failures (scattered lose filament).")); text_spaghetti_detection_caption0->SetFont(Label::Body_12); text_spaghetti_detection_caption0->SetForegroundColour(STATIC_TEXT_CAPTION_COL); text_spaghetti_detection_caption0->Wrap(-1); diff --git a/src/slic3r/GUI/UnsavedChangesDialog.cpp b/src/slic3r/GUI/UnsavedChangesDialog.cpp index 2a74264700..b24393c597 100644 --- a/src/slic3r/GUI/UnsavedChangesDialog.cpp +++ b/src/slic3r/GUI/UnsavedChangesDialog.cpp @@ -1668,7 +1668,7 @@ void UnsavedChangesDialog::update_tree(Preset::Type type, PresetCollection* pres // process changes of extruders count if (type == Preset::TYPE_PRINTER && old_pt == ptFFF && old_config.opt("nozzle_diameter")->values.size() != new_config.opt("nozzle_diameter")->values.size()) { - wxString local_label = _L("Extruders count"); + wxString local_label = _L("Extruder count"); wxString old_val = from_u8((boost::format("%1%") % old_config.opt("nozzle_diameter")->values.size()).str()); wxString new_val = from_u8((boost::format("%1%") % new_config.opt("nozzle_diameter")->values.size()).str()); @@ -2228,7 +2228,7 @@ void DiffPresetDialog::update_tree() // process changes of extruders count if (type == Preset::TYPE_PRINTER && left_pt == ptFFF && left_config.opt("extruder_colour")->values.size() != right_congig.opt("extruder_colour")->values.size()) { - wxString local_label = _L("Extruders count"); + wxString local_label = _L("Extruder count"); wxString left_val = from_u8((boost::format("%1%") % left_config.opt("extruder_colour")->values.size()).str()); wxString right_val = from_u8((boost::format("%1%") % right_congig.opt("extruder_colour")->values.size()).str()); diff --git a/src/slic3r/GUI/Widgets/Label.cpp b/src/slic3r/GUI/Widgets/Label.cpp index 35a35c80d6..60a2a90a9e 100644 --- a/src/slic3r/GUI/Widgets/Label.cpp +++ b/src/slic3r/GUI/Widgets/Label.cpp @@ -5,6 +5,9 @@ #include #include #include +#ifdef __linux__ +#include +#endif wxFont Label::sysFont(int size, bool bold) @@ -58,27 +61,46 @@ wxFont Label::Body_10; wxFont Label::Body_9; wxFont Label::Body_8; +// Check if a font family is already available via fontconfig. +#ifdef __linux__ +static bool fc_font_available(const char *family_name) +{ + FcPattern *pat = FcPatternCreate(); + if (!pat) + return false; + FcPatternAddString(pat, FC_FAMILY, (const FcChar8 *) family_name); + FcResult res; + FcPattern *match = FcFontMatch(nullptr, pat, &res); + bool available = false; + if (match) { + FcChar8 *matched_family = nullptr; + if (FcPatternGetString(match, FC_FAMILY, 0, &matched_family) == FcResultMatch && matched_family) + available = (strcasecmp((const char *) matched_family, family_name) == 0); + FcPatternDestroy(match); + } + FcPatternDestroy(pat); + return available; +} +#endif + void Label::initSysFont() { #if defined(__linux__) || defined(_WIN32) - const std::string &resource_path = Slic3r::resources_dir(); - wxString font_path = wxString::FromUTF8(resource_path + "/fonts/HarmonyOS_Sans_SC_Bold.ttf"); - bool result = wxFont::AddPrivateFont(font_path); - // BOOST_LOG_TRIVIAL(info) << boost::format("add font of HarmonyOS_Sans_SC_Bold returns %1%")%result; - // printf("add font of HarmonyOS_Sans_SC_Bold returns %d\n", result); - font_path = wxString::FromUTF8(resource_path + "/fonts/HarmonyOS_Sans_SC_Regular.ttf"); - result = wxFont::AddPrivateFont(font_path); - // BOOST_LOG_TRIVIAL(info) << boost::format("add font of HarmonyOS_Sans_SC_Regular returns %1%")%result; - // printf("add font of HarmonyOS_Sans_SC_Regular returns %d\n", result); - // Adding NanumGothic Regular and Bold - font_path = wxString::FromUTF8(resource_path + "/fonts/NanumGothic-Regular.ttf"); - result = wxFont::AddPrivateFont(font_path); - // BOOST_LOG_TRIVIAL(info) << boost::format("add font of NanumGothic-Regular returns %1%")%result; - // printf("add font of NanumGothic-Regular returns %d\n", result); - font_path = wxString::FromUTF8(resource_path + "/fonts/NanumGothic-Bold.ttf"); - result = wxFont::AddPrivateFont(font_path); - // BOOST_LOG_TRIVIAL(info) << boost::format("add font of NanumGothic-Bold returns %1%")%result; - // printf("add font of NanumGothic-Bold returns %d\n", result); + // On Linux, skip AddPrivateFont for fonts already known to fontconfig + // (e.g. installed system-wide in a Flatpak). Calling AddPrivateFont + // triggers a Pango crash in ensure_faces() on Pango >= 1.48 (GNOME 49+), + // because FcConfigAppFontAddFile invalidates Pango's cached font map. + bool load_fonts = true; +#ifdef __linux__ + load_fonts = !fc_font_available("HarmonyOS Sans SC") || !fc_font_available("NanumGothic"); +#endif + if (load_fonts) { + const std::string &resource_path = Slic3r::resources_dir(); + wxFont::AddPrivateFont(wxString::FromUTF8(resource_path + "/fonts/HarmonyOS_Sans_SC_Bold.ttf")); + wxFont::AddPrivateFont(wxString::FromUTF8(resource_path + "/fonts/HarmonyOS_Sans_SC_Regular.ttf")); + wxFont::AddPrivateFont(wxString::FromUTF8(resource_path + "/fonts/NanumGothic-Regular.ttf")); + wxFont::AddPrivateFont(wxString::FromUTF8(resource_path + "/fonts/NanumGothic-Bold.ttf")); + } #endif Head_48 = Label::sysFont(48, true); Head_32 = Label::sysFont(32, true); diff --git a/src/slic3r/GUI/calib_dlg.cpp b/src/slic3r/GUI/calib_dlg.cpp index c0ca0ae017..6e888b43c6 100644 --- a/src/slic3r/GUI/calib_dlg.cpp +++ b/src/slic3r/GUI/calib_dlg.cpp @@ -67,7 +67,7 @@ std::vector make_shaper_type_labels() } PA_Calibration_Dlg::PA_Calibration_Dlg(wxWindow* parent, wxWindowID id, Plater* plater) - : DPIDialog(parent, id, _L("PA Calibration"), wxDefaultPosition, parent->FromDIP(wxSize(-1, 280)), wxDEFAULT_DIALOG_STYLE), m_plater(plater) + : DPIDialog(parent, id, _L("PA Calibration"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE), m_plater(plater) { SetBackgroundColour(*wxWHITE); // make sure background color set for dialog SetForegroundColour(wxColour("#363636")); @@ -196,6 +196,7 @@ PA_Calibration_Dlg::PA_Calibration_Dlg(wxWindow* parent, wxWindowID id, Plater* Layout(); Fit(); + v_sizer->SetSizeHints(this); } PA_Calibration_Dlg::~PA_Calibration_Dlg() { @@ -328,7 +329,7 @@ enum FILAMENT_TYPE : int }; Temp_Calibration_Dlg::Temp_Calibration_Dlg(wxWindow* parent, wxWindowID id, Plater* plater) - : DPIDialog(parent, id, _L("Temperature calibration"), wxDefaultPosition, parent->FromDIP(wxSize(-1, 280)), wxDEFAULT_DIALOG_STYLE), m_plater(plater) + : DPIDialog(parent, id, _L("Temperature calibration"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE), m_plater(plater) { SetBackgroundColour(*wxWHITE); // make sure background color set for dialog SetForegroundColour(wxColour("#363636")); @@ -409,6 +410,7 @@ Temp_Calibration_Dlg::Temp_Calibration_Dlg(wxWindow* parent, wxWindowID id, Plat Layout(); Fit(); + v_sizer->SetSizeHints(this); auto validate_text = [](TextInput* ti){ unsigned long t = 0; @@ -518,7 +520,7 @@ void Temp_Calibration_Dlg::on_dpi_changed(const wxRect& suggested_rect) { // MaxVolumetricSpeed_Test_Dlg::MaxVolumetricSpeed_Test_Dlg(wxWindow* parent, wxWindowID id, Plater* plater) - : DPIDialog(parent, id, _L("Max volumetric speed test"), wxDefaultPosition, parent->FromDIP(wxSize(-1, 280)), wxDEFAULT_DIALOG_STYLE), m_plater(plater) + : DPIDialog(parent, id, _L("Max volumetric speed test"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE), m_plater(plater) { SetBackgroundColour(*wxWHITE); // make sure background color set for dialog SetForegroundColour(wxColour("#363636")); @@ -587,6 +589,7 @@ MaxVolumetricSpeed_Test_Dlg::MaxVolumetricSpeed_Test_Dlg(wxWindow* parent, wxWin Layout(); Fit(); + v_sizer->SetSizeHints(this); } MaxVolumetricSpeed_Test_Dlg::~MaxVolumetricSpeed_Test_Dlg() { @@ -622,7 +625,7 @@ void MaxVolumetricSpeed_Test_Dlg::on_dpi_changed(const wxRect& suggested_rect) { // VFA_Test_Dlg::VFA_Test_Dlg(wxWindow* parent, wxWindowID id, Plater* plater) - : DPIDialog(parent, id, _L("VFA test"), wxDefaultPosition, parent->FromDIP(wxSize(-1, 280)), wxDEFAULT_DIALOG_STYLE) + : DPIDialog(parent, id, _L("VFA test"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE) , m_plater(plater) { SetBackgroundColour(*wxWHITE); // make sure background color set for dialog @@ -694,6 +697,7 @@ VFA_Test_Dlg::VFA_Test_Dlg(wxWindow* parent, wxWindowID id, Plater* plater) Layout(); Fit(); + v_sizer->SetSizeHints(this); } VFA_Test_Dlg::~VFA_Test_Dlg() @@ -731,7 +735,7 @@ void VFA_Test_Dlg::on_dpi_changed(const wxRect& suggested_rect) // Retraction_Test_Dlg::Retraction_Test_Dlg(wxWindow* parent, wxWindowID id, Plater* plater) - : DPIDialog(parent, id, _L("Retraction test"), wxDefaultPosition, parent->FromDIP(wxSize(-1, 280)), wxDEFAULT_DIALOG_STYLE), m_plater(plater) + : DPIDialog(parent, id, _L("Retraction test"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE), m_plater(plater) { SetBackgroundColour(*wxWHITE); // make sure background color set for dialog SetForegroundColour(wxColour("#363636")); @@ -802,6 +806,7 @@ Retraction_Test_Dlg::Retraction_Test_Dlg(wxWindow* parent, wxWindowID id, Plater Layout(); Fit(); + v_sizer->SetSizeHints(this); } Retraction_Test_Dlg::~Retraction_Test_Dlg() { @@ -836,7 +841,7 @@ void Retraction_Test_Dlg::on_dpi_changed(const wxRect& suggested_rect) { // Input_Shaping_Freq_Test_Dlg::Input_Shaping_Freq_Test_Dlg(wxWindow* parent, wxWindowID id, Plater* plater) - : DPIDialog(parent, id, _L("Input shaping Frequency test"), wxDefaultPosition, parent->FromDIP(wxSize(-1, 280)), wxDEFAULT_DIALOG_STYLE), m_plater(plater) + : DPIDialog(parent, id, _L("Input shaping Frequency test"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE), m_plater(plater) { SetBackgroundColour(*wxWHITE); // make sure background color set for dialog SetForegroundColour(wxColour("#363636")); @@ -981,6 +986,7 @@ Input_Shaping_Freq_Test_Dlg::Input_Shaping_Freq_Test_Dlg(wxWindow* parent, wxWin Layout(); Fit(); + v_sizer->SetSizeHints(this); } Input_Shaping_Freq_Test_Dlg::~Input_Shaping_Freq_Test_Dlg() { @@ -1053,7 +1059,7 @@ void Input_Shaping_Freq_Test_Dlg::on_dpi_changed(const wxRect& suggested_rect) { // Input_Shaping_Damp_Test_Dlg::Input_Shaping_Damp_Test_Dlg(wxWindow* parent, wxWindowID id, Plater* plater) - : DPIDialog(parent, id, _L("Input shaping Damp test"), wxDefaultPosition, parent->FromDIP(wxSize(-1, 280)), wxDEFAULT_DIALOG_STYLE), m_plater(plater) + : DPIDialog(parent, id, _L("Input shaping Damp test"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE), m_plater(plater) { SetBackgroundColour(*wxWHITE); // make sure background color set for dialog SetForegroundColour(wxColour("#363636")); @@ -1179,6 +1185,7 @@ Input_Shaping_Damp_Test_Dlg::Input_Shaping_Damp_Test_Dlg(wxWindow* parent, wxWin Layout(); Fit(); + v_sizer->SetSizeHints(this); } Input_Shaping_Damp_Test_Dlg::~Input_Shaping_Damp_Test_Dlg() { @@ -1246,7 +1253,7 @@ void Input_Shaping_Damp_Test_Dlg::on_dpi_changed(const wxRect& suggested_rect) { // Cornering_Test_Dlg::Cornering_Test_Dlg(wxWindow* parent, wxWindowID id, Plater* plater) - : DPIDialog(parent, id, _L("Cornering test"), wxDefaultPosition, parent->FromDIP(wxSize(-1, 280)), wxDEFAULT_DIALOG_STYLE), m_plater(plater) + : DPIDialog(parent, id, _L("Cornering test"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE), m_plater(plater) { SetBackgroundColour(*wxWHITE); // make sure background color set for dialog SetForegroundColour(wxColour("#363636")); @@ -1374,6 +1381,7 @@ Cornering_Test_Dlg::Cornering_Test_Dlg(wxWindow* parent, wxWindowID id, Plater* Layout(); Fit(); + v_sizer->SetSizeHints(this); } Cornering_Test_Dlg::~Cornering_Test_Dlg() { diff --git a/src/slic3r/Utils/MoonrakerPrinterAgent.cpp b/src/slic3r/Utils/MoonrakerPrinterAgent.cpp index a46e7be8f1..f1d892134b 100644 --- a/src/slic3r/Utils/MoonrakerPrinterAgent.cpp +++ b/src/slic3r/Utils/MoonrakerPrinterAgent.cpp @@ -571,7 +571,18 @@ bool MoonrakerPrinterAgent::fetch_filament_info(std::string dev_id) std::vector trays; int max_lane_index = 0; - // Try Happy Hare first (more widely adopted, supports more filament changers) + // Try Moonraker filament data (more generic, supports any filament changer + // software that reports lane data to Moonraker like AFC and recent Happy + // Hare as of Feb 15, 2026) + if (fetch_moonraker_filament_data(trays, max_lane_index)) { + BOOST_LOG_TRIVIAL(info) << "MoonrakerPrinterAgent::fetch_filament_info: Detected Moonraker filament system with " + << (max_lane_index + 1) << " lanes"; + int ams_count = (max_lane_index + 4) / 4; + build_ams_payload(ams_count, max_lane_index, trays); + return true; + } + + // Attempt Happy Hare first (more widely adopted, supports more filament changers) if (fetch_hh_filament_info(trays, max_lane_index)) { BOOST_LOG_TRIVIAL(info) << "MoonrakerPrinterAgent::fetch_filament_info: Detected Happy Hare MMU with " << (max_lane_index + 1) << " gates"; @@ -580,17 +591,8 @@ bool MoonrakerPrinterAgent::fetch_filament_info(std::string dev_id) return true; } - // Fallback to AFC - if (fetch_afc_filament_info(trays, max_lane_index)) { - BOOST_LOG_TRIVIAL(info) << "MoonrakerPrinterAgent::fetch_filament_info: Detected AFC with " - << (max_lane_index + 1) << " lanes"; - int ams_count = (max_lane_index + 4) / 4; - build_ams_payload(ams_count, max_lane_index, trays); - return true; - } - // No MMU detected - this is normal for printers without MMU, not an error - BOOST_LOG_TRIVIAL(info) << "MoonrakerPrinterAgent::fetch_filament_info: No MMU system detected (neither HH nor AFC)"; + BOOST_LOG_TRIVIAL(info) << "MoonrakerPrinterAgent::fetch_filament_info: No MMU system detected (neither HH nor Moonraker)"; return false; } @@ -721,10 +723,10 @@ std::string MoonrakerPrinterAgent::normalize_color_value(const std::string& colo return normalized; } -// Fetch filament info from Armored Turtle AFC -bool MoonrakerPrinterAgent::fetch_afc_filament_info(std::vector& trays, int& max_lane_index) +// Fetch filament info from moonraker database +bool MoonrakerPrinterAgent::fetch_moonraker_filament_data(std::vector& trays, int& max_lane_index) { - // Fetch AFC lane data from Moonraker database + // Fetch lane data from Moonraker database std::string url = join_url(device_info.base_url, "/server/database/item?namespace=lane_data"); std::string response_body; @@ -754,19 +756,19 @@ bool MoonrakerPrinterAgent::fetch_afc_filament_info(std::vector& tr .perform_sync(); if (!success) { - BOOST_LOG_TRIVIAL(warning) << "MoonrakerPrinterAgent::fetch_afc_filament_info: Failed to fetch lane data: " << http_error; + BOOST_LOG_TRIVIAL(warning) << "MoonrakerPrinterAgent::fetch_moonraker_filament_data: Failed to fetch lane data: " << http_error; return false; } auto json = nlohmann::json::parse(response_body, nullptr, false, true); if (json.is_discarded()) { - BOOST_LOG_TRIVIAL(warning) << "MoonrakerPrinterAgent::fetch_afc_filament_info: Invalid JSON response"; + BOOST_LOG_TRIVIAL(warning) << "MoonrakerPrinterAgent::fetch_moonraker_filament_data: Invalid JSON response"; return false; } // Expected structure: { "result": { "namespace": "lane_data", "value": { "lane1": {...}, ... } } } if (!json.contains("result") || !json["result"].contains("value") || !json["result"]["value"].is_object()) { - BOOST_LOG_TRIVIAL(warning) << "MoonrakerPrinterAgent::fetch_afc_filament_info: Unexpected JSON structure or no lane_data found"; + BOOST_LOG_TRIVIAL(warning) << "MoonrakerPrinterAgent::fetch_moonraker_filament_data: Unexpected JSON structure or no lane_data found"; return false; } @@ -812,7 +814,7 @@ bool MoonrakerPrinterAgent::fetch_afc_filament_info(std::vector& tr } if (trays.empty()) { - BOOST_LOG_TRIVIAL(info) << "MoonrakerPrinterAgent::fetch_afc_filament_info: No AFC lanes found"; + BOOST_LOG_TRIVIAL(info) << "MoonrakerPrinterAgent::fetch_moonraker_filament_data: No lanes found"; return false; } diff --git a/src/slic3r/Utils/MoonrakerPrinterAgent.hpp b/src/slic3r/Utils/MoonrakerPrinterAgent.hpp index 525d5fed86..a37a6c3fd6 100644 --- a/src/slic3r/Utils/MoonrakerPrinterAgent.hpp +++ b/src/slic3r/Utils/MoonrakerPrinterAgent.hpp @@ -162,7 +162,7 @@ private: // System-specific filament fetch methods bool fetch_hh_filament_info(std::vector& trays, int& max_lane_index); - bool fetch_afc_filament_info(std::vector& trays, int& max_lane_index); + bool fetch_moonraker_filament_data(std::vector& trays, int& max_lane_index); // JSON helper methods static std::string safe_json_string(const nlohmann::json& obj, const char* key);