Merge branch 'main' into enh-port-edit-gcode-dlg

This commit is contained in:
Ocraftyone 2024-01-01 11:01:22 -05:00 committed by GitHub
commit a8148d8ee6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
66 changed files with 962 additions and 966 deletions

View file

@ -22,10 +22,15 @@ Orca Slicer's logo is designed by community member Justin Levine(@freejstnalxndr
# How to install # How to install
**Windows**: **Windows**:
1. Install and run 1. Download the installer for your preferred version from the [releases page](https://github.com/SoftFever/OrcaSlicer/releases).
- *For convenience there is also a portable build available.*
- *If you have troubles to run the build, you might need to install following runtimes:* - *If you have troubles to run the build, you might need to install following runtimes:*
- [MicrosoftEdgeWebView2RuntimeInstallerX64](https://github.com/SoftFever/BambuStudio-SoftFever/releases/download/v1.0.10-sf2/MicrosoftEdgeWebView2RuntimeInstallerX64.exe) - [MicrosoftEdgeWebView2RuntimeInstallerX64](https://github.com/SoftFever/BambuStudio-SoftFever/releases/download/v1.0.10-sf2/MicrosoftEdgeWebView2RuntimeInstallerX64.exe)
- [Details of this runtime](https://aka.ms/webview2)
- [Alternative Download Link Hosted by Microsoft](https://go.microsoft.com/fwlink/p/?LinkId=2124703)
- [vcredist2019_x64](https://github.com/SoftFever/BambuStudio-SoftFever/releases/download/v1.0.10-sf2/vcredist2019_x64.exe) - [vcredist2019_x64](https://github.com/SoftFever/BambuStudio-SoftFever/releases/download/v1.0.10-sf2/vcredist2019_x64.exe)
- [Alternative Download Link Hosted by Microsoft](https://aka.ms/vs/17/release/vc_redist.x64.exe)
- This file may already be available on your computer if you've installed visual studio. Check the following location: `%VCINSTALLDIR%Redist\MSVC\v142`
**Mac**: **Mac**:
1. Download the DMG for your computer: `arm64` version for Apple Silicon and `x86_64` for Intel CPU. 1. Download the DMG for your computer: `arm64` version for Apple Silicon and `x86_64` for Intel CPU.
@ -51,9 +56,12 @@ Orca Slicer's logo is designed by community member Justin Levine(@freejstnalxndr
**Linux(Ubuntu)**: **Linux(Ubuntu)**:
1. If you run into trouble to execute it, try this command in terminal: 1. If you run into trouble to execute it, try this command in terminal:
`chmod +x /path_to_appimage/OrcaSlicer_ubu64.AppImage` `chmod +x /path_to_appimage/OrcaSlicer_ubu64.AppImage`
# How to compile # How to compile
- Windows 64-bit - Windows 64-bit
- Tools needed: Visual Studio 2019, Cmake, git, Strawberry Perl. - Tools needed: Visual Studio 2019, Cmake, git, Strawberry Perl.
- You will require cmake version 3.14 or later, which is available [on their website](https://cmake.org/download/).
- Strawberry Perl is [available on their github repository](https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/).
- Run `build_release.bat` in `x64 Native Tools Command Prompt for VS 2019` - Run `build_release.bat` in `x64 Native Tools Command Prompt for VS 2019`
- Mac 64-bit - Mac 64-bit
@ -61,6 +69,7 @@ Orca Slicer's logo is designed by community member Justin Levine(@freejstnalxndr
- run `build_release_macos.sh` - run `build_release_macos.sh`
- Ubuntu - Ubuntu
- Dependencies **Will be auto installed with the shell script**: `libmspack-dev libgstreamerd-3-dev libsecret-1-dev libwebkit2gtk-4.0-dev libosmesa6-dev libssl-dev libcurl4-openssl-dev eglexternalplatform-dev libudev-dev libdbus-1-dev extra-cmake-modules libgtk2.0-dev libglew-dev libudev-dev libdbus-1-dev cmake git`
- run 'sudo ./BuildLinux.sh -u' - run 'sudo ./BuildLinux.sh -u'
- run './BuildLinux.sh -dsir' - run './BuildLinux.sh -dsir'

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -7,7 +7,7 @@ msgstr ""
"Project-Id-Version: OrcaSlicer\n" "Project-Id-Version: OrcaSlicer\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-12-29 22:55+0800\n" "POT-Creation-Date: 2023-12-29 22:55+0800\n"
"PO-Revision-Date: 2023-12-29 22:35+0300\n" "PO-Revision-Date: 2024-01-01 00:01+0300\n"
"Last-Translator: Olcay ÖREN\n" "Last-Translator: Olcay ÖREN\n"
"Language-Team: Türkçe\n" "Language-Team: Türkçe\n"
"Language: tr_TR\n" "Language: tr_TR\n"
@ -884,13 +884,13 @@ msgid "Unset italic"
msgstr "Yatık ayarı kaldır" msgstr "Yatık ayarı kaldır"
msgid "Set italic" msgid "Set italic"
msgstr "Yatık olarak ayarla" msgstr "Yatık"
msgid "Unset bold" msgid "Unset bold"
msgstr "Kalın ayarı kaldır" msgstr "Kalın ayarı kaldır"
msgid "Set bold" msgid "Set bold"
msgstr "Kalın olarak ayarla" msgstr "Kalın"
msgid "Revert text size." msgid "Revert text size."
msgstr "Metin boyutunu geri döndür." msgstr "Metin boyutunu geri döndür."
@ -946,7 +946,7 @@ msgstr "Hizalamayı geri al."
#. TRN EmbossGizmo: font units #. TRN EmbossGizmo: font units
msgid "points" msgid "points"
msgstr "noktalar" msgstr "punto"
msgid "Revert gap between characters" msgid "Revert gap between characters"
msgstr "Karakterler arasındaki boşluğu geri döndür" msgstr "Karakterler arasındaki boşluğu geri döndür"
@ -994,7 +994,7 @@ msgid "Select from True Type Collection."
msgstr "True Type Koleksiyonundan seçim yapın." msgstr "True Type Koleksiyonundan seçim yapın."
msgid "Set text to face camera" msgid "Set text to face camera"
msgstr "Metni yüz kamerasına ayarla" msgstr "Metni bana çevir"
msgid "Orient the text towards the camera." msgid "Orient the text towards the camera."
msgstr "Metni kameraya doğru yönlendirin." msgstr "Metni kameraya doğru yönlendirin."
@ -1048,7 +1048,7 @@ msgstr "Satır boşluğu"
#. TRN - Input label. Be short as possible #. TRN - Input label. Be short as possible
msgid "Boldness" msgid "Boldness"
msgstr "Boldness" msgstr "Kalınlık"
#. TRN - Input label. Be short as possible #. TRN - Input label. Be short as possible
#. Like Font italic #. Like Font italic
@ -1269,7 +1269,7 @@ msgid "Center of circle"
msgstr "Çemberin merkezi" msgstr "Çemberin merkezi"
msgid "ShiftLeft mouse button" msgid "ShiftLeft mouse button"
msgstr "Shift Sol fare düğmesi" msgstr "Shift + Sol fare düğmesi"
msgid "Select feature" msgid "Select feature"
msgstr "Özellik seçin" msgstr "Özellik seçin"
@ -1278,10 +1278,10 @@ msgid "Select point"
msgstr "Nokta seç" msgstr "Nokta seç"
msgid "Delete" msgid "Delete"
msgstr "Sil" msgstr "Delete"
msgid "Restart selection" msgid "Restart selection"
msgstr "Seçimi yeniden başlat" msgstr "Seçimi sıfırla"
msgid "Esc" msgid "Esc"
msgstr "Esc" msgstr "Esc"
@ -13831,7 +13831,7 @@ msgid "For more information, please check out Wiki"
msgstr "Daha fazla bilgi için lütfen Wiki'ye göz atın" msgstr "Daha fazla bilgi için lütfen Wiki'ye göz atın"
msgid "Collapse" msgid "Collapse"
msgstr "Çökme" msgstr "Daralt"
msgid "Daily Tips" msgid "Daily Tips"
msgstr "Günlük İpuçları" msgstr "Günlük İpuçları"

View file

@ -23,16 +23,16 @@ msgid "Supports Painting"
msgstr "Малювання підтримки" msgstr "Малювання підтримки"
msgid "Alt + Mouse wheel" msgid "Alt + Mouse wheel"
msgstr "Alt + Коліщатко миші" msgstr "Alt + коліщатко миші"
msgid "Section view" msgid "Section view"
msgstr "Вигляд у розрізі" msgstr "Вигляд у розрізі"
msgid "Reset direction" msgid "Reset direction"
msgstr "Напрямок скидання" msgstr "Скинути напрямок"
msgid "Ctrl + Mouse wheel" msgid "Ctrl + Mouse wheel"
msgstr "Ctrl + Коліщатко миші" msgstr "Ctrl + коліщатко миші"
msgid "Pen size" msgid "Pen size"
msgstr "Розмір пера" msgstr "Розмір пера"
@ -53,7 +53,7 @@ msgid "Shift + Left mouse button"
msgstr "Shift + Ліва кнопка миші" msgstr "Shift + Ліва кнопка миші"
msgid "Erase" msgid "Erase"
msgstr "Ластик" msgstr "Гумка"
msgid "Erase all painting" msgid "Erase all painting"
msgstr "Стерти всі малюнки" msgstr "Стерти всі малюнки"
@ -74,13 +74,13 @@ msgid "Tool type"
msgstr "Тип інструменту" msgstr "Тип інструменту"
msgid "Smart fill angle" msgid "Smart fill angle"
msgstr "Розумний кут заливки" msgstr "Розумний кут заповнення"
msgid "On overhangs only" msgid "On overhangs only"
msgstr "Тільки на звисах" msgstr "Тільки на виступах"
msgid "Auto support threshold angle: " msgid "Auto support threshold angle: "
msgstr "Кут порога автоматичної підтримки: " msgstr "Пороговий кут автоматичної підтримки: "
msgid "Circle" msgid "Circle"
msgstr "Коло" msgstr "Коло"
@ -118,8 +118,8 @@ msgid ""
"Filament count exceeds the maximum number that painting tool supports. only " "Filament count exceeds the maximum number that painting tool supports. only "
"the first %1% filaments will be available in painting tool." "the first %1% filaments will be available in painting tool."
msgstr "" msgstr ""
"Кількість філаменту перевищує максимальну кількість, яка підтримуєінструмент " "Кількість філаменту перевищує максимальну кількість, яку підтримує інструмент "
"для фарбування. тільки перші %1% ниток будуть доступні у засобі забарвлення." "малювання. Лише перші %1% філаменту будуть доступні в інструменті малювання."
msgid "Color Painting" msgid "Color Painting"
msgstr "Кольорове малювання" msgstr "Кольорове малювання"
@ -149,34 +149,34 @@ msgid "Brush"
msgstr "Пензель" msgstr "Пензель"
msgid "Smart fill" msgid "Smart fill"
msgstr "Інтелектуальне заливання" msgstr "Інтелектуальне заповнення"
msgid "Bucket fill" msgid "Bucket fill"
msgstr "Заливка відра" msgstr "Заповнення відром"
msgid "Height range" msgid "Height range"
msgstr "Діапазон висот" msgstr "Діапазон висот"
msgid "Alt + Shift + Enter" msgid "Alt + Shift + Enter"
msgstr "" msgstr "Alt + Shift + Enter"
msgid "Toggle Wireframe" msgid "Toggle Wireframe"
msgstr "Переключення каркасу" msgstr "Переключення каркасу"
msgid "Shortcut Key " msgid "Shortcut Key "
msgstr "Поєднання клавіш " msgstr "Комбінація клавіш "
msgid "Triangle" msgid "Triangle"
msgstr "Трикутник" msgstr "Трикутник"
msgid "Height Range" msgid "Height Range"
msgstr "Переключити каркас" msgstr "Діапазон висот"
msgid "Vertical" msgid "Vertical"
msgstr "" msgstr "Вертикальний"
msgid "Horizontal" msgid "Horizontal"
msgstr "" msgstr "Горизонтальний"
msgid "Remove painted color" msgid "Remove painted color"
msgstr "Видалити зафарбований колір" msgstr "Видалити зафарбований колір"
@ -201,7 +201,7 @@ msgid "Optimize orientation"
msgstr "Оптимізувати орієнтацію" msgstr "Оптимізувати орієнтацію"
msgid "Apply" msgid "Apply"
msgstr "Готово" msgstr "Застосувати"
msgid "Scale" msgid "Scale"
msgstr "Масштаб" msgstr "Масштаб"
@ -475,7 +475,7 @@ msgid "Keep"
msgstr "Тримати" msgstr "Тримати"
msgid "Flip" msgid "Flip"
msgstr "Переверніть" msgstr "Перевернути"
msgid "After cut" msgid "After cut"
msgstr "Після вирізування" msgstr "Після вирізування"
@ -790,7 +790,7 @@ msgid "OK"
msgstr "ОК" msgstr "ОК"
msgid "Rename style" msgid "Rename style"
msgstr "" msgstr "Перейменувати стиль"
msgid "Rename current style." msgid "Rename current style."
msgstr "" msgstr ""
@ -818,13 +818,13 @@ msgid "Only valid font can be added to style."
msgstr "" msgstr ""
msgid "Add style to my list." msgid "Add style to my list."
msgstr "" msgstr "Додати стиль до мого списку."
msgid "Save as new style." msgid "Save as new style."
msgstr "" msgstr "Зберегти як новий стиль."
msgid "Remove style" msgid "Remove style"
msgstr "" msgstr "Видалити стиль"
msgid "Can't remove the last existing style." msgid "Can't remove the last existing style."
msgstr "" msgstr ""
@ -1241,7 +1241,7 @@ msgid "Edge"
msgstr "" msgstr ""
msgid "Plane" msgid "Plane"
msgstr "" msgstr "Площина"
msgid "Point on edge" msgid "Point on edge"
msgstr "" msgstr ""
@ -1809,13 +1809,13 @@ msgid "Mirror object"
msgstr "Дзеркальний об'єкт" msgstr "Дзеркальний об'єкт"
msgid "Edit text" msgid "Edit text"
msgstr "" msgstr "Редагувати текст"
msgid "Ability to change text, font, size, ..." msgid "Ability to change text, font, size, ..."
msgstr "" msgstr ""
msgid "Edit SVG" msgid "Edit SVG"
msgstr "" msgstr "Редагувати SVG"
msgid "Change SVG source file, projection, size, ..." msgid "Change SVG source file, projection, size, ..."
msgstr "" msgstr ""
@ -2995,7 +2995,7 @@ msgid ""
"The AMS will automatically read the filament information when inserting a " "The AMS will automatically read the filament information when inserting a "
"new Bambu Lab filament. This takes about 20 seconds." "new Bambu Lab filament. This takes about 20 seconds."
msgstr "" msgstr ""
"AMS автоматично зчитує інформацію про філаментає при вставці новогоФіламент " "AMS автоматично зчитає інформацію про філамент при вставці нового філаменту "
"Bambu Lab. Це займає близько 20 секунд." "Bambu Lab. Це займає близько 20 секунд."
msgid "" msgid ""
@ -3003,17 +3003,17 @@ msgid ""
"automatically read any information until printing is completed." "automatically read any information until printing is completed."
msgstr "" msgstr ""
"Примітка: якщо під час друку буде вставлено новий філамент, AMS не " "Примітка: якщо під час друку буде вставлено новий філамент, AMS не "
"будеавтоматично читати будь-яку інформацію до завершення друку." "буде автоматично читати будь-яку інформацію до завершення друку."
msgid "" msgid ""
"When inserting a new filament, the AMS will not automatically read its " "When inserting a new filament, the AMS will not automatically read its "
"information, leaving it blank for you to enter manually." "information, leaving it blank for you to enter manually."
msgstr "" msgstr ""
"При вставці нової нитки AMS не автоматично зчитуватиме її\n" "При вставці новогр філаменту, AMS не ьуде автоматично зчитувати \n"
"інформацію, залишивши поле порожнім для введення вручну." "інформацію про нього, залишивши поле порожнім для введення вручну."
msgid "Power on update" msgid "Power on update"
msgstr "Оновлення під час увімкнення" msgstr "Оновлення після ввімкнення"
msgid "" msgid ""
"The AMS will automatically read the information of inserted filament on " "The AMS will automatically read the information of inserted filament on "
@ -3028,9 +3028,9 @@ msgid ""
"during startup and will continue to use the information recorded before the " "during startup and will continue to use the information recorded before the "
"last shutdown." "last shutdown."
msgstr "" msgstr ""
"AMS не буде автоматично зчитувати інформацію з вставленої нитки.\n" "AMS не буде автоматично зчитувати інформацію про вставлений філамент\n"
"під час запуску і продовжуватиме використовувати інформацію, записану до\n" "під час запуску і продовжуватиме використовувати інформацію, записану до\n"
"останнє вимкнення." "останнтого вимкнення."
msgid "Update remaining capacity" msgid "Update remaining capacity"
msgstr "Оновити ємність, що залишилася" msgstr "Оновити ємність, що залишилася"
@ -3683,7 +3683,7 @@ msgid "Total"
msgstr "Загальний" msgstr "Загальний"
msgid "Tower" msgid "Tower"
msgstr "" msgstr "Вежа"
msgid "Total Estimation" msgid "Total Estimation"
msgstr "Загальна оцінка" msgstr "Загальна оцінка"
@ -3692,7 +3692,7 @@ msgid "Total time"
msgstr "Загальний час" msgstr "Загальний час"
msgid "Total cost" msgid "Total cost"
msgstr "" msgstr "Загальна вартість"
msgid "up to" msgid "up to"
msgstr "аж до" msgstr "аж до"
@ -4067,7 +4067,7 @@ msgid "Application is closing"
msgstr "Додаток закривається" msgstr "Додаток закривається"
msgid "Closing Application while some presets are modified." msgid "Closing Application while some presets are modified."
msgstr "Закриття програми при зміні деяких пресетів." msgstr "Закриття програми під чвс зміни деяких налаштувань."
msgid "Logging" msgid "Logging"
msgstr "Ведення журналу" msgstr "Ведення журналу"
@ -4082,7 +4082,7 @@ msgid "Device"
msgstr "Пристрій" msgstr "Пристрій"
msgid "Project" msgid "Project"
msgstr "Проект" msgstr "Проєкт"
msgid "Yes" msgid "Yes"
msgstr "Так" msgstr "Так"
@ -4091,7 +4091,7 @@ msgid "No"
msgstr "Ні" msgstr "Ні"
msgid "will be closed before creating a new model. Do you want to continue?" msgid "will be closed before creating a new model. Do you want to continue?"
msgstr "буде закрито перед створенням нової моделі. Ви хочете продовжувати?" msgstr "буде закрито перед створенням нової моделі. Ви хочете продовжити?"
msgid "Slice plate" msgid "Slice plate"
msgstr "Нарізати моделі" msgstr "Нарізати моделі"
@ -4929,7 +4929,7 @@ msgid "Rate the Print Profile"
msgstr "" msgstr ""
msgid "Comment" msgid "Comment"
msgstr "" msgstr "Коментувати"
msgid "Rate this print" msgid "Rate this print"
msgstr "" msgstr ""
@ -5213,10 +5213,10 @@ msgstr "Верх"
msgctxt "Layers" msgctxt "Layers"
msgid "Bottom" msgid "Bottom"
msgstr "Ніз" msgstr "Низ"
msgid "Enable AI monitoring of printing" msgid "Enable AI monitoring of printing"
msgstr "Увімкнути ІІ-моніторинг друку" msgstr "Увімкнути ШІ-моніторинг друку"
msgid "Sensitivity of pausing is" msgid "Sensitivity of pausing is"
msgstr "Чутливість паузи" msgstr "Чутливість паузи"
@ -5228,7 +5228,7 @@ msgid ""
"The localization tag of build plate is detected, and printing is paused if " "The localization tag of build plate is detected, and printing is paused if "
"the tag is not in predefined range." "the tag is not in predefined range."
msgstr "" msgstr ""
"Виявлено тег локалізації робочої пластини, і друк припиняється,якщо\n" "Виявлено тег локалізації робочої пластини, і друк припиняється, якщо\n"
"тег не знаходиться в певному діапазоні." "тег не знаходиться в певному діапазоні."
msgid "First Layer Inspection" msgid "First Layer Inspection"
@ -5771,21 +5771,21 @@ msgid ""
msgstr "" msgstr ""
msgid "Private protection" msgid "Private protection"
msgstr "" msgstr "Приватний захист"
msgid "Is the printer ready? Is the print sheet in place, empty and clean?" msgid "Is the printer ready? Is the print sheet in place, empty and clean?"
msgstr "" msgstr ""
msgid "Upload and Print" msgid "Upload and Print"
msgstr "" msgstr "Завантажити і друкувати"
msgid "" msgid ""
"Print By Object: \n" "Print By Object: \n"
"Suggest to use auto-arrange to avoid collisions when printing." "Suggest to use auto-arrange to avoid collisions when printing."
msgstr "" msgstr ""
"Друк об'єктом: \n" "Друк за об'єктом: \n"
"Запропонуйте використовувати автоматичне розташування, щоб уникнути " "Рекомендовано використовувати автоматичне розташування, щоб уникнути "
"колізійпід час друку." "колізій під час друку."
msgid "Send G-code" msgid "Send G-code"
msgstr "Надіслати G-код" msgstr "Надіслати G-код"
@ -6468,7 +6468,7 @@ msgid ""
"printer firmware to support AMS slot assignment." "printer firmware to support AMS slot assignment."
msgstr "" msgstr ""
"Філамент %s не відповідає філаменту в слоті AMS %s. Будь ласка, оновіть " "Філамент %s не відповідає філаменту в слоті AMS %s. Будь ласка, оновіть "
"Прошивка принтера для підтримки призначення слотів AMS." "прошивку принтера для підтримки перепризначення слотів AMS."
msgid "" msgid ""
"Filament does not match the filament in AMS slot. Please update the printer " "Filament does not match the filament in AMS slot. Please update the printer "
@ -6481,13 +6481,13 @@ msgid ""
"The printer firmware only supports sequential mapping of filament => AMS " "The printer firmware only supports sequential mapping of filament => AMS "
"slot." "slot."
msgstr "" msgstr ""
"Прошивка принтера підтримує лише послідовне зіставленняфіламенту => AMS слот." "Прошивка принтера підтримує лише послідовне зіставлення філаменту => AMS слот."
msgid "An SD card needs to be inserted before printing." msgid "An SD card needs to be inserted before printing."
msgstr "Перед печаткою необхідно вставити картку SD." msgstr "Перед початком друку необхідно вставити картку SD."
msgid "The selected printer is incompatible with the chosen printer presets." msgid "The selected printer is incompatible with the chosen printer presets."
msgstr "" msgstr "Вибраний принтер несумісний зі встановленими налаштуваннями."
msgid "An SD card needs to be inserted to record timelapse." msgid "An SD card needs to be inserted to record timelapse."
msgstr "SD-карта повинна бути вставлена для запису таймлапсу." msgstr "SD-карта повинна бути вставлена для запису таймлапсу."
@ -6644,7 +6644,7 @@ msgid "Would you like to log in this printer with current account?"
msgstr "Ви хочете увійти до цього принтера з поточним обліковим записом?" msgstr "Ви хочете увійти до цього принтера з поточним обліковим записом?"
msgid "Check the reason" msgid "Check the reason"
msgstr "" msgstr "Перевірте причину"
msgid "Read and accept" msgid "Read and accept"
msgstr "" msgstr ""
@ -6893,7 +6893,7 @@ msgid "Post-processing Scripts"
msgstr "Сценарії постобробки" msgstr "Сценарії постобробки"
msgid "Notes" msgid "Notes"
msgstr "" msgstr "Примітки"
msgid "Frequent" msgid "Frequent"
msgstr "Частий" msgstr "Частий"
@ -7039,10 +7039,10 @@ msgid "Complete print"
msgstr "" msgstr ""
msgid "Filament start G-code" msgid "Filament start G-code"
msgstr "G-код початку Філаменту" msgstr "G-код початку філаменту"
msgid "Filament end G-code" msgid "Filament end G-code"
msgstr "G-код кінця Філаменту" msgstr "G-код кінця філаменту"
msgid "Multimaterial" msgid "Multimaterial"
msgstr "" msgstr ""
@ -10571,7 +10571,7 @@ msgstr ""
"конфігурації шляхом читання змінних середовища." "конфігурації шляхом читання змінних середовища."
msgid "Printer notes" msgid "Printer notes"
msgstr "" msgstr "Нотатки для принтера"
msgid "You can put your notes regarding the printer here." msgid "You can put your notes regarding the printer here."
msgstr "" msgstr ""
@ -14097,7 +14097,7 @@ msgstr ""
#~ "Material becomes soft at this temperature. Thus the heatbed cannot be " #~ "Material becomes soft at this temperature. Thus the heatbed cannot be "
#~ "hotter than this tempature" #~ "hotter than this tempature"
#~ msgstr "" #~ msgstr ""
#~ "При цій температурі матеріал стає м'яким. Таким чином, нагріваєтьсяшар не " #~ "При цій температурі матеріал стає м'яким. Таким чином, нагрівається шар не "
#~ "може бути гарячішим, ніж ця температура" #~ "може бути гарячішим, ніж ця температура"
#~ msgid "Enable this option if machine has auxiliary part cooling fan" #~ msgid "Enable this option if machine has auxiliary part cooling fan"

View file

@ -8,7 +8,7 @@
"compatible_printers": [ "compatible_printers": [
"Bambu Lab X1 Carbon 0.8 nozzle", "Bambu Lab X1 Carbon 0.8 nozzle",
"Bambu Lab X1 0.8 nozzle", "Bambu Lab X1 0.8 nozzle",
"Bambu Lab P1S 0.6 nozzle", "Bambu Lab P1S 0.8 nozzle",
"Bambu Lab X1E 0.8 nozzle" "Bambu Lab X1E 0.8 nozzle"
] ]
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

After

Width:  |  Height:  |  Size: 8.3 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

After

Width:  |  Height:  |  Size: 8.3 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

After

Width:  |  Height:  |  Size: 8.3 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 8.3 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Before After
Before After

View file

@ -110,12 +110,17 @@
"0.1" "0.1"
], ],
"single_extruder_multi_material": "1", "single_extruder_multi_material": "1",
"manual_filament_change": "1",
"change_filament_gcode": "PAUSE", "change_filament_gcode": "PAUSE",
"machine_pause_gcode": "M25", "machine_pause_gcode": "PAUSE",
"default_filament_profile": [ "default_filament_profile": [
"Creality Generic PLA @Ender-3V3-all" "Creality Generic PLA @Ender-3V3-all"
], ],
"machine_start_gcode": "M220 S100 ;Reset Feedrate \nM221 S100 ;Reset Flowrate \n \nM140 S[bed_temperature_initial_layer_single] ;Set final bed temp \nG28 ;Home \n \nG92 E0 ;Reset Extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nM104 S[nozzle_temperature_initial_layer] ;Set final nozzle temp \nG1 X-2.0 Y20 Z0.28 F5000.0 ;Move to start position \nM190 S[bed_temperature_initial_layer_single] ;Wait for bed temp to stabilize \nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize \nG1 X-2.0 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line \nG1 X-1.7 Y145.0 Z0.28 F5000.0 ;Move to side a little \nG1 X-1.7 Y20 Z0.28 F1500.0 E30 ;Draw the second line \nG92 E0 ;Reset Extruder \nG1 E-1.0000 F1800 ;Retract a bit \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 E0.0000 F1800", "machine_start_gcode": "M220 S100 ;Reset Feedrate \nM221 S100 ;Reset Flowrate \n \nM140 S[bed_temperature_initial_layer_single] ;Set final bed temp \nG28 ;Home \n \nG92 E0 ;Reset Extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nM104 S[nozzle_temperature_initial_layer] ;Set final nozzle temp \nG1 X-2.0 Y20 Z0.28 F5000.0 ;Move to start position \nM190 S[bed_temperature_initial_layer_single] ;Wait for bed temp to stabilize \nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize \nG1 X-2.0 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line \nG1 X-1.7 Y145.0 Z0.28 F5000.0 ;Move to side a little \nG1 X-1.7 Y20 Z0.28 F1500.0 E30 ;Draw the second line \nG92 E0 ;Reset Extruder \nG1 E-1.0000 F1800 ;Retract a bit \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 E0.0000 F1800",
"machine_end_gcode": "G91 ;Relative positionning \nG1 E-2 F2700 ;Retract a bit \nG1 E-2 Z0.2 F2400 ;Retract and raise Z \nG1 X5 Y5 F3000 ;Wipe out \nG1 Z5 ;Raise Z more \nG90 ;Absolute positionning \n \nG1 X2 Y218 F3000 ;Present print \nM106 S0 ;Turn-off fan \nM104 S0 ;Turn-off hotend \nM140 S0 ;Turn-off bed \n \nM84 X Y E ;Disable all steppers but Z", "machine_end_gcode": "G91 ;Relative positionning \nG1 E-2 F2700 ;Retract a bit \nG1 E-2 Z0.2 F2400 ;Retract and raise Z \nG1 X5 Y5 F3000 ;Wipe out \nG1 Z5 ;Raise Z more \nG90 ;Absolute positionning \n \nG1 X2 Y218 F3000 ;Present print \nM106 S0 ;Turn-off fan \nM104 S0 ;Turn-off hotend \nM140 S0 ;Turn-off bed \n \nM84 X Y E ;Disable all steppers but Z",
"scan_first_layer": "0" "scan_first_layer": "0",
"thumbnails": [
"96x96",
"300x300"
]
} }

View file

@ -107,6 +107,7 @@
"30" "30"
], ],
"single_extruder_multi_material": "1", "single_extruder_multi_material": "1",
"manual_filament_change": "1",
"change_filament_gcode": "M600", "change_filament_gcode": "M600",
"machine_pause_gcode": "M25", "machine_pause_gcode": "M25",
"default_filament_profile": [ "default_filament_profile": [
@ -114,5 +115,9 @@
], ],
"machine_start_gcode": "M220 S100 ;Reset Feedrate \nM221 S100 ;Reset Flowrate \n \nM140 S[bed_temperature_initial_layer_single] ;Set final bed temp \nG28 ;Home \n \nG92 E0 ;Reset Extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nM104 S[nozzle_temperature_initial_layer] ;Set final nozzle temp \nG1 X-2.1 Y20 Z0.28 F5000.0 ;Move to start position \nM190 S[bed_temperature_initial_layer_single] ;Wait for bed temp to stabilize \nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize \nG1 X-2.1 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line \nG1 X-2.4 Y145.0 Z0.28 F5000.0 ;Move to side a little \nG1 X-2.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line \nG92 E0 ;Reset Extruder \nG1 E-1.0000 F1800 ;Retract a bit \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 E0.0000 F1800", "machine_start_gcode": "M220 S100 ;Reset Feedrate \nM221 S100 ;Reset Flowrate \n \nM140 S[bed_temperature_initial_layer_single] ;Set final bed temp \nG28 ;Home \n \nG92 E0 ;Reset Extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nM104 S[nozzle_temperature_initial_layer] ;Set final nozzle temp \nG1 X-2.1 Y20 Z0.28 F5000.0 ;Move to start position \nM190 S[bed_temperature_initial_layer_single] ;Wait for bed temp to stabilize \nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize \nG1 X-2.1 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line \nG1 X-2.4 Y145.0 Z0.28 F5000.0 ;Move to side a little \nG1 X-2.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line \nG92 E0 ;Reset Extruder \nG1 E-1.0000 F1800 ;Retract a bit \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 E0.0000 F1800",
"machine_end_gcode": "G91 ;Relative positionning \nG1 E-2 F2700 ;Retract a bit \nG1 E-2 Z0.2 F2400 ;Retract and raise Z \nG1 X5 Y5 F3000 ;Wipe out \nG1 Z10 ;Raise Z more \nG90 ;Absolute positionning \n \nG1 X0 Y0 ;Present print \nM106 S0 ;Turn-off fan \nM104 S0 ;Turn-off hotend \nM140 S0 ;Turn-off bed \n \nM84 X Y E ;Disable all steppers but Z", "machine_end_gcode": "G91 ;Relative positionning \nG1 E-2 F2700 ;Retract a bit \nG1 E-2 Z0.2 F2400 ;Retract and raise Z \nG1 X5 Y5 F3000 ;Wipe out \nG1 Z10 ;Raise Z more \nG90 ;Absolute positionning \n \nG1 X0 Y0 ;Present print \nM106 S0 ;Turn-off fan \nM104 S0 ;Turn-off hotend \nM140 S0 ;Turn-off bed \n \nM84 X Y E ;Disable all steppers but Z",
"scan_first_layer": "0" "scan_first_layer": "0",
"thumbnails": [
"96x96",
"300x300"
]
} }

