mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-07-16 23:42:11 +00:00
feat(gcode): resolve per-filament variant slots per layer
- the g-code writer tracks the current layer id and resolves FILAMENT_CONFIG/NOZZLE_CONFIG (plus every non-macro variant lookup, toolchange placeholder scalars, and the change-filament flush overrides) through Print's per-filament, per-layer config-index resolvers instead of the filament->extruder collapse - update_layer_related_config refreshes the per-layer extruder/volume/nozzle maps in the writer config; update_placeholder_parser_with_variant_params remaps the filament-variant arrays into filament-id space for custom g-code (Orca's flush placeholder computation moves inside it) - the engine's concrete per-filament volume assignment now merges into the config write-back (the temporary hold from the producer commit is lifted together with these consumers), and the background process reads the computed volume map back to the plate - append_full_config dumps the resolved filament_map_2 slots - update_used_filament_values gains a bounds guard - tests: per-filament Hybrid slot resolution + null-result fallback Result: on a Hybrid extruder, each filament's features slice with its assigned sub-nozzle's variant values (speeds, volumetric limits, retraction). Verified on a 4-filament H2C Hybrid project: outer walls split into three feedrate populations (30/50/200 mm/s), toolpath geometry byte-identical, deterministic across repeated slices. All 18 non-Hybrid reference fixtures stay byte-identical except the filament_map_2 header value now showing the real slot. Auto grouping ties (multiple zero-flush perfect matchings) may pick a different filament-to-nozzle isolation than other slicers; verified co-optimal.
This commit is contained in:
@@ -6940,10 +6940,12 @@ float GCodeProcessor::minimum_travel_feedrate(PrintEstimatedStatistics::ETimeMod
|
||||
}
|
||||
|
||||
// Machine limit arrays hold 2 values: [0]=Normal, [1]=Stealth. Index by mode only.
|
||||
// BambuStudio used extruder_id*2+mode to support per-nozzle limits, but OrcaSlicer
|
||||
// never ported that system (filament_map_2 / get_config_idx_for_filament), so the
|
||||
// extruder_id offset was always wrong: uninitialized extruder (255) or extruder > 0
|
||||
// would overshoot the array and fall back to values.back() (stealth limits).
|
||||
// Orca: per-(extruder x volume-type) machine limits are deliberately not resolved here even
|
||||
// though the slicing side now materializes filament_map_2 and the per-filament volume map
|
||||
// (an extruder_id*2+mode style offset would need filament_map_2 in the processor-side config
|
||||
// plus a re-audit of every get_option_value(..., mode) call). This only affects
|
||||
// time-estimation fidelity: limits are mode-indexed for ALL multi-extruder printers alike, so
|
||||
// a Hybrid extruder degrades no further than existing dual-extruder machines. Follow-up.
|
||||
float GCodeProcessor::get_axis_max_feedrate(PrintEstimatedStatistics::ETimeMode mode, Axis axis) const
|
||||
{
|
||||
switch (axis)
|
||||
|
||||
Reference in New Issue
Block a user