add wipe tower feature and fix wipe tower bug #446
Conversation
fix: Interference between the wiping tower brim path and the model br…
add some feature for wipe tower
原因:纯 E 行(无 X/Y 变化)不应被丢弃,需要原样透传。
根因分析:加载旧版配置文件时,新增选项(如 filament_tower_ironing_area、wipe_tower_wall_gap)在配置中不存在。UI 渲染该选项时调用 config.opt_bool(key) → option(key) 返回 nullptr → 直接解引用 ->value(Config.hpp:2357)→ 访问地址 0x08 崩溃。 修复(2 处,均在 Preset.cpp) 补全 s_Preset_print_options 列表:加入 wipe_tower_wall_gap,使其成为受管理的打印选项 normalize() 扩展为三种配置:耗材配置逻辑不变,新增打印配置和打印机配置分支,遍历对应 options 列表,缺失的从 FullPrintConfig::defaults() clone 补入
根因分析:装填回抽(unretract)发生在 cleaning box 内部(fill_box 的 ru/lu 角落),而非实际画墙起点。导致装载耗材后,还要空驶一段距离(从 ru/lu 到 fill_box.ld)才能到达外墙起点开始挤出头。这段空驶带着已装载的耗材走 → 沿途漏料。 解决方案:画外墙时,设置初始位置为画墙的起点 start_pos = rotate(fill_box.ld)
分析:直接删掉else,X/Y轴是脏数据,没有经过坐标转换。 处理:只剥离重复的X/Y轴,保留 E/F 等一切其他参数。
add wipe tower feature
Bug 1: Wipe path overlaps with previous filament after tool change
Root cause (two layers):
1. gap_y (ramming-wipe boundary Y) was computed only inside `if
(m_use_gap_wall)`. When gap is off, Y stays at Unload end position
(still in ramming zone). The previous filament's ramming uses wider
line width, causing the narrower wipe path to fall within it.
2. Even with gap_y computed, `.append("G1 X...Y...")` does not update
the writer's internal `m_current_pos`, but `travel(x, y)` does. With
gap on, the subsequent `travel(box_edge_x, gap_y)` corrects it. With
gap off, no such correction exists, so subsequent Load/Wipe read
stale position and Y jumps back.
Fix: extract gap_y/gap_x/box_edge_x computation outside the if-block.
Gap on: unchanged (`.append()` + `travel()` gap entry). Gap off: use
`writer.travel()` instead of `.append()` so internal state is updated.
Bug 2: Ironing preamble still executes when wall gap is disabled
The full ironing sequence (extrude blob, retract, back travel, forward
travel, spiral_flat_ironing, unretract) was only partially guarded by
`m_use_gap_wall` — only `spiral_flat_ironing` was skipped. The extrude,
retract, and travel moves still ran as dead weight.
Fix: restructure i==0 block to `if (m_use_gap_wall) { full ironing }
else { direct extrude to edge }`. Remove stale `should_flat_ironging`.
spiral_flat_ironing() used a hardcoded global `flat_iron_area = 4.f` instead of the per-filament config `m_filpar[m_current_tool].flat_iron_area`. Deleted the global and replaced both call sites.
Cone wall did not call get_wall_skip_points() nor contrust_gap_for_skip_points(), so toolchange gap travel drove nozzle through solid wall. Fix: pass skip_points to generate_support_cone_wall(), replace manual extrusion with gap-aware generate_path().
|
❌ Documentation validation failed 🔗 Link Validation Errors📄 doc/developer-reference\Built-in-placeholders-variables.md:
📄 doc/developer-reference\How-to-wiki.md:
📄 doc/Home.md:
📄 doc/Tab.cpp:
🖼️ Image Validation Errors📄 doc/developer-reference\How-to-create-profiles.md:
|
|
❌ Documentation validation failed 🔗 Link Validation Errors📄 doc/developer-reference\Built-in-placeholders-variables.md:
📄 doc/developer-reference\How-to-wiki.md:
📄 doc/Home.md:
📄 doc/Tab.cpp:
🖼️ Image Validation Errors📄 doc/developer-reference\How-to-create-profiles.md:
|
|
❌ Documentation validation failed 🔗 Link Validation Errors📄 doc/developer-reference\Built-in-placeholders-variables.md:
📄 doc/developer-reference\How-to-wiki.md:
📄 doc/Home.md:
📄 doc/Tab.cpp:
🖼️ Image Validation Errors📄 doc/developer-reference\How-to-create-profiles.md:
|
|
❌ Documentation validation failed 🔗 Link Validation Errors📄 doc/developer-reference\Built-in-placeholders-variables.md:
📄 doc/developer-reference\How-to-wiki.md:
📄 doc/Home.md:
📄 doc/Tab.cpp:
🖼️ Image Validation Errors📄 doc/developer-reference\How-to-create-profiles.md:
|
No description provided.