Skip to content

Feature high flow merge - #787

Closed
zhouzengping wants to merge 18 commits into
mainfrom
feature_high_flow_merge
Closed

Feature high flow merge#787
zhouzengping wants to merge 18 commits into
mainfrom
feature_high_flow_merge

Conversation

@zhouzengping

Copy link
Copy Markdown

Description

Screenshots/Recordings/Graphs

Tests

zhouzengping and others added 18 commits August 18, 2026 12:04
* Added high-flow template parameters and related interfaces.

* Added "filament_flow_step_size", completing the reading mechanism for filament configuration.

* Preset changes and adapt for high_flow saving.

* Add a new template function named "get_value_at".

* feat: align filament_volume_type per filament and migrate it to coEnums.

* feat: add per-extruder nozzle_volume_type (standard / high_flow).

* feat-flow: support filament_max_volumetric_speed persistence, parsing, and G-code generation.

* feat: high-flow filament grouping, flow combo, and type adaptation

- Add FilamentVolumeType enum with to_string/from_string conversions
- Add filament_volume_type / nozzle_volume_type as coEnums in config system
- Add per-nozzle flow combo in sidebar; declare high flow for U1 0.4
- Add flow-type helper facade (FlowTypeHelper), high-flow compat checker (HighFlowCompat)
- Add slice-mode hover popup on slice button (SliceModePopup)
- Add custom filament grouping dialog with drag-and-drop (FilamentGroupDialog)
- Gate slicing behind grouping dialog in custom mode
- Add zh_CN translations for high-flow grouping UI
- Add filament_grouping_mode config option and grouping constants
- Fix: enable flow combo via vendor version bump
- Fix: decouple grouping from nozzle combos
- Fix: rebuild nozzle UI after diameter switch
- Fix: swap button uses SVG icon without gray background
- Fix: remove duplicate nozzle_volume_type registration
- Fix: FlowTypeHelper uses coEnums instead of coStrings for nozzle_volume_type
- Fix: FilamentGroupDialog uses FilamentVolumeType enum internally
- Add test_flow_type for enum conversion validation

* Batch modification of "process" parameters to support high-volume parameter access.

* Update consumable files.

* feat-flow: support standard and high-flow filament parameter variants

- add shared helpers for resolving filament parameters by nozzle flow type
- preserve standard and high-flow values during preset composition
- update slicing, G-code, calibration, and GUI consumers
- prevent calibration saves from overwriting other flow variants

* The process configuration file "process" and "machine"  added high-flow parameters.

* Add to snapmaker.json file.

* The filament file in the process configuration file section has added high-flow parameters.

* feat-flow: support floats-or-percents option fields

- create text controls for coFloatsOrPercents options
- support indexed default-value display and value parsing
- read and write individual float-or-percent vector elements
- preserve percentage values during GUI updates
- log unsupported option types instead of throwing an exception

* Delete a few unnecessary process files.

* feat-flow: serialize only active filament flow variant values in G-code.

* feat-flow: warn about incompatible nozzle flow types in newer 3MF files

Detect filament_extruder_map when loading a 3MF created by a newer
Snapmaker Orca version and display a compatibility warning.

Add the corresponding Simplified Chinese translation.

* feat: SSWCP flow type protocol, nozzle flow sync, and resolve_machine_info

Add SSWCPProtocol parsing unit with flow type normalization, filament/nozzle
flow type exposure, query_machine_info refactor with nozzle flow synchronization,
and resolve_machine_info field-priority merge replacing all query_machine_info
call sites.

Key changes:
- SSWCPProtocol: flow type parsing, normalize_machine_model, parse_extruder_nozzle_info
- resolve_machine_info: parallel system_info + objects.query, 3-state ResolveResult
- 3 call sites refactored (sw_mqtt_set_engine, nozzle sync, filament sync)
- parse_extruder_nozzle_info: leave volume_types empty when firmware lacks flow
  field, so user-configured high_flow is never overwritten on old firmware
- FlowTypeHelper: nozzle volume type support
- PresetBundle: connect_machine_info_list for cached nozzle slots
- MachineIPType: lock_guard exception safety
- Unit tests: 8 cases, 67 assertions
- Documentation: design doc, flow type sync, resolve_machine_info changes

