Blog‎ > ‎

2014/03/19 - Software toolchain and artwork design

posted Jan 27, 2015, 10:52 AM by Jeff Balderson
An overview of the general terminology and workflow followed by the actual list of software I use at present.

High Level

There are three phases to take a CNC project from an idea to ready for assembly. 

Design -> CAM -> Controller

Below, I'll briefly discuss what is supposed to be accomplished during that phase and list the software I use during that phase.  I'll also provide the links to the relevant software so you can check it out if it interests you.

Do keep in mind as you're reading that everything I'm writing about is based on my experience working with my Probotix X90.  There are lots of other CNC Router designs and companies out there, and lots of other work-alike pieces of software.


CNC machining is a subtractive process.  You start with stock, and after the process it will have less volume than it had when you started, even though the outer dimensions may be identical.  A 3-axis CNC router like mine can make "2.5D" objects.  The objects can be 3D but there may not be any overhangs/undercuts, so it's not full 3D, hence the 2.5D moniker.  This limitation is because the cutter only moves up and down, so all cuts must be accessible from above.

Some of the "no undercut" limitation can be mitigated by cutting out the work in multiple layers and gluing the layers together.  It's also possible to cut one piece from the front face of the stock and other from the back, so when they are glued together, you have overhangs.  

In CNC machines with additional axes, you can rotate your workpiece and/or the spindle, which can effectively eliminate this restriction.

CAD, Drawing and 3D design

The first step to any design is to get the idea out of your head and into electronic form that can be read by the CAM software in the next step.  

Almost all of my work has been primarily flat work with pockets, profile cuts and drilling.  I've also done a good amount of sign work with Vee bits.

My go-to tool for the flat work is a piece of 2D CAD (Computer-aided Design) software called LibreCAD.  It's free and open source and there are lots of tutorials on the internet, particularly some video ones.  It does have a little bit of a learning curve, but once you get use to the interface, it's easy to use.  

I primarily use LibreCAD for cutting profiles, pockets and drilling.  The things that saws and drill presses are usually used for.  With some special bits and a little more care in the design phase, I can also round over or chamfer edges.  

Librecad example

The example above shows a stacking parts box I found on Thingiverse.  It's a good example of a job requiring a complex profile cut out.  I made a few minor modifications to the artwork to clean up a few lines as well as separate the parts around since I was cutting it with a CNC instead of a laser cutter.

When I need to do some more complex shapes, such as bending text around a circle or trace a bitmap image, I'll use another piece of free, open source software named Inkscape.  It's similar in concept to Corel Draw and Adobe Illustrator.  Inkscape works primarily in vectors (start a line on this point, and end it over at that point) and stores the vectors in the file.  This permits you to shrink and enlarge drawings, usually with little, if any, loss of quality.  

Inscape example

Note that the letters are made of up lines and arcs between points and not colored blocks like in a paint program.

Inscape example showing paths

I haven't designed any 3D items yet, so I don't have any favorites there yet.

Both programs above export DXF files, which I then feed into the programs used in the next phase, CAM.


CAM stands for Computer Aided Manufacturing.  In a nutshell, that's the process of taking the art generated by the CAD and Drawing software and converting it to code that the CNC controller can understand.  My machine and it seems it's far from alone here, accepts G-code.  It's called that because most of the machine operations start with a G.

Take the following for example, assuming the bit is zeroed to the top of the stock:

G0 Z0.125 (Rapidy move the Z axis so it's 0.125in above the table)

G0 X0.000 Y0.000 (Rapidy move the X and Y axis simultaneous to X=0, Y=0

G1 Z-0.125 F05 (lower the bit into the stock to -0.125in at 5in/min)

G1 X0.000 Y1.000 F50 (Move to X=0in,Y=1in at 50in/min)

G1 X1.000 (Move to X=1in, Y=1in at 50in/min)

G1 Y0.000 (Move to X=1in, Y=0in at 50in/min)

G1 X0.000 (Move to X=0in, Y=0in at 50in/min)

G0 Z0.125 (Rapidy move the Z axis so it's 0.125in above the table)

The code above drew a 1 inch square box, and that isn't even taking into account the width of the bit, so it'll actually be a little smaller than 1 inch.  As you can see, writing the code is verbose, very error prone and time consuming at best.  That's a very simple example, too. Knowing how to read/write it is usually sufficient, because most programs run into the thousands and even tens of thousands of lines, depending on the complexity.

The first piece of software is called CamBam, which is a piece of reasonably priced commercial software.  It does have a free trial, so you can work with it for a little while before you buy.

Cambam storage bin example

To begin, you import the DXF file that was exported out of the design phase and you wind up with a window looking not too dissimilar from what you see above.  Specify feed rate, depth of cut per pass, where the holding tabs are located and many other important parameters and then export the G-code.  The good thing is that it that it has styles (templates) for everything: operation, tools, materials, machines and post-processors. So, if you're constantly cutting the same type of stock, create a special MOP (machine operation) style for it to hold your default settings for that type of stock once you get those settings dialed in. CamBam can do profiles (cut outside or inside a line), pockets (cut inside a line and clear everything out between the lines), engrave (follow a line), spiral drill and canned drill (drill with an exact-sized bit).  You can also insert G-code from other sources.

The other piece of software I use for the CAM phase is a F-Engrave.  It's a Python program that's free and open source.  It will engrave inside of lines using a Vee bit, stepping the bit up if the cut is narrower, stepping it back down when the cut area widens out.  It's not the most full-featured tool out there, but it's done everything I've thrown at it so far.

F-Engrave example

You can save your settings by saving the g-code for a job with a specified filename in either the same directory as the program or your home directory.  As I mentioned on my writeup of the Mini Maker Faire, I gave away keychains.  Some of them had the Dusty Geek logo on them.  If I were to have carved them out instead of laser engraving the log, this is the tool I would have used to generate the g-code.  Once everything's set, hit the "Calc V-Carve" button and it'll trace inside the lines, save the g-code and you're ready to do some Vee bit engraving.  It can take a little while to calculate everything, especially on complicated designs. and the design above is surprisingly more complicated than it looks.  These are basically miniature signs, and this is the same process I do when I do my sign work.

For "3D" work, I use a piece of software called MeshCAM which is commercial software.  It's designed to carve shapes out of wood (e.g., a sphere), versus CamBam which works better for manipulating flat stock (e.g., cut a profile, pockets, etc).  Effectively all of the work I do falls into the realm of CamBam or F-Engrave, so I don't have a lot of experience with MeshCAM yet. 

Controller Software

My controller is the Probotix version of the Planet CNC Mk1 controller.  The CNC-USB software reads in the G-code and allows you to do some simple manipulations on it such as resize the entire job, rotate, step and repeat and others.  When you're ready to run, you hit the start button, the software feeds instructions to the controller, the controller sends electricity to the various pins on the X/Y/Z stepper driver boards, and the steppers move appropriately. There's a lot more detail on how the software works at the Planet CNC website, plus it's only applicable if you're actually using a Planet CNC controller, so I won't repeat it here