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
**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:*
- [MicrosoftEdgeWebView2RuntimeInstallerX64](https://github.com/SoftFever/BambuStudio-SoftFever/releases/download/v1.0.10-sf2/MicrosoftEdgeWebView2RuntimeInstallerX64.exe)
- [vcredist2019_x64](https://github.com/SoftFever/BambuStudio-SoftFever/releases/download/v1.0.10-sf2/vcredist2019_x64.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)
- [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**:
1. Download the DMG for your computer: `arm64` version for Apple Silicon and `x86_64` for Intel CPU.
@ -51,16 +56,20 @@ Orca Slicer's logo is designed by community member Justin Levine(@freejstnalxndr
**Linux(Ubuntu)**:
1. If you run into trouble to execute it, try this command in terminal:
`chmod +x /path_to_appimage/OrcaSlicer_ubu64.AppImage`
# How to compile
- Windows 64-bit
- 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`
- Mac 64-bit
- Tools needed: Xcode, Cmake, git, gettext, libtool, automake, autoconf
- 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 './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"
"Report-Msgid-Bugs-To: \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"
"Language-Team: Türkçe\n"
"Language: tr_TR\n"
@ -884,13 +884,13 @@ msgid "Unset italic"
msgstr "Yatık ayarı kaldır"
msgid "Set italic"
msgstr "Yatık olarak ayarla"
msgstr "Yatık"
msgid "Unset bold"
msgstr "Kalın ayarı kaldır"
msgid "Set bold"
msgstr "Kalın olarak ayarla"
msgstr "Kalın"
msgid "Revert text size."
msgstr "Metin boyutunu geri döndür."
@ -946,7 +946,7 @@ msgstr "Hizalamayı geri al."
#. TRN EmbossGizmo: font units
msgid "points"
msgstr "noktalar"
msgstr "punto"
msgid "Revert gap between characters"
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."
msgid "Set text to face camera"
msgstr "Metni yüz kamerasına ayarla"
msgstr "Metni bana çevir"
msgid "Orient the text towards the camera."
msgstr "Metni kameraya doğru yönlendirin."
@ -1048,7 +1048,7 @@ msgstr "Satır boşluğu"
#. TRN - Input label. Be short as possible
msgid "Boldness"
msgstr "Boldness"
msgstr "Kalınlık"
#. TRN - Input label. Be short as possible
#. Like Font italic
@ -1269,7 +1269,7 @@ msgid "Center of circle"
msgstr "Çemberin merkezi"
msgid "ShiftLeft mouse button"
msgstr "Shift Sol fare düğmesi"
msgstr "Shift + Sol fare düğmesi"
msgid "Select feature"
msgstr "Özellik seçin"
@ -1278,10 +1278,10 @@ msgid "Select point"
msgstr "Nokta seç"
msgid "Delete"
msgstr "Sil"
msgstr "Delete"
msgid "Restart selection"
msgstr "Seçimi yeniden başlat"
msgstr "Seçimi sıfırla"
msgid "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"
msgid "Collapse"
msgstr "Çökme"
msgstr "Daralt"
msgid "Daily Tips"
msgstr "Günlük İpuçları"

View File

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

View File

@ -8,7 +8,7 @@
"compatible_printers": [
"Bambu Lab X1 Carbon 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"
]
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 19 KiB

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 10 KiB

View File

@ -106,16 +106,21 @@
"deretraction_speed": [
"40"
],
"z_hop": [
"0.1"
],
"z_hop": [
"0.1"
],
"single_extruder_multi_material": "1",
"manual_filament_change": "1",
"change_filament_gcode": "PAUSE",
"machine_pause_gcode": "M25",
"machine_pause_gcode": "PAUSE",
"default_filament_profile": [
"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_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"
],
"single_extruder_multi_material": "1",
"manual_filament_change": "1",
"change_filament_gcode": "M600",
"machine_pause_gcode": "M25",
"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_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%"],
"retraction_length": ["0.5"],
"retract_length_toolchange": ["1"],
"retraction_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",
"change_filament_gcode": "",
"manual_filament_change": "1",
"change_filament_gcode": "PAUSE",
"machine_pause_gcode": "PAUSE",
"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_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"],
"retraction_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",
"change_filament_gcode": "",
"manual_filament_change": "1",
"change_filament_gcode": "PAUSE",
"machine_pause_gcode": "PAUSE",
"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_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%"],
"retraction_length": ["0.5"],
"retract_length_toolchange": ["1"],
"retraction_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",
"change_filament_gcode": "",
"manual_filament_change": "1",
"change_filament_gcode": "PAUSE",
"machine_pause_gcode": "PAUSE",
"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_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%"],
"retraction_length": ["0.5"],
"retract_length_toolchange": ["1"],
"retraction_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",
"change_filament_gcode": "",
"manual_filament_change": "1",
"change_filament_gcode": "PAUSE",
"machine_pause_gcode": "PAUSE",
"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_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%"],
"retraction_length": ["0.5"],
"retract_length_toolchange": ["1"],
"retraction_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",
"change_filament_gcode": "",
"manual_filament_change": "1",
"change_filament_gcode": "PAUSE",
"machine_pause_gcode": "PAUSE",
"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_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%"],
"retraction_length": ["0.5"],
"retract_length_toolchange": ["1"],
"retraction_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",
"change_filament_gcode": "",
"manual_filament_change": "1",
"change_filament_gcode": "PAUSE",
"machine_pause_gcode": "PAUSE",
"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_end_gcode": "END_PRINT",
"scan_first_layer": "0"
"scan_first_layer": "0",
"thumbnails": [
"96x96",
"300x300"
]
}

View File

@ -113,6 +113,8 @@
"1"
],
"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",
"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",

View File

@ -14,7 +14,7 @@
"bottom_shell_thickness": "0",
"bridge_flow": "0.95",
"bridge_speed": "100",
"brim_type": "no_brim",
"brim_type": "no_brim",
"brim_width": "0",
"brim_object_gap": "0.1",
"compatible_printers_condition": "",
@ -79,7 +79,7 @@
"support_interface_spacing": "0.5",
"support_interface_speed": "100%",
"support_interface_pattern": "auto",
"support_base_pattern": "default",
"support_base_pattern": "rectilinear",
"support_base_pattern_spacing": "2.5",
"support_speed": "50",
"support_threshold_angle": "25",

View File

@ -14,7 +14,7 @@
"bottom_shell_thickness": "0",
"bridge_flow": "0.95",
"bridge_speed": "100",
"brim_type": "no_brim",
"brim_type": "no_brim",
"brim_width": "0",
"brim_object_gap": "0.1",
"compatible_printers_condition": "",
@ -79,7 +79,7 @@
"support_interface_spacing": "0.5",
"support_interface_speed": "100%",
"support_interface_pattern": "auto",
"support_base_pattern": "default",
"support_base_pattern": "rectilinear",
"support_base_pattern_spacing": "2.5",
"support_speed": "50",
"support_threshold_angle": "25",

View File

@ -14,7 +14,7 @@
"bottom_shell_thickness": "0",
"bridge_flow": "0.95",
"bridge_speed": "100",
"brim_type": "no_brim",
"brim_type": "no_brim",
"brim_width": "0",
"brim_object_gap": "0.1",
"compatible_printers_condition": "",
@ -79,7 +79,7 @@
"support_interface_spacing": "0.5",
"support_interface_speed": "100%",
"support_interface_pattern": "auto",
"support_base_pattern": "default",
"support_base_pattern": "rectilinear",
"support_base_pattern_spacing": "2.5",
"support_speed": "50",
"support_threshold_angle": "25",

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -25,7 +25,7 @@
"retract_length_toolchange": ["2"],
"deretraction_speed": ["45"],
"single_extruder_multi_material": "1",
"change_filament_gcode": "",
"change_filament_gcode": "PAUSE",
"machine_pause_gcode": "M0",
"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",

View File

@ -39,7 +39,7 @@
"retract_length_toolchange": ["2"],
"deretraction_speed": ["45"],
"single_extruder_multi_material": "1",
"change_filament_gcode": "",
"change_filament_gcode": "PAUSE",
"machine_pause_gcode": "M0",
"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",

View File

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

View File

@ -439,6 +439,9 @@ var LangText = {
t92: "Cabane de Noël Bambu",
t93: "Connexion à l'imprimante",
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",
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",
@ -454,7 +457,7 @@ var LangText = {
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.",
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: {
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)
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
* 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.
@ -52,16 +54,12 @@ void ExtrusionLine::simplify(const int64_t smallest_line_segment_squared, const
// Starting junction should always exist in the simplified path
new_junctions.emplace_back(junctions.front());
ExtrusionJunction previous = junctions.front();
/* For open ExtrusionLines the last junction cannot be taken into consideration when checking the points at index 1.
* For closed ExtrusionLines, the first and last junctions are the same, so use the prior to last juction.
/* Initially, previous_previous is always the same as previous because, for open ExtrusionLines the last junction
* cannot be taken into consideration when checking the points at index 1. For closed ExtrusionLines, the first and
* last junctions are anyway the same.
* */
ExtrusionJunction previous_previous = this->is_closed ? junctions[junctions.size() - 2] : 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.
*/
ExtrusionJunction previous_previous = junctions.front();
ExtrusionJunction previous = junctions.front();
/* When removing a vertex, we check the height of the triangle of the area
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
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.
// 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() - (this->is_closed ? 0 : 1); point_idx++)
for (size_t point_idx = 1; point_idx < junctions.size() - 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 bool is_last = point_idx + 1 == junctions.size();
const ExtrusionJunction& current = is_last ? new_junctions[0] : junctions[point_idx];
const ExtrusionJunction& current = junctions[point_idx];
// 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() &&
point_idx + 2 - junctions.size() < new_junctions.size();
ExtrusionJunction& next = spill_over ? new_junctions[point_idx + 2 - junctions.size()] : junctions[point_idx + 1];
const bool spill_over = point_idx + 1 == junctions.size() && new_junctions.size() > 1;
ExtrusionJunction& next = spill_over ? new_junctions[0] : 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 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.
// 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.
// o < prev_prev
// |
// o < prev
// \ < short segment
// intersection > + o-------------------o < next
// ^ current
Point intersection_point;
bool has_intersection = Line(previous_previous.p, previous.p).intersection_infinite(Line(current.p, next.p), &intersection_point);
if (!has_intersection
|| 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 - 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.
// 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);
}
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
new_junctions.emplace_back(junctions.back());
// Ending junction (vertex) should always exist in the simplified path
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;

View File

@ -85,8 +85,6 @@ set(lisbslic3r_sources
ExtrusionEntity.hpp
ExtrusionEntityCollection.cpp
ExtrusionEntityCollection.hpp
ExtrusionRole.cpp
ExtrusionRole.hpp
ExtrusionSimulator.cpp
ExtrusionSimulator.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;
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.
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) {
for (auto region : by_region) {

View File

@ -3,6 +3,7 @@
///|/
///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher
///|/
#include <iostream>
#include <memory.h>
#include <cstring>
#include <cfloat>
@ -45,7 +46,7 @@ PressureEqualizer::PressureEqualizer(const Slic3r::GCodeConfig &config) : m_use_
m_current_extruder = 0;
// Zero the position of the XYZE axes + the current feed
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).
m_retracted = true;
@ -74,7 +75,7 @@ PressureEqualizer::PressureEqualizer(const Slic3r::GCodeConfig &config) : m_use_
}
// 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)].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) {
line += EXTRUSION_ROLE_TAG.length();
int role = atoi(line);
m_current_extrusion_role = GCodeExtrusionRole(role);
m_current_extrusion_role = ExtrusionRole(role);
#ifdef PRESSURE_EQUALIZER_DEBUG
++line_idx;
#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())
// Nothing to do, the last move is not extruding.
return;
std::array<float, size_t(GCodeExtrusionRole::Count)> feedrate_per_extrusion_role{};
std::array<float, size_t(ExtrusionRole::erCount)> feedrate_per_extrusion_role{};
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;
@ -600,7 +600,7 @@ void PressureEqualizer::adjust_volumetric_rate(const size_t fist_line_idx, const
if (!m_gcode_lines[idx_prev].extruding())
break;
// 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;
}
// 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;
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;
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];
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;
// 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;
} else if (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;
// 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;
}
}
@ -659,7 +659,7 @@ void PressureEqualizer::adjust_volumetric_rate(const size_t fist_line_idx, const
if (!m_gcode_lines[idx_next].extruding())
break;
// 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;
continue;
}
@ -668,14 +668,14 @@ void PressureEqualizer::adjust_volumetric_rate(const size_t fist_line_idx, const
line_idx = idx_next;
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;
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];
// 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;
} else if (iRole == size_t(line.extrusion_role) && rate_prec < rate_start)
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;
// 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;
}
}
@ -785,7 +785,7 @@ void PressureEqualizer::push_line_to_output(const size_t line_idx, const float n
GCodeG1Formatter feedrate_formatter;
feedrate_formatter.emit_f(new_feedrate);
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()));
push_to_output(feedrate_formatter);

View File

@ -8,7 +8,6 @@
#include "../libslic3r.h"
#include "../PrintConfig.hpp"
#include "../ExtrusionRole.hpp"
#include <queue>
@ -70,7 +69,7 @@ private:
float positive;
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_negative;
@ -82,7 +81,7 @@ private:
// X,Y,Z,E,F
float m_current_pos[5];
size_t m_current_extruder;
GCodeExtrusionRole m_current_extrusion_role;
ExtrusionRole m_current_extrusion_role;
bool m_retracted;
bool m_use_relative_e_distances;
@ -158,7 +157,7 @@ private:
// Index of the active extruder.
size_t extruder_id;
// Extrusion role of this segment.
GCodeExtrusionRole extrusion_role;
ExtrusionRole extrusion_role;
// Current 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)
continue;
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) {
for (const ExtrusionEntity* ee : layerm->fills.entities) { // iterate through all infill Collections
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)
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
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
// we continue inwards after having finished the brim
// 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 ||
//BBS: always print outer wall first when there indeed has brim.
(this->layer_id == 0 &&
@ -1739,7 +1739,7 @@ void PerimeterGenerator::process_classic()
this->object_config->brim_width.value > 0))
entities.reverse();
// 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){
int last_outer=0;
int outer = 0;
@ -2036,12 +2036,12 @@ void PerimeterGenerator::process_arachne()
int direction = -1;
bool is_outer_wall_first =
this->object_config->wall_sequence == WallSequence::OuterInner ||
this->object_config->wall_sequence == WallSequence::InnerOuterInner;
this->config->wall_sequence == WallSequence::OuterInner ||
this->config->wall_sequence == WallSequence::InnerOuterInner;
if (layer_id == 0){ // disable inner outer inner algorithm after the first layer
is_outer_wall_first =
this->object_config->wall_sequence == WallSequence::OuterInner;
this->config->wall_sequence == WallSequence::OuterInner;
}
if (is_outer_wall_first) {
start_perimeter = 0;
@ -2169,7 +2169,7 @@ void PerimeterGenerator::process_arachne()
}
// 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
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

View File

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

View File

@ -916,6 +916,7 @@ bool PrintObject::invalidate_state_by_config_options(
|| opt_key == "min_width_top_surface"
|| opt_key == "only_one_wall_first_layer"
|| opt_key == "extra_perimeters_on_overhangs"
|| opt_key == "detect_overhang_wall"
|| opt_key == "initial_layer_line_width"
|| opt_key == "inner_wall_line_width"
|| 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;
};
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();
std::vector<float> offsets;
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++)
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")) {
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()) {
offsets.back() = preferred_offset;
imgui.set_requires_extra_frame();
}
}

View File

@ -110,7 +110,9 @@ void SelectionInfo::on_update()
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_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_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->SetBackgroundColour(wxColour(255, 111, 0));
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_more_err_open = ScalableBitmap(this, "monitir_err_open", 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_V->Add(connection_sizer_H, 0, wxALIGN_CENTER, 0);