View file

@ -36,13 +36,22 @@
"retract_before_wipe": ["70%"], "retract_before_wipe": ["70%"],
"retraction_length": ["0.5"], "retraction_length": ["0.5"],
"retract_length_toolchange": ["1"], "retract_length_toolchange": ["1"],
"retraction_speed": ["40"],
"deretraction_speed": ["40"], "deretraction_speed": ["40"],
"z_hop": ["0.4"], "extruder_clearance_height_to_lid": "101",
"extruder_clearance_height_to_rod": "45",
"extruder_clearance_radius": "45",
"z_hop": ["0.2"],
"single_extruder_multi_material": "1", "single_extruder_multi_material": "1",
"change_filament_gcode": "", "manual_filament_change": "1",
"change_filament_gcode": "PAUSE",
"machine_pause_gcode": "PAUSE", "machine_pause_gcode": "PAUSE",
"default_filament_profile": ["Creality Generic PLA"], "default_filament_profile": ["Creality Generic PLA"],
"machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]",
"machine_end_gcode": "END_PRINT", "machine_end_gcode": "END_PRINT",
"scan_first_layer": "0" "scan_first_layer": "0",
"thumbnails": [
"96x96",
"300x300"
]
} }

View file

@ -38,12 +38,20 @@
"retract_length_toolchange": ["1"], "retract_length_toolchange": ["1"],
"retraction_speed": ["40"], "retraction_speed": ["40"],
"deretraction_speed": ["40"], "deretraction_speed": ["40"],
"z_hop": ["0.4"], "extruder_clearance_height_to_lid": "101",
"extruder_clearance_height_to_rod": "45",
"extruder_clearance_radius": "45",
"z_hop": ["0.2"],
"single_extruder_multi_material": "1", "single_extruder_multi_material": "1",
"change_filament_gcode": "", "manual_filament_change": "1",
"change_filament_gcode": "PAUSE",
"machine_pause_gcode": "PAUSE", "machine_pause_gcode": "PAUSE",
"default_filament_profile": ["Creality Generic PLA"], "default_filament_profile": ["Creality Generic PLA"],
"machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]",
"machine_end_gcode": "END_PRINT", "machine_end_gcode": "END_PRINT",
"scan_first_layer": "0" "scan_first_layer": "0",
"thumbnails": [
"96x96",
"300x300"
]
} }

