Commit Graph

2701 Commits

Author SHA1 Message Date
59ea4746b1 feat: Add File header G-code option and print_time_sec/filament_length_m placeholders (#12186)
## Problem

Some Creality printers (e.g. Ender-3 V3 SE) rely on metadata comments in the first lines of G-code files to display print info on the screen (estimated time, filament usage, layer height). This follows a format originally used by Cura/Creality Print:
```
;FLAVOR:Marlin
;TIME:3708.97
;Filament used:6.21m
;Layer height:0.2
```

OrcaSlicer currently has no way to write content before the `HEADER_BLOCK` in the G-code output, and does not expose `print_time_sec` or `filament_length_m` as usable placeholders. As a result, these printers show zeroed-out print info on screen.

## Changes

### 1. New placeholders (post-processing)
Added two new G-code placeholders resolved during post-processing:
- `{print_time_sec}` — total estimated print time in seconds (double)
- `{filament_length_m}` — total filament length in meters (double)

These values are only available after G-code generation, so they use inline marker replacement (`@PRINT_TIME_SEC@`, `@FILAMENT_LENGTH_M@`) that `GCodeProcessor::run_post_process()` substitutes with actual computed values — the same pattern used by existing M73 and layer count placeholders.

### 2. New "File header G-code" option (`machine_top_gcode`)
Added a new G-code field in **Printer Settings > Machine G-code** that writes content at the very top of the output file, before `HEADER_BLOCK_START`. This allows users to add firmware-specific metadata that must appear in the first lines.

### 3. Creality Ender-3 V3 SE profile update
Pre-configured the Ender-3 V3 SE profiles (all 4 nozzle variants) with a default `machine_top_gcode` value matching the Cura-compatible header format, so print info displays correctly out of the box.

# Screenshots

| Before (current OrcaSlicer) | After (this PR) |
|---|---|
| ![IMG_5285](https://github.com/user-attachments/assets/fdd2cc96-6593-4108-83f4-e272d5547467) | ![IMG_5286](https://github.com/user-attachments/assets/6cb4091a-4560-4596-93d9-49f2ff8f0a2b) |

## Tests

- Sliced test model with Ender-3 V3 SE profile
- Verified G-code output contains correct values in first lines:
  - `;TIME:` with actual print time in seconds
  - `;Filament used:` with filament length in meters
  - `;Layer height:` with correct layer height
- Verified `{print_time_sec}` and `{filament_length_m}` work in both Machine Start G-code and File header G-code fields
- Verified empty `machine_top_gcode` produces no extra output
- Built and tested on macOS (arm64)
2026-02-08 23:56:28 +08:00
48bf68a917 Add support for Draco (.drc) format (#10681)
* Add read support for Google's Draco (.drc) format.

* Fix build on Linux

* Use boost instead of fstat.

* Switch to boost memory-mapped file to save RAM and potentially improve performance.

* Trim trailing whitespace.

* Initial Draco write support.

Currently always exports with 16-bit precision and speed 0 (best compression).
The back-end function does have arguments to specify them, it's just not hooked into the GUI.

* Add Draco to the About dialogue.

* Fix Linux compile (hopefully)

* Add an option to associate DRC files on Windows.

* Implement a Preferences option to set Draco position quantization bits

* Update src/slic3r/GUI/Preferences.cpp

Co-authored-by: Ian Bassi <ian.bassi@outlook.com>

* Some slight changes to ianalexis's suggestion.

* Implement a create_item_spinctrl() function for numeric inputs, and use that instead of create_item_input().

* Move "bits" to inside the spinctrl box.

* Refactor following yw4z's feedback

* Update src/slic3r/GUI/Preferences.cpp

Co-authored-by: Ian Bassi <ian.bassi@outlook.com>

* Change to 0 bits as the default setting for Draco export precision.

* Change to a lossy checkbox and a bits field with a range of 8-30.

* Proper SpinInput code from yw4z

* Revert "Proper SpinInput code from yw4z"

This reverts commit 7e9c85f31a0d776860690595b71441498c2034d1.

* Revert "Change to a lossy checkbox and a bits field with a range of 8-30."

This reverts commit d642c9bcc0c51b35bf915e04f35d9991c8485ddd.

* Redo preferences based on SoftFever's feedback

* Refactor to minimize code duplication

* Fix padding

* Improve Draco export quality level tooltip clarity

Clarify that 0 means lossless compression (not uncompressed),
document the valid lossy range (8-30), and better explain the
tradeoff between file size and geometric detail.

---------

Co-authored-by: SoftFever <softfeverever@gmail.com>
Co-authored-by: Noisyfox <timemanager.rick@gmail.com>
Co-authored-by: Ian Bassi <ian.bassi@outlook.com>
2026-02-06 18:27:17 +08:00
6d57ada0a8 Calibs: Process layer height (#11835)
Closes #11726

# Description

Removed hardcoded 0.2mm layer height.
Now it will stay in with the user process.

Also corrected several config assignments to use print_config instead of obj->config for consistency.

## Note

Didn't change PA PATTERN because i don't know if it may impact the calibration results for this specific test.
2026-02-06 17:37:24 +08:00
b4fee7dff9 Fix a regression where the login panel is displayed even when the plugin is disabled (#12185)
Update GUI_App to show or hide the login panel based on the "installed_networking" setting.
2026-02-06 09:18:52 +08:00
38e2f2003c Update Reduce infill retraction tooltip to include effect on Z-hop (#12184) 2026-02-05 15:10:42 +00:00
85155d4a64 Small memory optimization for some infills (#12063) 2026-02-03 12:46:31 -03:00
7f2625e122 Isolate narrow regions in internal solid surfaces for non-line infill patterns (#12107) 2026-02-03 12:44:56 -03:00
4fad476d5f Merge branch 'main' into feature/orca_network_refactor 2026-02-02 23:51:39 +08:00
8abd178f64 Use visible preset lookup for AMS filament fallback to ensure persistence across restarts 2026-02-01 23:54:21 +08:00
45c178eb99 Fix active filament preset not matching wizard selection on first run (#12132)
* Fix active filament preset not matching wizard selection on first run

After completing the setup wizard with only a non-PLA filament selected
(e.g. Generic ABS), the active filament preset defaulted to Generic PLA
instead of the user's selection. This happened because load_presets()
falls back to Generic PLA when the initial printer differs from the
preferred printer, and the first_added_filament override was disabled.

Add post-load correction in apply_config() that switches the active
filament to the first compatible wizard-selected filament when the
current active filament is not in the wizard selection. Also fix the
guide JS (22.js, 23.js) to use the filalist attribute for building
the filament array, and add platform-specific build test commands to
CLAUDE.md.

* Replace @System filaments with vendor-specific overrides in wizard

When the wizard selects a generic filament like "Generic ABS @System",
check if a vendor-specific override exists (e.g. BBL "Generic ABS")
and use that instead. This ensures printer-tuned profiles are preferred,
preventing load_installed_filaments from adding unwanted BBL defaults.

When printers from the default bundle are also selected, both variants
are kept since those printers need the @System version.

Also adds diagnostic logging for filament loading in LoadProfileFamily.

* Guard against persisting presets for Default Printer and fix filament override logic

Prevent export_selections from saving stale preset settings for the
built-in "Default Printer" placeholder, which is only the initial state
before a real printer is loaded. Also require a non-default vendor printer
to be selected before replacing @System filaments with vendor-specific
overrides in the wizard, avoiding incorrect filament substitution when
only the default bundle is present.
2026-02-01 21:34:14 +08:00
586ac42320 Merge branch 'main' into feature/orca_network_refactor 2026-02-01 00:08:11 +08:00
073edc4a1c Make the generic filament the default fallback instead of using filaments sorted alphabetically by name. (#12124) 2026-02-01 00:06:39 +08:00
455b17ebaa Add handling for unknown filament IDs and improve filament type resolution 2026-01-31 19:32:35 +08:00
efee846d25 badge support 2026-01-31 01:04:21 +08:00
1d7b83d399 try to fix flatpak 2026-01-29 19:19:37 +08:00
2e11267ddf fix a crash bug when trying to add a filament after sync ams list 2026-01-29 19:10:44 +08:00
67ac5ea43f 3d honeycomb bug fix (with infill combination) improve bridge direction (#12062)
* fill 3d honeycomb bugfix

* fix bridges

Co-Authored-By: tome9111991 <57866234+tome9111991@users.noreply.github.com>

* Fix typo

* cleaning

* Remove bridging angle adjustment for ip3DHoneycomb

* Adjust layer height scaling for infill consistency

* PR comments

---------

Co-authored-by: tome9111991 <57866234+tome9111991@users.noreply.github.com>
2026-01-27 19:12:18 -03:00
8b33e21945 Merge branch 'main' into feature/orca_network_refactor 2026-01-27 20:59:07 +08:00
6cea172577 fix: adaptive layer height profile uses uncompensated Z height (#12080)
layer_height_profile_adaptive() was using object_print_z_height()
(shrinkage-compensated) to bound the profile, but
update_layer_height_profile() validates against
object_print_z_uncompensated_max. When shrinkage compensation is
active, the mismatch causes the adaptive profile to be silently
cleared every frame and replaced with flat layers.

Use object_print_z_uncompensated_height() instead, matching both
the validator and the existing layer_height_profile_from_ranges()
implementation which already uses the uncompensated value.

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-26 20:04:21 -03:00
5d432c23b5 Check instances for collision (#11866) 2026-01-26 12:07:44 -03:00
79cd76d4a1 Merge branch 'main' into feature/orca_network_refactor 2026-01-26 19:34:20 +08:00
d835efbdd9 enh: Remap filament (#12016)
# Description

This Pr improve the Remap filament feature.
It now recognizes the filaments used in the object and makes them available only for remapping.
You can also see a small preview, showing which color will be changed to which.

Before PR:
![before](https://github.com/user-attachments/assets/e13f3622-2420-478e-a22c-9d7cdc12b24c)


After PR:
![after](https://github.com/user-attachments/assets/38d94230-f5bd-45f2-b9cd-c5bdff5ee801)
2026-01-26 15:21:18 +08:00
3b85cd4d5d init 2026-01-23 17:05:56 +08:00
ca7f042d49 Fix aligned back seam positioning for mirrored objects (#12028)
* Fix aligned back seam positioning for mirrored objects

This change makes “Aligned back” seams behave the same on mirrored models as on normal models.
Mirroring flips the model’s surface directions, so the slicer treated the back as the front.
Now it corrects those directions when calculating seam visibility, so seams still line up on the back after mirroring.

* Comments

Add comments to the changes
2026-01-21 16:00:32 -03:00
b7dc897a93 Clarify shrinkage compensation warning message & tooltips (#12031) 2026-01-21 15:17:19 +00:00
ca543338ee Refactor: move Printer dependencies data validation from Preset to Tab (#12026)
# Description
When creating a new filament preset and setting the Printer Dependencies to "All", the preset does not save this setting. This issue only occurs on creation due to code that is meant to validate the data to prevent a case where the filament is compatible with none of the printers.

EDIT: While I considered redoing the data validation for this tab overall, I have now preserved the original purpose of the code, which is to add the current printer as a compatible printer only if:
- the base preset is a System preset
- the user has not specified any compatible printers

Notably, this seems to be the cause of #11959 

Moving the data validation from `Preset::save_current_preset` to `Tab::save_preset` allows the Preset function to be simplified through removal of the current printer parameter.

# Screenshots/Recordings/Graphs
There is no visible change on the UI.

## Tests
Tested the following combinations of filament presets:
- System->new User
- User->new User
- User->same User

Tried to set them to All, where the System->new User should be the only case where this is replaced by a default.
In any case where there are printers already set, those settings should be kept.
2026-01-21 21:32:18 +08:00
9dbdba1d0c Fix zigzag symmetry (#12022)
### Description

ZigZag infill didn't respect the "Symmetric infill Y axis" parameter's setting. This PR fixes it.

Fixes #12015

### Screenshots/Recordings/Graphs
- **Before:**
<img width="611" height="612" alt="image" src="https://github.com/user-attachments/assets/1f6fc3f9-ec37-4974-86fc-fd4fe6dd9329" />

&nbsp;

- **After:**
<img width="587" height="582" alt="image" src="https://github.com/user-attachments/assets/088715c2-5d12-4596-aab6-3a1eca353abe" />
2026-01-21 12:38:15 +08:00
3510353543 Fix: UI Overriding some settings per object (#11977)
* Fix: Add missing categories to print settings (Seam, Wipe, Accel, Scarf)

    - Assigns categories (Quality, Speed) to various print settings in PrintConfig.cpp.
    - Ensures these settings are correctly tracked in the UI override list (GUI_ObjectList).
    - Fixes issue where overriding these settings per-object did not trigger the 'modified' icon.

* Fix: Add missing categories to additional per-object settings

- Assigns categories (Speed, Quality, Strength, Support) to relevant settings.
- Cleans up duplicate definition of 'outer_wall_acceleration' in PrintConfig.cpp.
- Ensures the 'modified' icon (orange arrow) appears correctly in the Object List.

* Fix: Restore original default values for acceleration and skirt angle

- Reverted 'default_acceleration' back to 500.
- Reverted 'skirt_start_angle' back to -135.

* Style: Remove trailing whitespace in print_flow_ratio tooltip

* Fix: Mark skirt_start_angle as advanced setting

* fix values
2026-01-16 18:18:53 -03:00
d0f1ed7104 Fix "[warning] option: attempt to access option with wrong type: downward_check " warning 2026-01-16 00:48:50 +08:00
2122ebf2af Fix: Bring back "Only lift Z below" can be disabled (#11440)
Let "Only lift Z below" to be disabled
2026-01-15 11:39:19 -03:00
0fd0ef0d68 Fix: Correct overriding for Support and Support Interface flow ratios per printing object (#11872)
Fixes #11859
2026-01-15 11:37:55 -03:00
Neo
a1ec2580d2 Small Loop Memory Optimizations (#11887)
# Description
### `src/libslic3r/PrintApply.cpp` changes (line 318)
Change `const auto` to `const auto&` for loops (simple optimization) .


### `src/slic3r/Utils/CalibUtils.cpp` changes (lines 762, 766, 779, 783/784, 814, 816, 831, 835, 837, 1001)
Define config_pattern
`const auto& config_pattern = SuggestedConfigCalibPAPattern();` (line 762 and 814)

Replace calls of `SuggestedConfigCalibPAPattern()` with `config_pattern` (lines 766, 775, 779, 783, 784, 816, 831, 835, 837)

Change `const auto` to `const auto&` for loops (simple optimization) (lines 816, 835, 837, 1001)

*Also gets rid of the five compiler warnings out of the few hundred/thousand (when building the entire project) that warn about copying loop variables*
i.e.
```/home/neo/git/OrcaSlicer-EDIT-TEMP/src/slic3r/Utils/CalibUtils.cpp:828: note: use reference type to prevent copying
/home/neo/git/OrcaSlicer-EDIT-TEMP/src/slic3r/Utils/CalibUtils.cpp:832: warning: loop variable ‘opt’ creates a copy from type ‘const std::pair<std::__cxx11::basic_string<char>, int>’ [-Wrange-loop-construct]
  832 |     for (const auto opt : SuggestedConfigCalibPAPattern().int_pairs) { print_config.set_key_value(opt.first, new ConfigOptionInt(opt.second)); }
```
## Tests
Should have no functional difference. Contains optimizations, calibrations appear to still function well.
2026-01-15 22:09:30 +08:00
621409678d make Fuzzy skin options only available when Fuzzy skin is not disabled (#10312)
Mimicking the behavior of Ironing.

![demo](https://github.com/user-attachments/assets/443aa8c3-8b7c-4ab1-8445-4796185273d4)
2026-01-15 19:40:15 +08:00
c1f609f27a Fix: Apply bed–filament compatibility checks to all printers (#11432)
### What was the issue?

The check that validates whether a filament is compatible with the selected build plate type was only executed for Bambu Lab printers.
Other printers skipped this entirely, even though they can also use multiple plate types with different temperature requirements.

This caused cases where:
- incompatible filament/plate combinations went unnoticed,
- users received no warning even when the bed type clearly couldn’t support the selected filament.

### What’s changed?
- The validation block extends beyond BambuLab printers.
- Now all printers get the same compatibility check:
  - if a filament requires a bed temperature not supported by the chosen plate,
  - Orca shows the same clear error message as it does for BBL printers.
- Show the selected filament preset name (alias if present) in bed/filament mismatch warnings instead of substituting the parent preset.

### Why this helps
- Consistent behavior across all printer brands.
- Prevents invalid filament/plate setups that could cause print failures.
- Makes plate presets more robust and predictable for custom and community printers.

### Notes
- No behavior changes for BBL printers — they keep the existing checks.
- Other printers now benefit from them too.
2026-01-15 19:02:58 +08:00
da74acf0db Add CoPE material type (#11867)
# Description

This PR introduces a new material type called **CoPE** to the system.

**Changes:**
* **New Material:** Implemented `CoPE` as a selectable material type.
* **Configuration:** Added necessary material properties and parameters specific to CoPE.

**Breaking Changes:**
* None.

# Screenshots/Recordings/Graphs
<img width="1793" height="618" alt="image" src="https://github.com/user-attachments/assets/8577be4d-9f5f-4bda-b0de-c0842857625d" />
<img width="978" height="937" alt="image" src="https://github.com/user-attachments/assets/ec2ba1a3-41d5-4792-8fea-41c282136ff2" />

## Tests

I have verified the changes with the following tests:

* **UI Validation:** Verified that `CoPE` correctly appears in the software's material selection list.
* **Preset Management:**
  * Successfully **exported** a preset containing the CoPE material.
  * Successfully **imported** the CoPE preset back into the software.
2026-01-14 19:51:13 +08:00
5731911710 QoL: exclude handy model dir from recent list (#11934)
* Enhance backward compatibility for filament extruder variants in 3MF project files
Fix crashes when loading old 3MF project

* QoL: add handy models directory to ignore list
2026-01-13 09:40:55 +08:00
00878c0145 Fix crashes when loading old 3MF project (#11933)
Enhance backward compatibility for filament extruder variants in 3MF project files
Fix crashes when loading old 3MF project
2026-01-13 09:40:42 +08:00
5b90d34eec Bug fix: Display max_junction_deviation warning dialogue only on marlin printers (#11891)
# Description

max_junction_deviation value is only available for marlin2 printers. Update warning dialogue conditions to only display it for Marlin 2 printers.

Fixes #11889

# Screenshots/Recordings/Graphs

Before:
![image](https://github.com/user-attachments/assets/62f5bbf0-b726-43b0-9c89-7aaee65e35ce)

After:
![image](https://github.com/user-attachments/assets/ec9b83d6-b07d-4885-ba5a-a723387838f5)
2026-01-09 23:33:34 +08:00
5deb9836ab QoL: improve gcode marker (#11881)
QoL: Improve gcode marker
2026-01-09 11:52:30 +08:00
9541528d0c Revert "Double seam paint on fuzzy skin bug-fix" (#11882)
Revert "Double seam paint on fuzzy skin bug-fix (#11808)"

This reverts commit 86c6cf7b91.
2026-01-08 19:42:47 +00:00
8dcfb1aef6 Fix erroneous interpolation on speed, flow rate in speed and flow views (#11848)
# Description

Reverts to default orca behaviour of showing the gcode speeds and flow values instead of an interpolation to the next segment.

The existing behaviour incorrectly shows the next G1 XY command following a bridge or overhang as interpolated when using the speed and flow views. This is inconsistent with both actual speed (as its limited to a single segment) and gcode view (as it shows a speed gradient where there is none in the gcode).

Before / after
![image](https://github.com/user-attachments/assets/f3dc1130-40cf-48e6-8da4-ef4b7df15721)
![image](https://github.com/user-attachments/assets/a14c88f7-07dd-4076-be82-dbc13b05ad00)

![image](https://github.com/user-attachments/assets/7876e297-2f59-4adf-bd13-c1da75117d33)


Actual speed and flow views are unaffected

![image](https://github.com/user-attachments/assets/c71d6361-9190-4bb4-8b44-40131b1c4b8f)
![image](https://github.com/user-attachments/assets/e97bf6cc-e2ab-4aed-8130-b41f3e4a7ed2)
2026-01-08 23:14:46 +08:00
be0a5dd7d2 Merge branch 'main' into libvgcode 2026-01-06 11:09:09 +08:00
5aad11bfd4 Relax flushing volume thresholds for printers needing higher purge. (#11778)
* Relax flushing volume thresholds for printers needing higher purge.

* Revert multiplier UI color handling
2026-01-05 22:41:04 +00:00
5ad6b9aac3 Fix an error that AppConfig::save is called from non main thread 2026-01-05 23:29:28 +08:00
61ce818965 Merge branch 'main' into feat/configurable-bambu-network-lib 2026-01-05 21:06:39 +08:00
c0e54b47f7 Fixed an issue where the wipe tower did not account for z_offset, especially when "No sparse layers" is enabled. (#11833)
# Description

This PR addresses the issue that WipeTower's start z position didn't consider the z_offset.

fixes #11611

# Screenshots/Recordings/Graphs

<!--
> Please attach relevant screenshots to showcase the UI changes.
> Please attach images that can help explain the changes.
-->

## Tests

<!--
> Please describe the tests that you have conducted to verify the changes made in this PR.
-->
2026-01-05 20:33:13 +08:00
4485cd1dd7 Wipe Tower Auto Brim bug-fix (Non BBL printers) (#11831)
# Description

Fix application freeze when Prime Tower brim is set to Auto

This PR fixes an issue where enabling Auto brim width for the Prime Tower caused the application to freeze and consume unbounded amounts of memory.

Root cause
0c5f6c9865/src/libslic3r/GCode/WipeTower2.cpp (L2036-L2039)
When Auto brim is selected, the brim width was not being computed and the raw configuration value (-1) was used directly.
This resulted in an effectively infinite loop during Prime Tower brim generation, leading to runaway memory allocation instead of a controlled failure or a crash.

Solution

The Auto brim width is now properly computed based on the Prime Tower height, matching the intended behavior and existing logic used in other slicer implementations.
2026-01-05 20:15:23 +08:00
02abe73fa0 Merge branch 'main' into feat/configurable-bambu-network-lib 2026-01-05 08:39:21 +08:00
c4f5342ab2 Double seam paint on fuzzy skin bug-fix (#11808)
* double seam fuzzy bugfix

* Update FuzzySkin.cpp

* 3 point minimum for loop

* Update FuzzySkin.cpp

* close the loop is redundant

* cambio minimo

* Update FuzzySkin.cpp

* Update FuzzySkin.cpp
2026-01-03 16:48:45 +00:00
94e5c6b2fb Revert "Fix float number not working properly for option min/max" (#11794)
Revert "Fix float number not working properly for option min/max (#11211)"

This reverts commit 69861b57f9.
2025-12-31 22:37:58 +00:00