Ultimaker / CuraEngine

Powerful, fast and robust engine for converting 3D models into g-code instructions for 3D printers. It is part of the larger open source project Cura.
https://ultimaker.com/en/products/cura-software
GNU Affero General Public License v3.0
1.66k stars 874 forks source link

Wrong extrusion moves with fractional-layer support and Z-hop #2022

Open richfelker opened 5 months ago

richfelker commented 5 months ago

I do not yet have sufficient details on how this is happening or a shareable repro case (the models I've encountered it with in the wild are all paid models), but I'm opening the issue now and will follow up with more details later.

I am using latest main from git (24fd96226595) as of a few days ago, but this has been going on for a while with versions a few weeks older too, and looks like it likely goes back to the work on fractional support layers.

Here is an example of some of the wrong gcode:

G1 F24000 Z13.7
G11
G1 F21818.2 X2.267 Y-4.088 E0.00187
G1 F19422 X2.32 Y-4.062 E0.0017
G1 F16716.4 X2.459 Y-4.059 E0.00465
G1 F15342.5 X2.595 Y-4.098 E0.00515
G1 F16430.3 X2.73 Y-4.216 E0.0061
M204 S45000
G10
G1 F24000 Z13.9
G0 F69000 X-1.803 Y-4.084 Z13.9
G0 X4.275 Y-2.921 Z14
M204 S20000
G1 F24000 Z13.7
G11
G1 F16800 X-1.843 Y-4.221 E0.20803
G1 X-1.952 Y-4.336 E0.00527
G1 X-2.083 Y-4.204 E0.00619
M204 S45000
G10
G1 F24000 Z14
G0 F69000 X-.171 Y-4.251 Z14

Somehow, the travel G0 X4.275 Y-2.921 Z14 got inserted in between components of the support, and it happened before the phase where extrusion amounts were computed, because the next extrusion move is extruding a large amount of material for the full resulting ~6mm wrong move, rather than for the correct move on the order of 0.2mm.

I suspect there's some sort of move reordering going on to separate out the fractional-layer and full-layer parts of the support, and that it's not seeing Z-hops correctly and thereby misordering some travels.

I will see if I can extract out a region of one of the affected models that's minimal enough to feel comfortable sharing, but that still exhibits the issue, and follow up with more details. In the mean time, if anyone familiar with how the fractional support layers work has ideas where to look for the problem, I build CuraEngine from source already and would be happy to work on tracking down and fixing the bug myself.

richfelker commented 5 months ago

OK, I realized one of the models I have seen the issue with is free not paid, so here is a repro case.

STL file is at https://www.myminifactory.com/object/3d-print-pokemon-fuecoco-hd-258093 (Fuecoco Shm.stl).

Fairly minified testcase config is repro2.txt.

Command: CuraEngine -j repro2.def.json -l "Fuecoco Shm.stl" -o bug2022.gcode

(Note: due to #2027 you might need to add -s roofing_layer_count=0.)

Obvious wrong extrusion moves appear at heights: 0.7, 0,9, 1.3, 13.7, 13.9, 14.1, 14.5, 14.9