View file

@ -36,13 +36,22 @@
"retract_before_wipe": ["70%"], "retract_before_wipe": ["70%"],
"retraction_length": ["0.5"], "retraction_length": ["0.5"],
"retract_length_toolchange": ["1"], "retract_length_toolchange": ["1"],
"retraction_speed": ["40"],
"deretraction_speed": ["40"], "deretraction_speed": ["40"],
"z_hop": ["0.4"], "extruder_clearance_height_to_lid": "101",
"extruder_clearance_height_to_rod": "45",
"extruder_clearance_radius": "45",
"z_hop": ["0.2"],
"single_extruder_multi_material": "1", "single_extruder_multi_material": "1",
"change_filament_gcode": "", "manual_filament_change": "1",
"change_filament_gcode": "PAUSE",
"machine_pause_gcode": "PAUSE", "machine_pause_gcode": "PAUSE",
"default_filament_profile": ["Creality Generic PLA"], "default_filament_profile": ["Creality Generic PLA"],
"machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]",
"machine_end_gcode": "END_PRINT", "machine_end_gcode": "END_PRINT",
"scan_first_layer": "0" "scan_first_layer": "0",
"thumbnails": [
"96x96",
"300x300"
]
} }

View file

@ -37,13 +37,22 @@
"retract_before_wipe": ["70%"], "retract_before_wipe": ["70%"],
"retraction_length": ["0.5"], "retraction_length": ["0.5"],
"retract_length_toolchange": ["1"], "retract_length_toolchange": ["1"],
"retraction_speed": ["40"],
"deretraction_speed": ["40"], "deretraction_speed": ["40"],
"z_hop": ["0.4"], "extruder_clearance_height_to_lid": "101",
"extruder_clearance_height_to_rod": "45",
"extruder_clearance_radius": "45",
"z_hop": ["0.2"],
"single_extruder_multi_material": "1", "single_extruder_multi_material": "1",
"change_filament_gcode": "", "manual_filament_change": "1",
"change_filament_gcode": "PAUSE",
"machine_pause_gcode": "PAUSE", "machine_pause_gcode": "PAUSE",
"default_filament_profile": ["Creality Generic PLA"], "default_filament_profile": ["Creality Generic PLA"],
"machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]",
"machine_end_gcode": "END_PRINT", "machine_end_gcode": "END_PRINT",
"scan_first_layer": "0" "scan_first_layer": "0",
"thumbnails": [
"96x96",
"300x300"
]
} }

