Sorry in advance for what has developed into a long post.... hopefully someone will find it useful or it can be used to improve the object cancellation function.
@bot I'd be interested to hear how you get on with this if you you try with Simplify. While the results (below) are infinitely cleaner than those from PrusaSlicer (my post above) as the object label comes after the retract, I have since discovered other issues - generally minor & none that prevented the print coming out as expected. In this image, as before, Object2 was cancelled first, then later Object1 was cancelled. The others were left to go to completion.
So here are the other issues I found...
-
Simplify still puts some travel moves relating to the previous object at the start of the current object, so if that previous object has been cancelled, unnecessary travel occurs. In the example gcode below there are 5 lines (line #46-50) of travel at the start of Object4 that relate to Object2 (which was cancelled), then the 6th line (#51) is the correct travel to the the start of Object4. See the orange and purple segments in plot below that shows the unnecessary travel.
On checking later I discovered that these 5 moves were generated because the "Avoid crossing outline for travel movements" option is enabled. So Simplify isn't being sensible here as its treating these as part of the travel to Object4 rather than the travel required to exit the perimeter of the Object2.
I don't think there a practical way for RRF to overcome this if "Avoid crossing outline for travel movements", but as the retract happens prior to the travel the only side effect is wasted time due to the unnecessary travel. -
Relating to the previous point, I'm seeing that despite there being a F9000 on the first of those travel moves (line #46 & the long part of orange line on the plot) at the beginning of Object4 (from X38.929,Y45.252 to X80.765,Y66.837), the head moves incredibly slowly - indeed, DWC shows that the feedrate is 10mm/s... ie. the F600 from the z-hop on the previous line.
I then observe the remaining travel commands (lines #47-51 & the small parts of the orange line and the purple line on the plot) in that short sequence go at the full F9000. Its clear to see as it happens at every layer (and similarly on other cancelled objects). I've been looking at this for a while now and unfortunately I'm wondering whether there might be a bug in RRF where the feedrate isn't being updated in the correct place - @dc42? Or maybe there's something I'm not seeing here? Either way line #46 seems to move at F600, not F9000. I can print again and video if needed? -
I typically begin all my prints with a skirt. In Simplify3D, when there are multiple processes the skirt for all processes is generated by just one of them - the the bottom image. Since we're using separate processes to distinguish objects, for that one first object that generates the skirt the min & max XY positions that RRF calculates are incorrect as it will be using the bounding box of the skirt instead. After a quick check, the same is true for brims. I therefore wonder if it's feasible to make RRF look for the
; feature skirt
comment and de-select whatever object RRF thinks is current? I think that would solve this issue.
; process Object1
; feature inner perimeter
; tool H0.150 W0.430
--snip--
G1 X39.198 Y52.512 E0.0078
G1 X38.924 Y52.350 E0.0085
G1 X38.794 Y52.260 E0.0042
G1 X38.525 Y52.030 E0.0095
G1 X38.340 Y51.840 E0.0071
G1 X38.142 Y51.597 E0.0084
G1 X37.798 Y51.060 E0.0171
G1 X37.626 Y50.715 E0.0103
G1 X37.479 Y50.360 E0.0103
G1 X37.407 Y50.144 E0.0061
G1 X37.312 Y49.859 F1080
G1 X37.190 Y49.371 F1080
G1 X37.103 Y48.914
G1 X37.038 Y48.416
G1 X37.001 Y47.909
G1 X37.001 Y47.888
; feature infill
; tool H0.150 W0.452
G1 X38.236 Y47.816 F9000
G1 X41.993 Y47.816 E0.1058 F2160
G1 X42.293 Y47.816 F2160
G1 X40.293 Y47.816 E-2.7778 F2160
G1 E-1.2222 F3000
G1 Z2.899 F600
G1 X38.338 Y46.274 F9000
G1 Z2.599 F600
G1 E4.0000 F3000
G1 X39.779 Y43.780 E0.0811 F2160
G1 X39.929 Y43.520 F2160
G1 X38.929 Y45.252 E-2.7778 F2160
G1 E-1.2222 F3000
; process Object2
; feature inner perimeter
; tool H0.150 W0.430
--snip (cancelled object)--
; process Object4
; feature inner perimeter
; tool H0.150 W0.430
G1 Z2.899 F600
G1 X80.765 Y66.837 F9000
G1 X80.733 Y66.820
G1 X80.336 Y66.675
G1 X80.007 Y66.610
G1 X79.675 Y66.595
G1 X79.081 Y51.759
G1 Z2.599 F600
G1 E4.0000 F3000
G1 X78.944 Y51.686 E0.0042 F1620
G1 X78.775 Y51.570 E0.0055
G1 X78.541 Y51.366 E0.0083
G1 X78.355 Y51.156 E0.0075
G1 X78.203 Y50.953 E0.0068
G1 X78.060 Y50.724 E0.0072
G1 X77.960 Y50.536 E0.0057
G1 X77.787 Y50.159 E0.0111
G1 X77.710 Y49.957 E0.0058
G1 X77.603 Y49.622 E0.0094
G1 X77.524 Y49.322 E0.0083