gr5, I appreciate the clear, concise answer. I’m printing a 5.5” high piece with vertical, curved surfaces. I noticed some shallow, narrow grooves running vertically in the printed piece. When I looked at the code (in ms Word), and compared several layers that (I thought) should have been identical, it was obvious they were not. The coordinates for the start of the inner wall were X107.889, Y92.268 on the first level and X11.830, Y130.877 on the second. I assumed this was a random variation generated by Cura. However, I just now looked more closely and found that the gcode alternates between these two microscopically different layers on a consistent basis, so it must be intentional. The variation between similar layers is very much smaller: on the range of 0.015 or so.
Still, I was off and running. It occurred to me that I could copy the gcode describing one layer into a subroutine. The main program, after printing the base as specified by Cura, would then call the subroutine a specific number of times to print truly identical layers. (This could be done with the layer pairs Cura actually produces.) The control logic of the loop would permit easy changes to the printed height of the item. I also wanted to put in control logic to print a test version, one that would print the brim, skip the base, and print the inner and outer walls a limited number of times, and skip the top cap. This way, I could identify a layer that did not have the groove flaw, or repair one that did, and replicate it in the final program. X and Y coordinates would be stacked with mathematical precision.
The problem was the extrusion amount per individual move command. If it were expressed in relative amounts, each layer would be coded identically, with each move allocated the proper amount of filament by Cura, and being the same on every layer. Pretty simple. Being stuck in absolute mode is a huge problem, because each G0 command would have to be supplied its E-value through a variable… or better yet … calculated by an expression containing a variable, such as:
X Y E0.21000+Cumulative_Length_of_Previous_Layers
X Y E3.83816+Cumulative_Length_of_Previous_Layers
This would still require a cut and paste into each command on the replicated layer, but you’d get the advantages of program logic. Unfortunately, this is all hypothetical given that Marlin does not do conditionals or loops. When I experimented with CNC for plasma cutting, I built a library of subroutines that gave a lot of flexibility. Anyway … that was my reasoning for wanting absolute mode.
Will be looking into plugins, Excel, etc. Very clever idea with the plow. Thanks very much for the time and effort of your replies. I couldn’t be happier with my decision to buy Ultimake—it was the right choice.