View file

@ -37,13 +37,22 @@
"retract_before_wipe": ["70%"], "retract_before_wipe": ["70%"],
"retraction_length": ["0.5"], "retraction_length": ["0.5"],
"retract_length_toolchange": ["1"], "retract_length_toolchange": ["1"],
"retraction_speed": ["40"],
"deretraction_speed": ["40"], "deretraction_speed": ["40"],
"z_hop": ["0.4"], "extruder_clearance_height_to_lid": "101",
"extruder_clearance_height_to_rod": "45",
"extruder_clearance_radius": "45",
"z_hop": ["0.2"],
"single_extruder_multi_material": "1", "single_extruder_multi_material": "1",
"change_filament_gcode": "", "manual_filament_change": "1",
"change_filament_gcode": "PAUSE",
"machine_pause_gcode": "PAUSE", "machine_pause_gcode": "PAUSE",
"default_filament_profile": ["Creality Generic PLA"], "default_filament_profile": ["Creality Generic PLA"],
"machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]",
"machine_end_gcode": "END_PRINT", "machine_end_gcode": "END_PRINT",
"scan_first_layer": "0" "scan_first_layer": "0",
"thumbnails": [
"96x96",
"300x300"
]
} }

View file

@ -37,13 +37,22 @@
"retract_before_wipe": ["70%"], "retract_before_wipe": ["70%"],
"retraction_length": ["0.5"], "retraction_length": ["0.5"],
"retract_length_toolchange": ["1"], "retract_length_toolchange": ["1"],
"retraction_speed": ["40"],
"deretraction_speed": ["40"], "deretraction_speed": ["40"],
"z_hop": ["0.4"], "extruder_clearance_height_to_lid": "101",
"extruder_clearance_height_to_rod": "45",
"extruder_clearance_radius": "45",
"z_hop": ["0.2"],
"single_extruder_multi_material": "1", "single_extruder_multi_material": "1",
"change_filament_gcode": "", "manual_filament_change": "1",
"change_filament_gcode": "PAUSE",
"machine_pause_gcode": "PAUSE", "machine_pause_gcode": "PAUSE",
"default_filament_profile": ["Creality Generic PLA"], "default_filament_profile": ["Creality Generic PLA"],
"machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]",
"machine_end_gcode": "END_PRINT", "machine_end_gcode": "END_PRINT",
"scan_first_layer": "0" "scan_first_layer": "0",
"thumbnails": [
"96x96",
"300x300"
]
} }

View file

@ -113,6 +113,8 @@
"1" "1"
], ],
"z_hop_types": "Normal Lift", "z_hop_types": "Normal Lift",
"support_air_filtration": "0",
"support_chamber_temp_control": "0",
"before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n",
"default_print_profile": "0.16mm Optimal @Bambu Lab X1 Carbon 0.4 nozzle", "default_print_profile": "0.16mm Optimal @Bambu Lab X1 Carbon 0.4 nozzle",
"machine_start_gcode": "G0 Z20 F9000\nG92 E0; G1 E-10 F1200\nG28\nM970 Q1 A10 B10 C130 K0\nM970 Q1 A10 B131 C250 K1\nM974 Q1 S1 P0\nM970 Q0 A10 B10 C130 H20 K0\nM970 Q0 A10 B131 C250 K1\nM974 Q0 S1 P0\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nG29 ;Home\nG90;\nG92 E0 ;Reset Extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 X10.1 Y20 Z0.28 F5000.0 ;Move to start position\nM109 S205;\nG1 X10.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X10.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X10.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder \nG1 X110 Y110 Z2.0 F3000 ;Move Z Axis up", "machine_start_gcode": "G0 Z20 F9000\nG92 E0; G1 E-10 F1200\nG28\nM970 Q1 A10 B10 C130 K0\nM970 Q1 A10 B131 C250 K1\nM974 Q1 S1 P0\nM970 Q0 A10 B10 C130 H20 K0\nM970 Q0 A10 B131 C250 K1\nM974 Q0 S1 P0\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nG29 ;Home\nG90;\nG92 E0 ;Reset Extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 X10.1 Y20 Z0.28 F5000.0 ;Move to start position\nM109 S205;\nG1 X10.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X10.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X10.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder \nG1 X110 Y110 Z2.0 F3000 ;Move Z Axis up",

View file

@ -79,7 +79,7 @@
"support_interface_spacing": "0.5", "support_interface_spacing": "0.5",
"support_interface_speed": "100%", "support_interface_speed": "100%",
"support_interface_pattern": "auto", "support_interface_pattern": "auto",
"support_base_pattern": "default", "support_base_pattern": "rectilinear",
"support_base_pattern_spacing": "2.5", "support_base_pattern_spacing": "2.5",
"support_speed": "50", "support_speed": "50",
"support_threshold_angle": "25", "support_threshold_angle": "25",

View file

@ -79,7 +79,7 @@
"support_interface_spacing": "0.5", "support_interface_spacing": "0.5",
"support_interface_speed": "100%", "support_interface_speed": "100%",
"support_interface_pattern": "auto", "support_interface_pattern": "auto",
"support_base_pattern": "default", "support_base_pattern": "rectilinear",
"support_base_pattern_spacing": "2.5", "support_base_pattern_spacing": "2.5",
"support_speed": "50", "support_speed": "50",
"support_threshold_angle": "25", "support_threshold_angle": "25",

View file

@ -79,7 +79,7 @@
"support_interface_spacing": "0.5", "support_interface_spacing": "0.5",
"support_interface_speed": "100%", "support_interface_speed": "100%",
"support_interface_pattern": "auto", "support_interface_pattern": "auto",
"support_base_pattern": "default", "support_base_pattern": "rectilinear",
"support_base_pattern_spacing": "2.5", "support_base_pattern_spacing": "2.5",
"support_speed": "50", "support_speed": "50",
"support_threshold_angle": "25", "support_threshold_angle": "25",

View file