* Update the process interface. Change all the configuration related to speed in the process to support high flow.

* fix: serialize flow support fields with commas in G-code

Use comma-separated values for filament_flow_support,
process_flow_support, and printer_flow_support when exporting
the G-code configuration block.

* The process configuration UI supports switching of traffic types, as well as switching of the dirty state for different traffic types.

* feat: add flow variant switch to filament settings pages

Extend the flow variant selector to support multiple pages and show
the Standard/High Flow switch on Filament, Cooling, Setting Overrides,
and Multimaterial pages.

Keep the selector hidden on other filament settings pages and update
variant-specific option indices and dirty states when switching modes.

* fix: isolate filament override states by flow variant

Use the active flow variant index only for filament options that
support Standard and High Flow values.

Keep non-variant override options on their original index to prevent
unrelated checkboxes from becoming selected when switching flow modes.

* feat: plain-text flow-variant selector UI on high-flow branch

* feat: mark high-flow filament parameters with a flow-variant icon

Draw a flow-variant marker icon to the left of each filament
flow-variant parameter's label, but only when the edited filament
supports high flow (filament_flow_support declares >1 variant).

- new resources/images/flow_variant.svg (teal/grey flow marker)
- ConfigOptionsGroup::get_config() accessor
- OG_CustomCtrl paints the icon in CtrlLine::render; the label column
  shrinks by the icon width so field columns stay aligned

* feat: hide flow-variant toggle when the preset declares one variant

Gate Tab::update_flow_variant_view_visibility on modes.size() > 1 so a
preset that only declares [standard] hides the whole selector instead of
showing a meaningless one-segment standard-only toggle. Uniform across
the filament, process and printer flow-variant views.

* fix: swap-groups button icon double-scaled on HiDPI

ScalableBitmap's px_cnt is a logical (DIP) size that create_scaled_bitmap
already passes through FromDIP; wrapping it in FromDIP again scaled the
icon by DPI squared, overflowing the 20x20 swap button on HiDPI displays.
Pass the raw 14, matching the other icons in this dialog.

* style: teal background for the selected nozzle tab

