I seem to have successfully written a Perl language post-processor for the pattern files that allows one to specify a drawing speed and an edge travel speed. That means you can speed up motion at the edges of the table while running the drawing motion slowly to preserve detail.
I wrote the program dual_speedify.pl using Strawberry Perl 5.32 in Windows. You start the program, specify the input file name (the name of the sandify pattern file), the drawing speed, the edge speed, and the home position X and Y coordinates. It then reads the file line by line and determines the location of each point specified in the G01 lines. It compares the locations of each two points (the previous one and the current one) and decides which speed in the form of Fxxxxx to append to each G01 line in the file. It saves the result in the pattern file name + _DS (for dual speed).
I am planning on some tweaks such as adding the two specified speeds to the output file name and maybe as comments inside the output file, but the speed control logic appears to do exactly what it’s supposed to now.
It might not provide a huge improvement if your sand table is not capable of high speeds for the edge motion, but if you ever install servomotors like I use in my table, the improvement in drawing time can be significant. OTOH, if you run the drawing speed at 30-50 mm/sec and your table can go up to 200, that’s a 4x speed up of the edge motion which you will notice when you’re watching the table. The sudden speed change, accompanied by the noise it makes, when it moves from the drawing to the edge motion, can be quite entertaining, especially if the difference in speeds is great.
I’ve been running multiple patterns through the dual speed program and will post some video this weekend. I typically run the edge motion at 1000 mm/sec and the drawing speed at 100-300 mm/sec.
I’ll post a link to the program in a day or two, after I’ve added a couple small conveniences and maybe some error trapping to it.
Here’s a sample of an original sandify pattern file followed by a sample of the dual speed version:
; Created by Sandify
; https://sandify.org
; Version: 0.2.6
;
; Machine type: Rectangular
; Min X (mm): 0
; Max X (mm): 590
; Min Y (mm): 0
; Max Y (mm): 980
; Content type: shape
; Layer:
; Shape: Circle
; Name: polygon
; Number of lobes: 1.2
; Direction: counterclockwise
; Visible: true
; Initial width: 206
; Initial height: 366
; X offset: -32
; Y offset: 119
; Rotate (degrees): 60
; Reverse path: true
; Number of loops: 200
; When transforming shape: smear
; Scale: true
; Scale (+/-): -2
; Scale by: function
; undefined: i+cos(i/2)
; Spin: true
; Spin (+/-): 2
; Spin by: function
; Spin function (i): 10*sin(i/4)
; Track: false
; Fine tuning:
; Connect to next layer: line
; Draw portion of path (%): 100
; Backtrack at end (%): 0
; Rotate starting point (%): 0
; Reverse export path: false
;
; File name: ‘091621_01’
; File type: gcode
;
; BEGIN PRE
G28 X
; END PRE
G01 X0.000 Y0.000
G01 X0.000 Y980.000
G01 X0.000 Y980.000
G01 X590.000 Y980.000
G01 X590.000 Y934.968
G01 X563.713 Y939.228
G01 X486.001 Y950.788
G01 X407.446 Y961.493
G01 X328.305 Y971.344
G01 X251.895 Y980.000
G01 X590.000 Y980.000
G01 X590.000 Y913.040
G01 X584.462 Y914.357
G01 X508.318 Y931.407
G01 X431.275 Y947.657
G01 X353.589 Y963.089
G01 X275.518 Y977.689
G01 X262.375 Y980.000
G01 X590.000 Y980.000
G01 X590.000 Y895.592
G01 X524.647 Y914.301
G01 X449.208 Y934.866
G01 X373.080 Y954.639
G01 X296.517 Y973.590
and here’s the dual speed version:
; Created by Sandify
; https://sandify.org
; Version: 0.2.6
;
; Machine type: Rectangular
; Min X (mm): 0
; Max X (mm): 590
; Min Y (mm): 0
; Max Y (mm): 980
; Content type: shape
; Layer:
; Shape: Circle
; Name: polygon
; Number of lobes: 1.2
; Direction: counterclockwise
; Visible: true
; Initial width: 206
; Initial height: 366
; X offset: -32
; Y offset: 119
; Rotate (degrees): 60
; Reverse path: true
; Number of loops: 200
; When transforming shape: smear
; Scale: true
; Scale (+/-): -2
; Scale by: function
; undefined: i+cos(i/2)
; Spin: true
; Spin (+/-): 2
; Spin by: function
; Spin function (i): 10*sin(i/4)
; Track: false
; Fine tuning:
; Connect to next layer: line
; Draw portion of path (%): 100
; Backtrack at end (%): 0
; Rotate starting point (%): 0
; Reverse export path: false
;
; File name: ‘091621_01’
; File type: gcode
;
; BEGIN PRE
G28 X
; END PRE
G01 X0.000 Y0.000 F60000
G01 X0.000 Y980.000 F60000
G01 X0.000 Y980.000 F60000
G01 X590.000 Y980.000 F60000
G01 X590.000 Y934.968 F60000
G01 X563.713 Y939.228 F6000
G01 X486.001 Y950.788 F6000
G01 X407.446 Y961.493 F6000
G01 X328.305 Y971.344 F6000
G01 X251.895 Y980.000 F6000
G01 X590.000 Y980.000 F60000
G01 X590.000 Y913.040 F60000
G01 X584.462 Y914.357 F6000
G01 X508.318 Y931.407 F6000
G01 X431.275 Y947.657 F6000
G01 X353.589 Y963.089 F6000
G01 X275.518 Y977.689 F6000
G01 X262.375 Y980.000 F6000
G01 X590.000 Y980.000 F60000
G01 X590.000 Y895.592 F60000
G01 X524.647 Y914.301 F6000
G01 X449.208 Y934.866 F6000
G01 X373.080 Y954.639 F6000
G01 X296.517 Y973.590 F6000
One change I will make will be to add the dual speed file name inside the file, and will include both speeds in the name. That way you can save multiple copies of a pattern file- the original, and as many different dual speeds versions as you want, and they’ll be readily identifiable by the file names.