‘LinuxCNC-Features’ Is The Garage-Fab’s Missing CAM Tool

It takes a long toolchain to take the garage-machinist-to-be through all the hoops needed to start cranking out parts. From the choice of CAD software to the CAM tools that turn 3D models into gcode, to the gcode interpretters that chew up this source code and spit out step and direction pulses to turn the cranks of a cnc mill, there’s a multitude of open-and-closed source tools to choose from and even an opportunity to develop some of our own. That’s exactly what [Nick] and the folks over on the cnc-club forums did; they’ve written their own CAM tool that enables the end user to design a procedure of cuts and toolpaths that can export to gcode compatible with LinuxCNC.

Their tool, dubbed “LinuxCNC-features”, embeds a LinuxCNC-compatible graphical gcode programming interface directly into the LinuxCNC native user interface. Creating a part is a matter of defining a list of sequential cuts along programmable toolpaths. These sequential cuts are treatments like drilled holes, square pockets, bolt holes, and lines. The native embedding enables the machinist to preview each of the 3D toolpaths in LinuxCNC’s live view, giving him-or-her a quick-and-dirty check to make sure that their gcode performs as expected before running it. [Nick] has a couple of videos to get you up-and running on either your mill or lathe.

LinuxCNC-features has been out in the wild for almost two years now, but if you’re looking to get started cranking out parts in the garage, look no further for a CAM tool that can quickly generate gcode for simple projects. In case you’re not familiar with LinuxCNC, it’s one of the most mature open-source gcode interpreters designed to turn your PC into a CNC controller, and it’s the brains behind some outstanding DIY CNC machines like this plasma cutter.

15 thoughts on “‘LinuxCNC-Features’ Is The Garage-Fab’s Missing CAM Tool

        1. Thanks for the tip, BsAtWork! This is “the high-level” descriptive programming language that I’ve been hoping existed! gcmc looks like it lets you describe toolpaths in a high-level language and then export to gcode, dxf, svg, etc which offers a really nice use-case for parametric, descriptive machining. While you can absolutely use it to generate gcode, I actually appreciate dxf2gcode for a slightly different use-case, and that’s going from CAD software–to dxf–to gcode for flat parts, rather than having to separate the instance of designing my part in CAD software and then describing it again as toolpaths. Nevertheless, I think both these tools have a place in the garage-fab!

        2. My biggest issue with GCMC is that it does not use G02 or G03 arc commands. Instead, it emits a bunch of very small linear moves that approximate curves to some (I think) default precision. I prefer to use arc commands for for circular motion for several reasons: the cnc controller on the machine may be smoother at implementing arcs than very short linear moves, using G02 and G03 instead of many small linear moves will significantly reduce NC file size (important if you’re running from a machine with limited memory rather than drip feed over some network), and the code is easier to read and modify at the machine with G02 and G03.

          Also, this may be an edge case for most users, but using very small linear moves sets an upper limit to how fast your machine can cut surfaces to a set precision. For instance, you want to machine a complex 3D surface to 0.001″ tolerance, so you have your CAM software emit 3D linear moves for every 0.001″ maximum. If your machine can execute 100 instructions per second, then your max feedrate will be (100 instructions per second) * (0.001 inches per instruction) * (60 seconds per minute) = 6.0 inches per minute, which is really slow. Even if your programmed feedrate is much faster than 6.0 inches per second, that’s all your machine can keep up with. Your choices are to loosen your tolerance (0.005″ 3D linear moves, instead of 0.001″) or buy a faster machine.

  1. I want to tip about a CAD-CAM software, Fusion 360, it´s not open source or free or for linux but as a hobbyist i dont need to pay for it.
    Also makes a lot more sense to me than solidworks. Runs on my hackintosh too, a bit buggy though.
    I run the G-code in LinuxCNC on really old hardware, works great.

    1. I was going to say the same thing. Fusion 360 has HSMWorks built in for CAM which is actually pretty good. And the price is hard to beat.

      Though I prefer Solidworks, I dont like how Autocad does things.

  2. This is just plain wrong, although I can see it’s use. My main gripe against it that they choose to use (again) as a full programming language. Gcode to me is just an intermediate descriptive language, it should not have all these features (that linuxCNC offers).
    They capture information that does not end up in your original design, which makes it a lot harder to actually reproduce some design. My machines are sprinkled daily with pixie dust, so gcode is not transferable to other machines. converting gcode back to dxf or some other format misses that extra machining info that is not captured: for instance to what point a tool is zero’d or it’s actual cutting diameter means a lot for the final part; you never store that in a gcode file.
    For a quick and dirty I’m happy with just the axis interface and a keyboard.

  3. Features is just a system to write subroutines – any third party cli cam can be easily integrated into Features.
    In fact some of them are already integrated – like gcode generator for text milling.

    The version described in this article is really outdated version. Now days with great help of FernV and other guys from linuxcnc.org forum, LinuxCNC Features has been introduced with a lot of new “features” :).

    And I hope next LinuxCNC release will include features from scratch, there’s a brunch in linuxcnc git repository which I believe will be merged with main branch.
    See the following:
    https://forum.linuxcnc.org/forum/40-subroutines-and-ngcgui/26578-linuxcnc-features-a-kind-of-ngcgui?start=280
    and
    http://fernv.github.io/linuxcnc-features/

    sorry for my “English” :)

    Nick

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.