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 skirtcomment 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