@ -45,7 +45,7 @@
"45" "45"
], ],
"single_extruder_multi_material": "1", "single_extruder_multi_material": "1",
"change_filament_gcode": "", "change_filament_gcode": "PAUSE",
"machine_pause_gcode": "M0", "machine_pause_gcode": "M0",
"default_filament_profile": [ "default_filament_profile": [
"Elegoo Generic PLA @0.2 nozzle" "Elegoo Generic PLA @0.2 nozzle"

View file

@ -45,7 +45,7 @@
"45" "45"
], ],
"single_extruder_multi_material": "1", "single_extruder_multi_material": "1",
"change_filament_gcode": "", "change_filament_gcode": "PAUSE",
"machine_pause_gcode": "M0", "machine_pause_gcode": "M0",
"default_filament_profile": [ "default_filament_profile": [
"Elegoo Generic PLA @0.4 nozzle" "Elegoo Generic PLA @0.4 nozzle"

View file

@ -45,7 +45,7 @@
"45" "45"
], ],
"single_extruder_multi_material": "1", "single_extruder_multi_material": "1",
"change_filament_gcode": "", "change_filament_gcode": "PAUSE",
"machine_pause_gcode": "M0", "machine_pause_gcode": "M0",
"default_filament_profile": [ "default_filament_profile": [
"Elegoo Generic PLA @0.6 nozzle" "Elegoo Generic PLA @0.6 nozzle"

View file

@ -45,7 +45,7 @@
"45" "45"
], ],
"single_extruder_multi_material": "1", "single_extruder_multi_material": "1",
"change_filament_gcode": "", "change_filament_gcode": "PAUSE",
"machine_pause_gcode": "M0", "machine_pause_gcode": "M0",
"default_filament_profile": [ "default_filament_profile": [
"Elegoo Generic PLA @0.8 nozzle" "Elegoo Generic PLA @0.8 nozzle"

View file

@ -75,7 +75,7 @@
"wipe_distance": ["1"], "wipe_distance": ["1"],
"z_hop": ["0.4"], "z_hop": ["0.4"],
"z_hop_types": ["Normal Lift"], "z_hop_types": ["Normal Lift"],
"change_filament_gcode": "", "change_filament_gcode": "PAUSE",
"machine_pause_gcode": "M0", "machine_pause_gcode": "M0",
"default_filament_profile": [ "default_filament_profile": [
"Elegoo Generic PLA @0.2 nozzle" "Elegoo Generic PLA @0.2 nozzle"

View file

@ -75,7 +75,7 @@
"wipe_distance": ["1"], "wipe_distance": ["1"],
"z_hop": ["0.4"], "z_hop": ["0.4"],
"z_hop_types": ["Normal Lift"], "z_hop_types": ["Normal Lift"],
"change_filament_gcode": "", "change_filament_gcode": "PAUSE",
"machine_pause_gcode": "M0", "machine_pause_gcode": "M0",
"default_filament_profile": [ "default_filament_profile": [
"Elegoo Generic PLA @0.4 nozzle" "Elegoo Generic PLA @0.4 nozzle"

View file

@ -75,7 +75,7 @@
"wipe_distance": ["1"], "wipe_distance": ["1"],
"z_hop": ["0.4"], "z_hop": ["0.4"],
"z_hop_types": ["Normal Lift"], "z_hop_types": ["Normal Lift"],
"change_filament_gcode": "", "change_filament_gcode": "PAUSE",
"machine_pause_gcode": "M0", "machine_pause_gcode": "M0",
"default_filament_profile": [ "default_filament_profile": [
"Elegoo Generic PLA @0.6 nozzle" "Elegoo Generic PLA @0.6 nozzle"

View file

@ -75,7 +75,7 @@
"wipe_distance": ["1"], "wipe_distance": ["1"],
"z_hop": ["0.4"], "z_hop": ["0.4"],
"z_hop_types": ["Normal Lift"], "z_hop_types": ["Normal Lift"],
"change_filament_gcode": "", "change_filament_gcode": "PAUSE",
"machine_pause_gcode": "M0", "machine_pause_gcode": "M0",
"default_filament_profile": [ "default_filament_profile": [
"Elegoo Generic PLA @0.8 nozzle" "Elegoo Generic PLA @0.8 nozzle"

View file

@ -81,7 +81,7 @@
"wipe_distance": ["1"], "wipe_distance": ["1"],
"z_hop": ["0.4"], "z_hop": ["0.4"],
"z_hop_types": ["Normal Lift"], "z_hop_types": ["Normal Lift"],
"change_filament_gcode": "", "change_filament_gcode": "PAUSE",
"machine_pause_gcode": "M0", "machine_pause_gcode": "M0",
"default_filament_profile": [ "default_filament_profile": [
"Elegoo Generic PLA @0.2 nozzle" "Elegoo Generic PLA @0.2 nozzle"

View file

@ -81,7 +81,7 @@
"wipe_distance": ["1"], "wipe_distance": ["1"],
"z_hop": ["0.4"], "z_hop": ["0.4"],
"z_hop_types": ["Normal Lift"], "z_hop_types": ["Normal Lift"],
"change_filament_gcode": "", "change_filament_gcode": "PAUSE",
"machine_pause_gcode": "M0", "machine_pause_gcode": "M0",
"default_filament_profile": [ "default_filament_profile": [
"Elegoo Generic PLA @0.4 nozzle" "Elegoo Generic PLA @0.4 nozzle"

View file

@ -81,7 +81,7 @@
"wipe_distance": ["1"], "wipe_distance": ["1"],
"z_hop": ["0.4"], "z_hop": ["0.4"],
"z_hop_types": ["Normal Lift"], "z_hop_types": ["Normal Lift"],
"change_filament_gcode": "", "change_filament_gcode": "PAUSE",
"machine_pause_gcode": "M0", "machine_pause_gcode": "M0",
"default_filament_profile": [ "default_filament_profile": [
"Elegoo Generic PLA @0.6 nozzle" "Elegoo Generic PLA @0.6 nozzle"

View file

@ -81,7 +81,7 @@
"wipe_distance": ["1"], "wipe_distance": ["1"],
"z_hop": ["0.4"], "z_hop": ["0.4"],
"z_hop_types": ["Normal Lift"], "z_hop_types": ["Normal Lift"],
"change_filament_gcode": "", "change_filament_gcode": "PAUSE",
"machine_pause_gcode": "M0", "machine_pause_gcode": "M0",
"default_filament_profile": [ "default_filament_profile": [
"Elegoo Generic PLA @0.8 nozzle" "Elegoo Generic PLA @0.8 nozzle"

View file

@ -48,7 +48,7 @@
"45" "45"
], ],
"single_extruder_multi_material": "1", "single_extruder_multi_material": "1",
"change_filament_gcode": "", "change_filament_gcode": "PAUSE",
"machine_pause_gcode": "M0", "machine_pause_gcode": "M0",
"default_filament_profile": [ "default_filament_profile": [
"Elegoo Generic PLA @0.2 nozzle" "Elegoo Generic PLA @0.2 nozzle"

View file

@ -48,7 +48,7 @@
"45" "45"
], ],
"single_extruder_multi_material": "1", "single_extruder_multi_material": "1",
"change_filament_gcode": "", "change_filament_gcode": "PAUSE",
"machine_pause_gcode": "M0", "machine_pause_gcode": "M0",
"default_filament_profile": [ "default_filament_profile": [
"Elegoo Generic PLA @0.4 nozzle" "Elegoo Generic PLA @0.4 nozzle"

View file

@ -25,7 +25,7 @@
"retract_length_toolchange": ["2"], "retract_length_toolchange": ["2"],
"deretraction_speed": ["45"], "deretraction_speed": ["45"],
"single_extruder_multi_material": "1", "single_extruder_multi_material": "1",
"change_filament_gcode": "", "change_filament_gcode": "PAUSE",
"machine_pause_gcode": "M0", "machine_pause_gcode": "M0",
"default_filament_profile": ["Elegoo Generic PLA @0.6 nozzle"], "default_filament_profile": ["Elegoo Generic PLA @0.6 nozzle"],
"machine_start_gcode": "M413 S0 ; disable Power Loss Recovery\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S120 ; set temporary nozzle temp to prevent oozing during homing and auto bed leveling\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\n;G29 ; run abl mesh\nM420 S1 ; load mesh\nG1 Z50 F240\nG1 X2 Y10 F3000\n\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", "machine_start_gcode": "M413 S0 ; disable Power Loss Recovery\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S120 ; set temporary nozzle temp to prevent oozing during homing and auto bed leveling\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\n;G29 ; run abl mesh\nM420 S1 ; load mesh\nG1 Z50 F240\nG1 X2 Y10 F3000\n\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0",

View file

@ -39,7 +39,7 @@
"retract_length_toolchange": ["2"], "retract_length_toolchange": ["2"],
"deretraction_speed": ["45"], "deretraction_speed": ["45"],
"single_extruder_multi_material": "1", "single_extruder_multi_material": "1",
"change_filament_gcode": "", "change_filament_gcode": "PAUSE",
"machine_pause_gcode": "M0", "machine_pause_gcode": "M0",
"default_filament_profile": ["Elegoo Generic PLA @0.8 nozzle"], "default_filament_profile": ["Elegoo Generic PLA @0.8 nozzle"],
"machine_start_gcode": "M413 S0 ; disable Power Loss Recovery\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S120 ; set temporary nozzle temp to prevent oozing during homing and auto bed leveling\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\n;G29 ; run abl mesh\nM420 S1 ; load mesh\nG1 Z50 F240\nG1 X2 Y10 F3000\n\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", "machine_start_gcode": "M413 S0 ; disable Power Loss Recovery\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S120 ; set temporary nozzle temp to prevent oozing during homing and auto bed leveling\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\n;G29 ; run abl mesh\nM420 S1 ; load mesh\nG1 Z50 F240\nG1 X2 Y10 F3000\n\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0",

View file

@ -101,7 +101,7 @@
"40" "40"
], ],
"single_extruder_multi_material": "1", "single_extruder_multi_material": "1",
"change_filament_gcode": "", "change_filament_gcode": "PAUSE",
"machine_pause_gcode": "M0", "machine_pause_gcode": "M0",
"default_filament_profile": [ "default_filament_profile": [
"Elegoo Generic PLA" "Elegoo Generic PLA"

View file

@ -439,6 +439,9 @@ var LangText = {
t92: "Cabane de Noël Bambu", t92: "Cabane de Noël Bambu",
t93: "Connexion à l'imprimante", t93: "Connexion à l'imprimante",
t94: "Veuillez configurer la connexion de votre imprimante pour afficher l'interface.", t94: "Veuillez configurer la connexion de votre imprimante pour afficher l'interface.",
t109: "Filaments du système",
t110: "Filaments personnalisés",
t111: "Créer un nouveau filament",
wk1: "Démarrage rapide", wk1: "Démarrage rapide",
wk2: "Cet article présente l'utilisation la plus basique de Orca Slicer. Il guide les utilisateurs pour configurer le logiciel, créer des projets et effectuer la première tâche d'impression étape par étape.", wk2: "Cet article présente l'utilisation la plus basique de Orca Slicer. Il guide les utilisateurs pour configurer le logiciel, créer des projets et effectuer la première tâche d'impression étape par étape.",
wk3: "Workflow basé sur des projets", wk3: "Workflow basé sur des projets",
@ -454,7 +457,7 @@ var LangText = {
wk13: "Format STEP", wk13: "Format STEP",
wk14: "Par rapport au format STL, le format STEP apporte des informations plus efficaces. Grâce à la grande précision de ce format, de nombreuses trajectoires d'extrusion peuvent être générées sous forme d'arcs. Il inclut également la relation d'assemblage de chaque pièce d'un modèle, qui peut être utilisée pour restaurer la vue d'assemblage après la coupe d'un modèle.", wk14: "Par rapport au format STL, le format STEP apporte des informations plus efficaces. Grâce à la grande précision de ce format, de nombreuses trajectoires d'extrusion peuvent être générées sous forme d'arcs. Il inclut également la relation d'assemblage de chaque pièce d'un modèle, qui peut être utilisée pour restaurer la vue d'assemblage après la coupe d'un modèle.",
wk15: "Texte 3D", wk15: "Texte 3D",
wk16: "Avec l'outil Texte 3D, les utilisateurs peuvent facilement créer diverses formes de texte 3D dans le projet, ce qui rend le modèle plus personnalisé. Orca Slicer fournit des dizaines de polices et prend en charge les styles gras et italique pour donner au texte une plus grande flexibilité.", wk16: "Avec l'outil Texte 3D, les utilisateurs peuvent facilement créer diverses formes de texte 3D dans le projet, ce qui rend le modèle plus personnalisé. Orca Slicer fournit des dizaines de polices et prend en charge les styles gras et italique pour donner au texte une plus grande flexibilité."
}, },
zh_CN: { zh_CN: {
t1: "欢迎使用Orca Slicer", t1: "欢迎使用Orca Slicer",

View file

@ -44,6 +44,8 @@ void ExtrusionLine::simplify(const int64_t smallest_line_segment_squared, const
if (junctions.size() <= min_path_size) if (junctions.size() <= min_path_size)
return; return;
// TODO: allow for the first point to be removed in case of simplifying closed Extrusionlines.
/* ExtrusionLines are treated as (open) polylines, so in case an ExtrusionLine is actually a closed polygon, its /* ExtrusionLines are treated as (open) polylines, so in case an ExtrusionLine is actually a closed polygon, its
* starting and ending points will be equal (or almost equal). Therefore, the simplification of the ExtrusionLine * starting and ending points will be equal (or almost equal). Therefore, the simplification of the ExtrusionLine
* should not touch the first and last points. As a result, start simplifying from point at index 1. * should not touch the first and last points. As a result, start simplifying from point at index 1.
@ -52,16 +54,12 @@ void ExtrusionLine::simplify(const int64_t smallest_line_segment_squared, const
// Starting junction should always exist in the simplified path // Starting junction should always exist in the simplified path
new_junctions.emplace_back(junctions.front()); new_junctions.emplace_back(junctions.front());
ExtrusionJunction previous = junctions.front(); /* Initially, previous_previous is always the same as previous because, for open ExtrusionLines the last junction
/* For open ExtrusionLines the last junction cannot be taken into consideration when checking the points at index 1. * cannot be taken into consideration when checking the points at index 1. For closed ExtrusionLines, the first and
* For closed ExtrusionLines, the first and last junctions are the same, so use the prior to last juction. * last junctions are anyway the same.
* */ * */
ExtrusionJunction previous_previous = this->is_closed ? junctions[junctions.size() - 2] : junctions.front(); ExtrusionJunction previous_previous = junctions.front();
ExtrusionJunction previous = junctions.front();
/* TODO: When deleting, combining, or modifying junctions, it would
* probably be good to set the new junction's width to a weighted average
* of the junctions it is derived from.
*/
/* When removing a vertex, we check the height of the triangle of the area /* When removing a vertex, we check the height of the triangle of the area
being removed from the original polygon by the simplification. However, being removed from the original polygon by the simplification. However,
@ -78,20 +76,16 @@ void ExtrusionLine::simplify(const int64_t smallest_line_segment_squared, const
From this area we compute the height of the representative triangle using From this area we compute the height of the representative triangle using
the standard formula for a triangle area: A = .5*b*h the standard formula for a triangle area: A = .5*b*h
*/ */
const ExtrusionJunction& initial = junctions[1]; const ExtrusionJunction& initial = junctions.at(1);
int64_t accumulated_area_removed = int64_t(previous.p.x()) * int64_t(initial.p.y()) - int64_t(previous.p.y()) * int64_t(initial.p.x()); // Twice the Shoelace formula for area of polygon per line segment. int64_t accumulated_area_removed = int64_t(previous.p.x()) * int64_t(initial.p.y()) - int64_t(previous.p.y()) * int64_t(initial.p.x()); // Twice the Shoelace formula for area of polygon per line segment.
// For a closed polygon we process the last point, which is the same as the first point. for (size_t point_idx = 1; point_idx < junctions.size() - 1; point_idx++)
for (size_t point_idx = 1; point_idx < junctions.size() - (this->is_closed ? 0 : 1); point_idx++)
{ {
// For the last point of a closed polygon, use the first point of the new polygon in case we modified it. const ExtrusionJunction& current = junctions[point_idx];
const bool is_last = point_idx + 1 == junctions.size();
const ExtrusionJunction& current = is_last ? new_junctions[0] : junctions[point_idx];
// Spill over in case of overflow, unless the [next] vertex will then be equal to [previous]. // Spill over in case of overflow, unless the [next] vertex will then be equal to [previous].
const bool spill_over = this->is_closed && point_idx + 2 >= junctions.size() && const bool spill_over = point_idx + 1 == junctions.size() && new_junctions.size() > 1;
point_idx + 2 - junctions.size() < new_junctions.size(); ExtrusionJunction& next = spill_over ? new_junctions[0] : junctions[point_idx + 1];
ExtrusionJunction& next = spill_over ? new_junctions[point_idx + 2 - junctions.size()] : junctions[point_idx + 1];
const int64_t removed_area_next = int64_t(current.p.x()) * int64_t(next.p.y()) - int64_t(current.p.y()) * int64_t(next.p.x()); // Twice the Shoelace formula for area of polygon per line segment. const int64_t removed_area_next = int64_t(current.p.x()) * int64_t(next.p.y()) - int64_t(current.p.y()) * int64_t(next.p.x()); // Twice the Shoelace formula for area of polygon per line segment.
const int64_t negative_area_closing = int64_t(next.p.x()) * int64_t(previous.p.y()) - int64_t(next.p.y()) * int64_t(previous.p.x()); // Area between the origin and the short-cutting segment const int64_t negative_area_closing = int64_t(next.p.x()) * int64_t(previous.p.y()) - int64_t(next.p.y()) * int64_t(previous.p.x()); // Area between the origin and the short-cutting segment
@ -139,18 +133,12 @@ void ExtrusionLine::simplify(const int64_t smallest_line_segment_squared, const
// We should instead move this point to a location where both edges are kept and then remove the previous point that we wanted to keep. // We should instead move this point to a location where both edges are kept and then remove the previous point that we wanted to keep.
// By taking the intersection of these two lines, we get a point that preserves the direction (so it makes the corner a bit more pointy). // By taking the intersection of these two lines, we get a point that preserves the direction (so it makes the corner a bit more pointy).
// We just need to be sure that the intersection point does not introduce an artifact itself. // We just need to be sure that the intersection point does not introduce an artifact itself.
// o < prev_prev
// |
// o < prev
// \ < short segment
// intersection > + o-------------------o < next
// ^ current
Point intersection_point; Point intersection_point;
bool has_intersection = Line(previous_previous.p, previous.p).intersection_infinite(Line(current.p, next.p), &intersection_point); bool has_intersection = Line(previous_previous.p, previous.p).intersection_infinite(Line(current.p, next.p), &intersection_point);
if (!has_intersection if (!has_intersection
|| Line::distance_to_infinite_squared(intersection_point, previous.p, current.p) > double(allowed_error_distance_squared) || Line::distance_to_infinite_squared(intersection_point, previous.p, current.p) > double(allowed_error_distance_squared)
|| (intersection_point - previous.p).cast<int64_t>().squaredNorm() > smallest_line_segment_squared // The intersection point is way too far from the 'previous' || (intersection_point - previous.p).cast<int64_t>().squaredNorm() > smallest_line_segment_squared // The intersection point is way too far from the 'previous'
|| (intersection_point - current.p).cast<int64_t>().squaredNorm() > smallest_line_segment_squared) // and 'current' points, so it shouldn't replace 'current' || (intersection_point - next.p).cast<int64_t>().squaredNorm() > smallest_line_segment_squared) // and 'next' points, so it shouldn't replace 'current'
{ {
// We can't find a better spot for it, but the size of the line is more than 5 micron. // We can't find a better spot for it, but the size of the line is more than 5 micron.
// So the only thing we can do here is leave it in... // So the only thing we can do here is leave it in...
@ -186,14 +174,15 @@ void ExtrusionLine::simplify(const int64_t smallest_line_segment_squared, const
new_junctions.push_back(current); new_junctions.push_back(current);
} }
if (this->is_closed) {
/* The first and last points should be the same for a closed polygon.
* We processed the last point above, so copy it into the first point.
*/
new_junctions.front().p = new_junctions.back().p;
} else {
// Ending junction (vertex) should always exist in the simplified path // Ending junction (vertex) should always exist in the simplified path
new_junctions.emplace_back(junctions.back()); new_junctions.emplace_back(junctions.back());
/* In case this is a closed polygon (instead of a poly-line-segments), the invariant that the first and last points are the same should be enforced.
* Since one of them didn't move, and the other can't have been moved further than the constraints, if originally equal, they can simply be equated.
*/
if ((junctions.front().p - junctions.back().p).cast<int64_t>().squaredNorm() == 0)
{
new_junctions.back().p = junctions.front().p;
} }
junctions = new_junctions; junctions = new_junctions;

View file

@ -85,8 +85,6 @@ set(lisbslic3r_sources
ExtrusionEntity.hpp ExtrusionEntity.hpp
ExtrusionEntityCollection.cpp ExtrusionEntityCollection.cpp
ExtrusionEntityCollection.hpp ExtrusionEntityCollection.hpp
ExtrusionRole.cpp
ExtrusionRole.hpp
ExtrusionSimulator.cpp ExtrusionSimulator.cpp
ExtrusionSimulator.hpp ExtrusionSimulator.hpp
FileParserError.hpp FileParserError.hpp

View file

@ -1,94 +0,0 @@
///|/ Copyright (c) Prusa Research 2023 Pavel Mikuš @Godrak, Oleksandra Iushchenko @YuSanka, Vojtěch Bubník @bubnikv
///|/
///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher
///|/
#include "ExtrusionRole.hpp"
#include "I18N.hpp"
#include <string>
#include <string_view>
#include <cassert>
namespace Slic3r {
// Convert a rich bitmask based ExtrusionRole to a less expressive ordinal GCodeExtrusionRole.
// GCodeExtrusionRole is to be serialized into G-code and deserialized by G-code viewer,
GCodeExtrusionRole extrusion_role_to_gcode_extrusion_role(ExtrusionRole role)
{
if (role == erNone) return GCodeExtrusionRole::None;
if (role == erOverhangPerimeter) return GCodeExtrusionRole::OverhangPerimeter;
if (role == erExternalPerimeter) return GCodeExtrusionRole::ExternalPerimeter;
if (role == erPerimeter) return GCodeExtrusionRole::Perimeter;
if (role == erInternalInfill) return GCodeExtrusionRole::InternalInfill;
if (role == erSolidInfill) return GCodeExtrusionRole::SolidInfill;
if (role == erTopSolidInfill) return GCodeExtrusionRole::TopSolidInfill;
if (role == erIroning) return GCodeExtrusionRole::Ironing;
if (role == erBridgeInfill) return GCodeExtrusionRole::BridgeInfill;
if (role == erGapFill) return GCodeExtrusionRole::GapFill;
if (role == erSkirt) return GCodeExtrusionRole::Skirt;
if (role == erSupportMaterial) return GCodeExtrusionRole::SupportMaterial;
if (role == erSupportMaterialInterface) return GCodeExtrusionRole::SupportMaterialInterface;
if (role == erWipeTower) return GCodeExtrusionRole::WipeTower;
assert(false);
return GCodeExtrusionRole::None;
}
std::string gcode_extrusion_role_to_string(GCodeExtrusionRole role)
{
switch (role) {
case GCodeExtrusionRole::None : return L("Unknown");
case GCodeExtrusionRole::Perimeter : return L("Perimeter");
case GCodeExtrusionRole::ExternalPerimeter : return L("External perimeter");
case GCodeExtrusionRole::OverhangPerimeter : return L("Overhang perimeter");
case GCodeExtrusionRole::InternalInfill : return L("Internal infill");
case GCodeExtrusionRole::SolidInfill : return L("Solid infill");
case GCodeExtrusionRole::TopSolidInfill : return L("Top solid infill");
case GCodeExtrusionRole::Ironing : return L("Ironing");
case GCodeExtrusionRole::BridgeInfill : return L("Bridge infill");
case GCodeExtrusionRole::GapFill : return L("Gap fill");
case GCodeExtrusionRole::Skirt : return L("Skirt/Brim");
case GCodeExtrusionRole::SupportMaterial : return L("Support material");
case GCodeExtrusionRole::SupportMaterialInterface : return L("Support material interface");
case GCodeExtrusionRole::WipeTower : return L("Wipe tower");
case GCodeExtrusionRole::Custom : return L("Custom");
default : assert(false);
}
return {};
}
GCodeExtrusionRole string_to_gcode_extrusion_role(const std::string_view role)
{
if (role == L("Perimeter"))
return GCodeExtrusionRole::Perimeter;
else if (role == L("External perimeter"))
return GCodeExtrusionRole::ExternalPerimeter;
else if (role == L("Overhang perimeter"))
return GCodeExtrusionRole::OverhangPerimeter;
else if (role == L("Internal infill"))
return GCodeExtrusionRole::InternalInfill;
else if (role == L("Solid infill"))
return GCodeExtrusionRole::SolidInfill;
else if (role == L("Top solid infill"))
return GCodeExtrusionRole::TopSolidInfill;
else if (role == L("Ironing"))
return GCodeExtrusionRole::Ironing;
else if (role == L("Bridge infill"))
return GCodeExtrusionRole::BridgeInfill;
else if (role == L("Gap fill"))
return GCodeExtrusionRole::GapFill;
else if (role == L("Skirt") || role == L("Skirt/Brim")) // "Skirt" is for backward compatibility with 2.3.1 and earlier
return GCodeExtrusionRole::Skirt;
else if (role == L("Support material"))
return GCodeExtrusionRole::SupportMaterial;
else if (role == L("Support material interface"))
return GCodeExtrusionRole::SupportMaterialInterface;
else if (role == L("Wipe tower"))
return GCodeExtrusionRole::WipeTower;
else if (role == L("Custom"))
return GCodeExtrusionRole::Custom;
else
return GCodeExtrusionRole::None;
}
}

View file

@ -1,83 +0,0 @@
///|/ Copyright (c) 2023 Robert Schiele @schiele
///|/ Copyright (c) Prusa Research 2023 Vojtěch Bubník @bubnikv
///|/
///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher
///|/
#ifndef slic3r_ExtrusionRole_hpp_
#define slic3r_ExtrusionRole_hpp_
#include "enum_bitmask.hpp"
#include "ExtrusionEntity.hpp"
#include <string>
#include <string_view>
#include <cstdint>
namespace Slic3r {
enum class ExtrusionRoleModifier : uint16_t {
// 1) Extrusion types
// Perimeter (external, inner, ...)
Perimeter,
// Infill (top / bottom / solid inner / sparse inner / bridging inner ...)
Infill,
// Variable width extrusion
Thin,
// Support material extrusion
Support,
Skirt,
Wipe,
// 2) Extrusion modifiers
External,
Solid,
Ironing,
Bridge,
// 3) Special types
// Indicator that the extrusion role was mixed from multiple differing extrusion roles,
// for example from Support and SupportInterface.
Mixed,
// Stopper, there should be maximum 16 modifiers defined for uint16_t bit mask.
Count
};
// There should be maximum 16 modifiers defined for uint16_t bit mask.
static_assert(int(ExtrusionRoleModifier::Count) <= 16, "ExtrusionRoleModifier: there must be maximum 16 modifiers defined to fit a 16 bit bitmask");
using ExtrusionRoleModifiers = enum_bitmask<ExtrusionRoleModifier>;
ENABLE_ENUM_BITMASK_OPERATORS(ExtrusionRoleModifier);
// Be careful when editing this list as many parts of the code depend
// on the values of these ordinars, for example
// GCodeViewer::Extrusion_Role_Colors
enum class GCodeExtrusionRole : uint8_t {
None,
Perimeter,
ExternalPerimeter,
OverhangPerimeter,
InternalInfill,
SolidInfill,
TopSolidInfill,
Ironing,
BridgeInfill,
GapFill,
Skirt,
SupportMaterial,
SupportMaterialInterface,
WipeTower,
// Custom (user defined) G-code block, for example start / end G-code.
Custom,
// Stopper to count number of enums.
Count
};
// Convert a rich bitmask based ExtrusionRole to a less expressive ordinal GCodeExtrusionRole.
// GCodeExtrusionRole is to be serialized into G-code and deserialized by G-code viewer,
GCodeExtrusionRole extrusion_role_to_gcode_extrusion_role(ExtrusionRole role);
std::string gcode_extrusion_role_to_string(GCodeExtrusionRole role);
GCodeExtrusionRole string_to_gcode_extrusion_role(const std::string_view role);
}
#endif // slic3r_ExtrusionRole_hpp_

View file

@ -4177,7 +4177,7 @@ LayerResult GCode::process_layer(
m_last_obj_copy = this_object_copy; m_last_obj_copy = this_object_copy;
this->set_origin(unscale(offset)); this->set_origin(unscale(offset));
//FIXME the following code prints regions in the order they are defined, the path is not optimized in any way. //FIXME the following code prints regions in the order they are defined, the path is not optimized in any way.
bool is_infill_first =print.config().is_infill_first; bool is_infill_first =m_config.is_infill_first;
auto has_infill = [](const std::vector<ObjectByExtruder::Island::Region> &by_region) { auto has_infill = [](const std::vector<ObjectByExtruder::Island::Region> &by_region) {
for (auto region : by_region) { for (auto region : by_region) {

View file

@ -3,6 +3,7 @@
///|/ ///|/
///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher ///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher
///|/ ///|/
#include <iostream>
#include <memory.h> #include <memory.h>
#include <cstring> #include <cstring>
#include <cfloat> #include <cfloat>
@ -45,7 +46,7 @@ PressureEqualizer::PressureEqualizer(const Slic3r::GCodeConfig &config) : m_use_
m_current_extruder = 0; m_current_extruder = 0;
// Zero the position of the XYZE axes + the current feed // Zero the position of the XYZE axes + the current feed
memset(m_current_pos, 0, sizeof(float) * 5); memset(m_current_pos, 0, sizeof(float) * 5);
m_current_extrusion_role = GCodeExtrusionRole::None; m_current_extrusion_role = ExtrusionRole::erNone;
// Expect the first command to fill the nozzle (deretract). // Expect the first command to fill the nozzle (deretract).
m_retracted = true; m_retracted = true;
@ -74,7 +75,7 @@ PressureEqualizer::PressureEqualizer(const Slic3r::GCodeConfig &config) : m_use_
} }
// Don't regulate the pressure before and after ironing. // Don't regulate the pressure before and after ironing.
for (const GCodeExtrusionRole er : {GCodeExtrusionRole::Ironing}) { for (const ExtrusionRole er : {ExtrusionRole::erIroning}) {
m_max_volumetric_extrusion_rate_slopes[size_t(er)].negative = 0; m_max_volumetric_extrusion_rate_slopes[size_t(er)].negative = 0;
m_max_volumetric_extrusion_rate_slopes[size_t(er)].positive = 0; m_max_volumetric_extrusion_rate_slopes[size_t(er)].positive = 0;
} }
@ -260,7 +261,7 @@ bool PressureEqualizer::process_line(const char *line, const char *line_end, GCo
if (strncmp(line, EXTRUSION_ROLE_TAG.data(), EXTRUSION_ROLE_TAG.length()) == 0) { if (strncmp(line, EXTRUSION_ROLE_TAG.data(), EXTRUSION_ROLE_TAG.length()) == 0) {
line += EXTRUSION_ROLE_TAG.length(); line += EXTRUSION_ROLE_TAG.length();
int role = atoi(line); int role = atoi(line);
m_current_extrusion_role = GCodeExtrusionRole(role); m_current_extrusion_role = ExtrusionRole(role);
#ifdef PRESSURE_EQUALIZER_DEBUG #ifdef PRESSURE_EQUALIZER_DEBUG
++line_idx; ++line_idx;
#endif #endif
@ -589,8 +590,7 @@ void PressureEqualizer::adjust_volumetric_rate(const size_t fist_line_idx, const
if (line_idx == fist_line_idx || !m_gcode_lines[line_idx].extruding()) if (line_idx == fist_line_idx || !m_gcode_lines[line_idx].extruding())
// Nothing to do, the last move is not extruding. // Nothing to do, the last move is not extruding.
return; return;
std::array<float, size_t(ExtrusionRole::erCount)> feedrate_per_extrusion_role{};
std::array<float, size_t(GCodeExtrusionRole::Count)> feedrate_per_extrusion_role{};
feedrate_per_extrusion_role.fill(std::numeric_limits<float>::max()); feedrate_per_extrusion_role.fill(std::numeric_limits<float>::max());
feedrate_per_extrusion_role[int(m_gcode_lines[line_idx].extrusion_role)] = m_gcode_lines[line_idx].volumetric_extrusion_rate_start; feedrate_per_extrusion_role[int(m_gcode_lines[line_idx].extrusion_role)] = m_gcode_lines[line_idx].volumetric_extrusion_rate_start;
@ -600,7 +600,7 @@ void PressureEqualizer::adjust_volumetric_rate(const size_t fist_line_idx, const
if (!m_gcode_lines[idx_prev].extruding()) if (!m_gcode_lines[idx_prev].extruding())
break; break;
// Don't decelerate before ironing. // Don't decelerate before ironing.
if (m_gcode_lines[line_idx].extrusion_role == GCodeExtrusionRole::Ironing) { line_idx = idx_prev; if (m_gcode_lines[line_idx].extrusion_role == ExtrusionRole::erIroning) { line_idx = idx_prev;
continue; continue;
} }
// Volumetric extrusion rate at the start of the succeding segment. // Volumetric extrusion rate at the start of the succeding segment.
@ -609,10 +609,10 @@ void PressureEqualizer::adjust_volumetric_rate(const size_t fist_line_idx, const
line_idx = idx_prev; line_idx = idx_prev;
GCodeLine &line = m_gcode_lines[line_idx]; GCodeLine &line = m_gcode_lines[line_idx];
for (size_t iRole = 1; iRole < size_t(GCodeExtrusionRole::Count); ++ iRole) { for (size_t iRole = 1; iRole < size_t(ExtrusionRole::erCount); ++ iRole) {
const float &rate_slope = m_max_volumetric_extrusion_rate_slopes[iRole].negative; const float &rate_slope = m_max_volumetric_extrusion_rate_slopes[iRole].negative;
if (rate_slope == 0 || feedrate_per_extrusion_role[iRole] == std::numeric_limits<float>::max()) if (rate_slope == 0 || feedrate_per_extrusion_role[iRole] == std::numeric_limits<float>::max())
continue; // The negative rate is unlimited or the rate for GCodeExtrusionRole iRole is unlimited. continue; // The negative rate is unlimited or the rate for ExtrusionRole iRole is unlimited.
float rate_end = feedrate_per_extrusion_role[iRole]; float rate_end = feedrate_per_extrusion_role[iRole];
if (iRole == size_t(line.extrusion_role) && rate_succ < rate_end) if (iRole == size_t(line.extrusion_role) && rate_succ < rate_end)
@ -620,7 +620,7 @@ void PressureEqualizer::adjust_volumetric_rate(const size_t fist_line_idx, const
rate_end = rate_succ; rate_end = rate_succ;
// don't alter the flow rate for these extrusion types // don't alter the flow rate for these extrusion types
if (!line.adjustable_flow || line.extrusion_role == GCodeExtrusionRole::BridgeInfill || line.extrusion_role == GCodeExtrusionRole::Ironing) { if (!line.adjustable_flow || line.extrusion_role == ExtrusionRole::erBridgeInfill || line.extrusion_role == ExtrusionRole::erIroning) {
rate_end = line.volumetric_extrusion_rate_end; rate_end = line.volumetric_extrusion_rate_end;
} else if (line.volumetric_extrusion_rate_end > rate_end) { } else if (line.volumetric_extrusion_rate_end > rate_end) {
line.volumetric_extrusion_rate_end = rate_end; line.volumetric_extrusion_rate_end = rate_end;
@ -644,7 +644,7 @@ void PressureEqualizer::adjust_volumetric_rate(const size_t fist_line_idx, const
} }
// feedrate_per_extrusion_role[iRole] = (iRole == line.extrusion_role) ? line.volumetric_extrusion_rate_start : rate_start; // feedrate_per_extrusion_role[iRole] = (iRole == line.extrusion_role) ? line.volumetric_extrusion_rate_start : rate_start;
// Don't store feed rate for ironing // Don't store feed rate for ironing
if (line.extrusion_role != GCodeExtrusionRole::Ironing) if (line.extrusion_role != ExtrusionRole::erIroning)
feedrate_per_extrusion_role[iRole] = line.volumetric_extrusion_rate_start; feedrate_per_extrusion_role[iRole] = line.volumetric_extrusion_rate_start;
} }
} }
@ -659,7 +659,7 @@ void PressureEqualizer::adjust_volumetric_rate(const size_t fist_line_idx, const
if (!m_gcode_lines[idx_next].extruding()) if (!m_gcode_lines[idx_next].extruding())
break; break;
// Don't accelerate after ironing. // Don't accelerate after ironing.
if (m_gcode_lines[line_idx].extrusion_role == GCodeExtrusionRole::Ironing) { if (m_gcode_lines[line_idx].extrusion_role == ExtrusionRole::erIroning) {
line_idx = idx_next; line_idx = idx_next;
continue; continue;
} }
@ -668,14 +668,14 @@ void PressureEqualizer::adjust_volumetric_rate(const size_t fist_line_idx, const
line_idx = idx_next; line_idx = idx_next;
GCodeLine &line = m_gcode_lines[line_idx]; GCodeLine &line = m_gcode_lines[line_idx];
for (size_t iRole = 1; iRole < size_t(GCodeExtrusionRole::Count); ++ iRole) { for (size_t iRole = 1; iRole < size_t(ExtrusionRole::erCount); ++ iRole) {
const float &rate_slope = m_max_volumetric_extrusion_rate_slopes[iRole].positive; const float &rate_slope = m_max_volumetric_extrusion_rate_slopes[iRole].positive;
if (rate_slope == 0 || feedrate_per_extrusion_role[iRole] == std::numeric_limits<float>::max()) if (rate_slope == 0 || feedrate_per_extrusion_role[iRole] == std::numeric_limits<float>::max())
continue; // The positive rate is unlimited or the rate for GCodeExtrusionRole iRole is unlimited. continue; // The positive rate is unlimited or the rate for ExtrusionRole iRole is unlimited.
float rate_start = feedrate_per_extrusion_role[iRole]; float rate_start = feedrate_per_extrusion_role[iRole];
// don't alter the flow rate for these extrusion types // don't alter the flow rate for these extrusion types
if (!line.adjustable_flow || line.extrusion_role == GCodeExtrusionRole::BridgeInfill || line.extrusion_role == GCodeExtrusionRole::Ironing) { if (!line.adjustable_flow || line.extrusion_role == ExtrusionRole::erBridgeInfill || line.extrusion_role == ExtrusionRole::erIroning) {
rate_start = line.volumetric_extrusion_rate_start; rate_start = line.volumetric_extrusion_rate_start;
} else if (iRole == size_t(line.extrusion_role) && rate_prec < rate_start) } else if (iRole == size_t(line.extrusion_role) && rate_prec < rate_start)
rate_start = rate_prec; rate_start = rate_prec;
@ -701,7 +701,7 @@ void PressureEqualizer::adjust_volumetric_rate(const size_t fist_line_idx, const
} }
// feedrate_per_extrusion_role[iRole] = (iRole == line.extrusion_role) ? line.volumetric_extrusion_rate_end : rate_end; // feedrate_per_extrusion_role[iRole] = (iRole == line.extrusion_role) ? line.volumetric_extrusion_rate_end : rate_end;
// Don't store feed rate for ironing // Don't store feed rate for ironing
if (line.extrusion_role != GCodeExtrusionRole::Ironing) if (line.extrusion_role != ExtrusionRole::erIroning)
feedrate_per_extrusion_role[iRole] = line.volumetric_extrusion_rate_end; feedrate_per_extrusion_role[iRole] = line.volumetric_extrusion_rate_end;
} }
} }
@ -785,7 +785,7 @@ void PressureEqualizer::push_line_to_output(const size_t line_idx, const float n
GCodeG1Formatter feedrate_formatter; GCodeG1Formatter feedrate_formatter;
feedrate_formatter.emit_f(new_feedrate); feedrate_formatter.emit_f(new_feedrate);
feedrate_formatter.emit_string(std::string(EXTRUDE_SET_SPEED_TAG.data(), EXTRUDE_SET_SPEED_TAG.length())); feedrate_formatter.emit_string(std::string(EXTRUDE_SET_SPEED_TAG.data(), EXTRUDE_SET_SPEED_TAG.length()));
if (line.extrusion_role == GCodeExtrusionRole::ExternalPerimeter) if (line.extrusion_role == ExtrusionRole::erExternalPerimeter)
feedrate_formatter.emit_string(std::string(EXTERNAL_PERIMETER_TAG.data(), EXTERNAL_PERIMETER_TAG.length())); feedrate_formatter.emit_string(std::string(EXTERNAL_PERIMETER_TAG.data(), EXTERNAL_PERIMETER_TAG.length()));
push_to_output(feedrate_formatter); push_to_output(feedrate_formatter);

View file

@ -8,7 +8,6 @@
#include "../libslic3r.h" #include "../libslic3r.h"
#include "../PrintConfig.hpp" #include "../PrintConfig.hpp"
#include "../ExtrusionRole.hpp"
#include <queue> #include <queue>
@ -70,7 +69,7 @@ private:
float positive; float positive;
float negative; float negative;
}; };
ExtrusionRateSlope m_max_volumetric_extrusion_rate_slopes[size_t(GCodeExtrusionRole::Count)]; ExtrusionRateSlope m_max_volumetric_extrusion_rate_slopes[size_t(ExtrusionRole::erCount)];
float m_max_volumetric_extrusion_rate_slope_positive; float m_max_volumetric_extrusion_rate_slope_positive;
float m_max_volumetric_extrusion_rate_slope_negative; float m_max_volumetric_extrusion_rate_slope_negative;
@ -82,7 +81,7 @@ private:
// X,Y,Z,E,F // X,Y,Z,E,F
float m_current_pos[5]; float m_current_pos[5];
size_t m_current_extruder; size_t m_current_extruder;
GCodeExtrusionRole m_current_extrusion_role; ExtrusionRole m_current_extrusion_role;
bool m_retracted; bool m_retracted;
bool m_use_relative_e_distances; bool m_use_relative_e_distances;
@ -158,7 +157,7 @@ private:
// Index of the active extruder. // Index of the active extruder.
size_t extruder_id; size_t extruder_id;
// Extrusion role of this segment. // Extrusion role of this segment.
GCodeExtrusionRole extrusion_role; ExtrusionRole extrusion_role;
// Current volumetric extrusion rate. // Current volumetric extrusion rate.
float volumetric_extrusion_rate; float volumetric_extrusion_rate;

View file

@ -1047,7 +1047,7 @@ float WipingExtrusions::mark_wiping_extrusions(const Print& print, unsigned int
if (!object->config().flush_into_infill && !object->config().flush_into_objects && !object->config().flush_into_support) if (!object->config().flush_into_infill && !object->config().flush_into_objects && !object->config().flush_into_support)
continue; continue;
bool wipe_into_infill_only = !object->config().flush_into_objects && object->config().flush_into_infill; bool wipe_into_infill_only = !object->config().flush_into_objects && object->config().flush_into_infill;
bool is_infill_first = print.config().is_infill_first; bool is_infill_first = region.config().is_infill_first;
if (is_infill_first != perimeters_done || wipe_into_infill_only) { if (is_infill_first != perimeters_done || wipe_into_infill_only) {
for (const ExtrusionEntity* ee : layerm->fills.entities) { // iterate through all infill Collections for (const ExtrusionEntity* ee : layerm->fills.entities) { // iterate through all infill Collections
auto* fill = dynamic_cast<const ExtrusionEntityCollection*>(ee); auto* fill = dynamic_cast<const ExtrusionEntityCollection*>(ee);
@ -1160,7 +1160,7 @@ void WipingExtrusions::ensure_perimeters_infills_order(const Print& print)
if (!object->config().flush_into_infill && !object->config().flush_into_objects) if (!object->config().flush_into_infill && !object->config().flush_into_objects)
continue; continue;
bool is_infill_first = print.config().is_infill_first; bool is_infill_first = region.config().is_infill_first;
for (const ExtrusionEntity* ee : layerm->fills.entities) { // iterate through all infill Collections for (const ExtrusionEntity* ee : layerm->fills.entities) { // iterate through all infill Collections
auto* fill = dynamic_cast<const ExtrusionEntityCollection*>(ee); auto* fill = dynamic_cast<const ExtrusionEntityCollection*>(ee);

View file

@ -1731,7 +1731,7 @@ void PerimeterGenerator::process_classic()
// if brim will be printed, reverse the order of perimeters so that // if brim will be printed, reverse the order of perimeters so that
// we continue inwards after having finished the brim // we continue inwards after having finished the brim
// TODO: add test for perimeter order // TODO: add test for perimeter order
bool is_outer_wall_first = this->object_config->wall_sequence == WallSequence::OuterInner; bool is_outer_wall_first = this->config->wall_sequence == WallSequence::OuterInner;
if (is_outer_wall_first || if (is_outer_wall_first ||
//BBS: always print outer wall first when there indeed has brim. //BBS: always print outer wall first when there indeed has brim.
(this->layer_id == 0 && (this->layer_id == 0 &&
@ -1739,7 +1739,7 @@ void PerimeterGenerator::process_classic()
this->object_config->brim_width.value > 0)) this->object_config->brim_width.value > 0))
entities.reverse(); entities.reverse();
// SoftFever: sandwich mode // SoftFever: sandwich mode
else if (this->object_config->wall_sequence == WallSequence::InnerOuterInner) else if (this->config->wall_sequence == WallSequence::InnerOuterInner)
if (entities.entities.size() > 1){ if (entities.entities.size() > 1){
int last_outer=0; int last_outer=0;
int outer = 0; int outer = 0;
@ -2036,12 +2036,12 @@ void PerimeterGenerator::process_arachne()
int direction = -1; int direction = -1;
bool is_outer_wall_first = bool is_outer_wall_first =
this->object_config->wall_sequence == WallSequence::OuterInner || this->config->wall_sequence == WallSequence::OuterInner ||
this->object_config->wall_sequence == WallSequence::InnerOuterInner; this->config->wall_sequence == WallSequence::InnerOuterInner;
if (layer_id == 0){ // disable inner outer inner algorithm after the first layer if (layer_id == 0){ // disable inner outer inner algorithm after the first layer
is_outer_wall_first = is_outer_wall_first =
this->object_config->wall_sequence == WallSequence::OuterInner; this->config->wall_sequence == WallSequence::OuterInner;
} }
if (is_outer_wall_first) { if (is_outer_wall_first) {
start_perimeter = 0; start_perimeter = 0;
@ -2169,7 +2169,7 @@ void PerimeterGenerator::process_arachne()
} }
// printf("New Layer: Layer ID %d\n",layer_id); //debug - new layer // printf("New Layer: Layer ID %d\n",layer_id); //debug - new layer
if (this->object_config->wall_sequence == WallSequence::InnerOuterInner && layer_id > 0) { // only enable inner outer inner algorithm after first layer if (this->config->wall_sequence == WallSequence::InnerOuterInner && layer_id > 0) { // only enable inner outer inner algorithm after first layer
if (ordered_extrusions.size() > 2) { // 3 walls minimum needed to do inner outer inner ordering if (ordered_extrusions.size() > 2) { // 3 walls minimum needed to do inner outer inner ordering
int position = 0; // index to run the re-ordering for multiple external perimeters in a single island. int position = 0; // index to run the re-ordering for multiple external perimeters in a single island.
int arr_i, arr_j = 0; // indexes to run through the walls in the for loops int arr_i, arr_j = 0; // indexes to run through the walls in the for loops

View file

@ -753,7 +753,6 @@ PRINT_CONFIG_CLASS_DEFINE(
// BBS // BBS
((ConfigOptionBool, flush_into_infill)) ((ConfigOptionBool, flush_into_infill))
((ConfigOptionBool, flush_into_support)) ((ConfigOptionBool, flush_into_support))
((ConfigOptionEnum<WallSequence>, wall_sequence))
// BBS // BBS
((ConfigOptionFloat, tree_support_branch_distance)) ((ConfigOptionFloat, tree_support_branch_distance))
((ConfigOptionFloat, tree_support_tip_diameter)) ((ConfigOptionFloat, tree_support_tip_diameter))
@ -903,6 +902,9 @@ PRINT_CONFIG_CLASS_DEFINE(
((ConfigOptionBool, overhang_reverse)) ((ConfigOptionBool, overhang_reverse))
((ConfigOptionBool, overhang_reverse_internal_only)) ((ConfigOptionBool, overhang_reverse_internal_only))
((ConfigOptionFloatOrPercent, overhang_reverse_threshold)) ((ConfigOptionFloatOrPercent, overhang_reverse_threshold))
((ConfigOptionEnum<WallSequence>, wall_sequence))
((ConfigOptionBool, is_infill_first))
) )
PRINT_CONFIG_CLASS_DEFINE( PRINT_CONFIG_CLASS_DEFINE(
@ -1179,7 +1181,6 @@ PRINT_CONFIG_CLASS_DERIVED_DEFINE(
((ConfigOptionBools, activate_chamber_temp_control)) ((ConfigOptionBools, activate_chamber_temp_control))
((ConfigOptionInts , chamber_temperature)) ((ConfigOptionInts , chamber_temperature))
((ConfigOptionBool, is_infill_first))
((ConfigOptionFloat, preferred_orientation)) ((ConfigOptionFloat, preferred_orientation))

View file

@ -916,6 +916,7 @@ bool PrintObject::invalidate_state_by_config_options(
|| opt_key == "min_width_top_surface" || opt_key == "min_width_top_surface"
|| opt_key == "only_one_wall_first_layer" || opt_key == "only_one_wall_first_layer"
|| opt_key == "extra_perimeters_on_overhangs" || opt_key == "extra_perimeters_on_overhangs"
|| opt_key == "detect_overhang_wall"
|| opt_key == "initial_layer_line_width" || opt_key == "initial_layer_line_width"
|| opt_key == "inner_wall_line_width" || opt_key == "inner_wall_line_width"
|| opt_key == "infill_wall_overlap" || opt_key == "infill_wall_overlap"

View file

@ -4504,16 +4504,17 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv
return ret; return ret;
}; };
auto calculate_offsets = [max_width, window_padding](const std::vector<std::pair<std::string, std::vector<::string>>>& title_columns, float extra_size = 0.0f) { auto calculate_offsets = [&imgui, max_width, window_padding](const std::vector<std::pair<std::string, std::vector<::string>>>& title_columns, float extra_size = 0.0f) {
const ImGuiStyle& style = ImGui::GetStyle(); const ImGuiStyle& style = ImGui::GetStyle();
std::vector<float> offsets; std::vector<float> offsets;
offsets.push_back(max_width(title_columns[0].second, title_columns[0].first, extra_size) + 3.0f * style.ItemSpacing.x); offsets.push_back(max_width(title_columns[0].second, title_columns[0].first, extra_size) + 3.0f * style.ItemSpacing.x);
for (size_t i = 1; i < title_columns.size() - 1; i++) for (size_t i = 1; i < title_columns.size() - 1; i++)
offsets.push_back(offsets.back() + max_width(title_columns[i].second, title_columns[i].first) + style.ItemSpacing.x); offsets.push_back(offsets.back() + max_width(title_columns[i].second, title_columns[i].first) + style.ItemSpacing.x);
if (title_columns.back().first == _u8L("Display")) { if (title_columns.back().first == _u8L("Display")) {
const auto preferred_offset = ImGui::GetWindowWidth() - ImGui::CalcTextSize(_u8L("Display").c_str()).x - ImGui::GetFrameHeight() / 2 - 2 * window_padding; const auto preferred_offset = ImGui::GetWindowWidth() - ImGui::CalcTextSize(_u8L("Display").c_str()).x - ImGui::GetFrameHeight() / 2 - 2 * window_padding - ImGui::GetStyle().ScrollbarSize;
if (preferred_offset > offsets.back()) { if (preferred_offset > offsets.back()) {
offsets.back() = preferred_offset; offsets.back() = preferred_offset;
imgui.set_requires_extra_frame();
} }
} }

View file

@ -110,7 +110,9 @@ void SelectionInfo::on_update()
m_model_object = nullptr; m_model_object = nullptr;
if (selection.is_single_full_instance()) { // BBS still keep object pointer when selection is volume
// if (selection.is_single_full_instance()) {
if (!selection.is_empty()) {
m_model_object = selection.get_model()->objects[selection.get_object_idx()]; m_model_object = selection.get_model()->objects[selection.get_object_idx()];
m_z_shift = selection.get_first_volume()->get_sla_shift_z(); m_z_shift = selection.get_first_volume()->get_sla_shift_z();
} }

View file

@ -272,8 +272,8 @@ SideTools::SideTools(wxWindow *parent, wxWindowID id, const wxPoint &pos, const
wxBoxSizer* connection_sizer_V = new wxBoxSizer(wxVERTICAL); wxBoxSizer* connection_sizer_V = new wxBoxSizer(wxVERTICAL);
wxBoxSizer* connection_sizer_H = new wxBoxSizer(wxHORIZONTAL); wxBoxSizer* connection_sizer_H = new wxBoxSizer(wxHORIZONTAL);
// m_hyperlink = new wxHyperlinkCtrl(m_connection_info, wxID_ANY, _L("Failed to connect to the server"), wxT("https://wiki.bambulab.com/en/software/bambu-studio/failed-to-connect-printer"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE); m_hyperlink = new wxHyperlinkCtrl(m_connection_info, wxID_ANY, _L("Failed to connect to the server"), wxT("https://wiki.bambulab.com/en/software/bambu-studio/failed-to-connect-printer"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE);
// m_hyperlink->SetBackgroundColour(wxColour(255, 111, 0)); m_hyperlink->SetBackgroundColour(wxColour(255, 111, 0));
m_more_err_open = ScalableBitmap(this, "monitir_err_open", 16); m_more_err_open = ScalableBitmap(this, "monitir_err_open", 16);
m_more_err_close = ScalableBitmap(this, "monitir_err_close", 16); m_more_err_close = ScalableBitmap(this, "monitir_err_close", 16);
@ -302,7 +302,7 @@ SideTools::SideTools(wxWindow *parent, wxWindowID id, const wxPoint &pos, const
}); });
// connection_sizer_H->Add(m_hyperlink, 0, wxALIGN_CENTER | wxALL, 5); connection_sizer_H->Add(m_hyperlink, 0, wxALIGN_CENTER | wxALL, 5);
connection_sizer_H->Add(m_more_button, 0, wxALIGN_CENTER | wxALL, 3); connection_sizer_H->Add(m_more_button, 0, wxALIGN_CENTER | wxALL, 3);
connection_sizer_V->Add(connection_sizer_H, 0, wxALIGN_CENTER, 0); connection_sizer_V->Add(connection_sizer_H, 0, wxALIGN_CENTER, 0);