Step by Step guide to creating GCode for the Maslow with FreeCAD

First, I’d like to thank @Gero and everyone who helped me learn this, in addition to this Tutorial. I thought I’d write it up with some screen shots to help anyone else learn without as much Q&A. This is a simple example of a small wheel. You can make it a bit more complex as in the Tutorial if you want, but it helps to go through once with a simple object before trying more complex creations.

Part 1: Create the Sketch

Step 1: Open FreeCAD, create a new document, and save it.

Save often!

Step 2: Open the Sketcher Workbench and create a new Sketch.

Step 3: Choose XY plane.

Step 4: Draw a circle the same or larger diameter as the bit you’ll be using to test this, and then a larger circle to make a wheel shape.

If you zoom in you can be very precise!

Part 2: Give it a 3rd dimension

Step 5: Go to Part Design workbench.

Step 6: Create the body. Click the sketch and click create body, or create a body and drag&drop the sketch into it.

Step 7: Add the pad, click reversed so it will be below 0 point on Zaxis.

I use 20mm for thickness, because that will cut 1mm beyond a 3/4 inch thick piece of plywood.

Step 8: Go to Isometric view so you can see the pad

Part 3: Create the GCode

Step 9: Go to the Path Workbench

Step 10: Create a Job

Step 11: Add a Tool or select one from the Tool Manager

Step 12: Define how fast the motors will move when cutting.

I like to use 42 mm/s.

Step 13: In the SetupSheet, define how fast the motors will move when NOT cutting.

I like to use 100 mm/s.

Step 14: Create a Contour Path

Step 15: Create a Pocket Path


Step 16: Add the Tag Dress-up to Contour


Step 17: Export the GCode, choose GRBL post and verify what was created makes sense.


Part 4: Run it in Maslow!

Step 18: Open GroundControl, Hit Action, then Load GCode, then choose your file. When ready hit Play to start the file running.


I’ve also created a for FreeCAD. It doesn’t do anything special, except it removes all unsupported codes and I updated the Pre and Postamble. Also, it says Maslow in the GCode now. If there are any suggestions for improvements, please let me know. (10.8 KB)



For creating tabs in FreeCAD you can check the video here.

Please go directly to time stamp 5:57

1 Like

I love your postscript… I’ll give it a test this week


My python is a bit rusty, but if you think of anything you want me to add, let me know and, if it’s within my ability, I’ll get to it as time allows.

Or if anyone wants to help develop new features for it…


I’m new to using python in FreeCAD. How do you implement this file? Thanks,

1 Like

Hi there. I just copied and installed this, although I haven’t used it yet.

Download the file from GitHub, then place it in this directory:

C:\Program Files\FreeCAD 0.17\Mod\Path\PathScripts\post\



Ok, there’s a couple of things I have noticed here. First, the feed rates are a little high in the tutorial. 42mm/s for cutting and 100mm/s are too fast for Maslow. The maximium speed is about 40ipm, which is about 1220mm/min or 20mm/s. Based on discussions elsewhere, a good cutting speed is around 30ipm or lower, which is 760mm/min or 12.7mm/s

Secondly, internally, FreeCAD stores speeds in mm/s, so this must be converted by the post-processor into mm/min for Maslow. So the Python post-processor ( must be edited, around line 266 to multiply the speed by 60. Like this:

outstring.append(param + format(c.Parameters['F'] * 60, '.2f'))

I’ll submit a pull request on GitHub for this change (unless someone points out I have made an error). In the meantime I have edited my file locally.


You can change FreeCAD units to mm/min for better CNC support in FreeCAD preferences here:

Sliptonic is a major contributor to FreeCAD CNC tool path generation and a pretty dedicated communicator. I follow his youtube channel for walk through tutorials.

1 Like

That’s good to know, however, I suspect that that setting only changes the display units, so internally it’s still mm/s therefore the post-processor must still multiply by 60.

Haven’t heard from @waltmoorhouse regarding this, but my patched version of his post-processor works for me.

I use the grbl postprocessor and I get both displayed and gcode units expressed in mm/min.

Right, because you selected “Metric small parts” to change FreeCAD’s display as you mentioned above, and because the grbl post-processor has a line that multiplies the feed speed by 60 to convert from mm/s to mm/min. That’s how I knew to edit the Maslow post-processor- I checked what the grbl one did.

The internal FreeCAD units do not change.

1 Like

Is there a way to cut a ring without using a pocket tool path in the center? To cut out the inner-diameter with a similar spiral as the outside with tabs?

1 Like

Welcome to the Forum!
I do not understand the question, sorry, my mind seems blocked.
Edit: I think I got it. Let me open FreedCAD and draw the ring for a screen shot to confirm i understand correctly.

Does this come close 2 what you are looking for?
Using the ‘Profile based on edges’ choosing the outside/inside edges and setting outside/inside?

Edit3: You can set tabs on either path or on both (recommended)

Okay, I see. It doesn’t make that spiral path when cutting the depth when using edges, for me:

versus this:

It looks like the path of the inner circle is drawn around the exterior of it too.

I’m using v.17 FreeCAD.
Are you selecting both edges at the same time?

Also set depths in the 2 profile cuts manually, do not go with the default settings.

Okay! I misinterpreted and selected both edges at once. Also, I manually set the final depth and added the tabs:

Thanks a bunch for helping me understand what was going on!

1 Like

So i did get your question at the end :beers:
Happy wood-chipping!