The selected tab in the per-nozzle CustomNotebook now fills with the
teal accent (OrcaSlicer#9688) with white text, matching the Figma nozzle
selector. The rest of the tab-bar styling is unchanged.

* feat: gate slice-mode popup on distinct selected nozzle flow types

The standard/custom filament-grouping hover popup (and the custom
FilamentGroupDialog confirm on slice) now appears only when the nozzles
actually mix flow variant types -- distinct_nozzle_flow_type_count() >= 2,
based on the per-nozzle flow combos rather than the printer's high-flow
capability. When every nozzle uses the same type there is nothing to
group, so slicing routes every filament to that one type (guaranteed by
get_config_idx / flow_variant_index returning index 0 for an unsupported
mode).

* Add high-traffic black and white list prompts: Do not recommend consumables prompt and unavailable consumables prompt.

* Fix the issues where the type name is not displayed completely, and where the right and left boundaries are not symmetrical.

* fix: preserve scalar option state with flow variants

Keep the original shallow comparison behavior for regular options on
pages that mix scalar and flow-variant fields. Apply indexed deep
comparison only to registered flow-variant options so page refreshes do
not affect unchanged scalar option state.

* fix: use selected flow variant for dependent controls

Resolve pressure advance and multitool ramming dependencies from the
currently selected flow variant instead of the printer nozzle flow type.

This keeps dependent controls isolated between standard and high-flow
filament settings.

* feat: slice flow follows the selected nozzle type when grouping is moot

When the custom per-filament grouping does not apply (standard mode, or
the nozzles are not mixing flow types), every filament now follows the
single selected nozzle flow type at slice time -- all-standard nozzles
slice standard, all-high-flow nozzles slice high flow -- instead of being
driven by a stale custom filament_volume_type mapping. High-flow values
apply only for a custom + mixed setup (per-filament dialog mapping) or
uniformly high-flow nozzles.

Adds FlowType::sync_filament_volume_types_for_slice(); the slice-button
handler calls it in the else branch of the custom-grouping gate.

* style: nozzle tab / flow icon / locale-aware brackets, and reword grouping copy

- CustomNotebook: deepen the unselected nozzle tab text to #6B6B6B,
  matching the process flow toggle's unselected grey
- flow-variant parameter icon (flow_variant.svg) updated to the new artwork
- flow-variant toggle brackets are locale-aware now: CJK brackets for
  Chinese, ASCII square brackets for other languages
- reword the custom filament grouping dialog intro and tip strings, with
  the matching zh_CN .po msgid updates

* feat: require a high-flow-capable filament to show the custom grouping popup

The standard/custom grouping hover popup and the FilamentGroupDialog
confirm on slice now appear only when -- in addition to the nozzles
mixing flow types -- at least one selected filament declares high_flow
in its filament_flow_support. Adds FlowType::any_filament_supports_high_flow().

* fix: preserve independent flow variant option states

- compare dirty states per flow variant, including nullable values
- preserve nil state for optional filament override fields
- fix checkbox and reset behavior after switching flow variants
- read nullable vector values using the selected variant index
- handle nullable float and percent updates with their actual types
- normalize process flow option vectors to the declared variant count
- prevent standard and high-flow speed values from sharing one slot

* A new black and white list mechanism for consumables has been added. The list of consumables that are not recommended or not supported will be accessed through a JSON file.

* fix: synced nozzle flow types not applied to UI

Two issues broke nozzle-flow-type sync from the printer:

1. select_complete_cached_nozzle_info cleared the caller's flows when the
   cache was incomplete, discarding the values just resolved from
   objects.query/system_info -- so the captured nozzle_volume_types was
   empty and set_nozzle_volume_types was never called. Now an incomplete
   cache leaves the resolved flows untouched (only a complete, valid cache
   overrides them).

2. In the uniform-diameter sync branch, update_nozzle_settings (which
   rebuilds the per-nozzle flow combos by reading nozzle_volume_type from
   config) ran BEFORE set_nozzle_volume_types, so the combos were rebuilt
   with stale values. Write the synced flow types first, then rebuild.

* fix: default synced nozzle flow types to standard when machine omits them

When resolve_machine_info got nozzle diameters but no flow types from
either system_info or objects.query, nozzle_volume_types stayed empty, so
the sync handler skipped set_nozzle_volume_types entirely -- the config
kept its old/preset value while the UI reported a successful sync.

Now resolve normalizes: if diameters are present but flows are absent,
fill flows with FLOW_MODE_STANDARD (one per nozzle). This matches the
read-side semantics (FlowType::nozzle_volume_types() already pads missing
entries with standard) and applies to both resolve call sites.

* fix: reset per-nozzle flow types to standard on new project

Printer presets carry no per-nozzle flow-type field (nozzle_volume_type
lives in the shared project config, not the preset). On New Project the
per-nozzle flow types therefore lingered at whatever the previous project
left -- e.g. high flow -- while the diameter correctly followed the newly
selected preset.

Add FlowType::reset_nozzle_volume_types_to_standard() (fills one standard
entry per nozzle, sized to the current nozzle count) and call it at the end
of Plater::new_project so a fresh project always starts on standard flow.

* fix: rebuild nozzle panel after new-project flow-type reset

The flow-type reset in Plater::new_project wrote nozzle_volume_type to
config but did not refresh the nozzle panel. Entry points that select a
preset first (home-page device card -> sw_NewProject) already rebuild the
panel via on_select_preset BEFORE new_project runs, so the combos kept
showing the pre-reset flow types.

Rebuild update_nozzle_settings after the reset (deferred via CallAfter so
no combo is destroyed mid-event on the select path). The menu Ctrl+N path
already worked; this makes the device-card path match.

* Update on the latest changes to process consumables.

* Add a modified updated version number.

* Adjust all consumable files to ensure a unique tree structure.

* Update the consumable version number to 02.03.01.02

* Revise the scattered node files of the partial process documents.

* fix: scroll overflowing colours in custom filament grouping dialog

* Restore renamed consumables to prevent user presets from becoming invalid.

* Revise the process documents by adding a "renamed_from" field to ensure compatibility after the process files are renamed. Also, modify the naming of some color-mixing processes to achieve a unified naming convention.

* After fixing the high traffic issue, close the software. The variable values in the pop-up window have incorrect changes.

* Fix the issue where modifying parameters does not take effect in the high-flow mode when restoring the filament retraction length.

* fix: localize flow toggle labels; refine custom filament dialog dark mode

* feat: custom filament dialog title bar; slice on flow-regroup confirm

* Fix dirty state for percent speed options

* Fix the issue where modifying the high-traffic temperature setting does not work.

* fix: preserve unselected indexed filament options during transfer

Keep indexed option keys such as `option#0` and `option#1` when
transferring preset changes. Cache the base vector option for reading,
but apply the cached values with the original indexed keys so only the
selected vector elements are updated in the target filament preset.

This prevents unmodified standard or high-flow volumetric capacity values
from being overwritten during filament migration.

* Fix the issue where the modified default_jerk and max_volumetric_extrusion_rate_slope cannot be enabled when in high traffic mode, as the expanded values controlled by them are unable to be activated.

* Revise the description of the color blending process.

* Fix the issue where the modifications to the parameters filament_wipe_distance and filament_z_hop_types do not take effect in the high-traffic mode.

* feat: add 3MF project schema compatibility warning

Add project schema version metadata for 3MF files and warn users when
loading a project created with a newer schema version. Continue loading
project settings and embedded presets while notifying users that the
nozzle flow rate type may not match the file.

* fix: reword 3MF schema version warning dialog and update zh_CN translation

* Modify the file name of the color mixing process.

* Merge the processing procedures based on the high-flow branch.

---------

Co-authored-by: lzqiang46-cyber <lzqiang46@gmail.com>
Co-authored-by: ZhangZheng <99784311@qq.com>
…ss restarts: mirror it into the AppConfig "nozzle_volume_types" section and restore it after the startup blank-project reset; New Project still resets to Standard without wiping the memory.
… model configuration after the consumable parameters are selected for override.
… the mobile capability of the device has been removed.
* fix revert try catch for the mqtt connect.

* fix add try catch for mqtt.

* feature add the exception catch for mqtt.

* fix exception not catch question
# Conflicts:
#	src/slic3r/GUI/SSWCP.cpp
@github-actions

Copy link
Copy Markdown

Documentation validation failed

🔗 Link Validation Errors

📄 doc/developer-reference\Built-in-placeholders-variables.md:

  • Line 93: home#process-settings - Fragment does not exist
  • Line 93: home#material-settings - Fragment does not exist

📄 doc/developer-reference\How-to-wiki.md:

  • Line 44: home#material-settings - Fragment does not exist
  • Line 45: home#process-settings - Fragment does not exist
  • Line 46: home#prepare - Fragment does not exist
  • Line 47: home#calibrations - Fragment does not exist
  • Line 50: home#process-settings - Fragment does not exist
  • Line 50: home#support-settings - Fragment does not exist
  • Line 50: home#others-settings - Fragment does not exist

📄 doc/Home.md:

  • Line 14: Precise-wall.md - File does not exist
  • Line 17: extrusion-rate-smoothing.md - File does not exist
  • Line 33: adaptive-pressure-advance.md - File does not exist

📄 doc/Tab.cpp:

  • Line 2642: fill-patterns - File does not exist
  • Line 2645: fill-patterns - File does not exist
  • Line 2834: multimaterial_settings_prime_tower#brim-chamfer - Fragment does not exist
  • Line 2835: multimaterial_settings_prime_tower#brim-chamfer-max-width - Fragment does not exist
  • Line 2847: multimaterial_settings_prime_tower#wall-gap - Fragment does not exist
  • Line 2861: multimaterial_settings_ooze_prevention#delta-temperature - Fragment does not exist

🖼️ Image Validation Errors

📄 doc/developer-reference\How-to-create-profiles.md:

  • Line 142: [Markdown] Alt text "Help menu" ≠ filename "go-to-configuration-folder"
  • Line 144: [Markdown] Alt text "Delete system folder" ≠ filename "profile-delete-system-folder"

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants