wow, there’s alot there to address… Maybe I’ll start by listing out what a workflow looks like for 3D printers, laser cutters and CNC machines.
3D printer workflow:
Get or create a 3D model, typically that is exported in the STL format.
Slice the STL file into GCode commands your 3D printer will understand and that means lots of things need to be known. Machine specific things like what filament diameter, what hotend temperature for the filament, how large your build area is, how fast can your machine move and do things. The slicer then needs to know how you want to build the object. Upside down, sideways or in little .05mm layers or fat .4mm layers. How solid do you want it etc etc.
Once Sliced you need to get the GCode file to the 3D printer and lots of times the slicer does that too. But there are other “GCode Sender” programs which can send the GCode to your printer like OctoPrint, Pronterface, etc.
Finally, it is the job of your firmware to know what to do with the GCode so you even have to specify in your slicer what firmware you are running because there are differences between Marlin, Sailfish, Smoothieware, GRBL, Klipper etc. The firmware needs to know details of your machine and limitations like how the endstops work(N.O. or N.C.) how many microsteps the stepper motor drivers use, acceleration limits, default speeds for moves,etc.
Laser Cutter workflow:
Since laser cutters are generally 2D devices they usually work from a 2D drawing which is either a vector drawing or a raster image(picture). Many drawing tools can be used to create the 2D drawings.
Next you need software which can convert those drawings into GCode commands to be sent to the laser. Again, these bits of software need to know things about your laser cutter like where the origin is, how big the work area is, Where Home position is, how big is the laser curf, how fast you can move the machine and how much power to set the laser to while doing an operation.
Often there are many “layer” operations so the laser design software will let you create layers and specify speeds and powers for that layer and another layer will be different. Layers can be executed in different order. Like you would not cut out a part before you rastered an image on it since a cut out part will move as it becomes free from the main work material and the curf made room for it to move.
All that generates the GCode file which has all these sequential commands/processes in them.
As in the 3D printers, sometimes the laser software will also send the GCode to the laser and other times you can save off the GCode and use another software package, a GCode sender, to load the GCode, move the design around and then send to the laser cutter.
As in the 3D printer, the firmware on the laser cutter knows intimate details about the laser cutter hardware and capabilities so too the laser cutter design software needs to know what firmware is on the laser cutter so it can generate the correct GCode syntax.
CNC workflow(I’m a bit greener on this but I think I understand most of it):
As with the others, there’s a need to design or have a design first. For CNC these can be 2D designs which are cut out like a laser but using a router/spindle bit to cut out the 2D shape. Some of these 2D shapes can be varied by the bit shape. Like a V-bit can be used with a 2D design to make a sign and/or lettering which doesn’t cut all the way through a work piece. There are many bit shapes and sizes but the designs are generally 2D vectors or DXF drawings.
There are 3D designs which allow the CNC to carve out 3D shapes/designs. These can be in OBJ, STL and other 3D design formats.
As before, there is the software which now takes these design files and creates the GCode to operate the machine. On CNC these are called “toolpaths” but they are just GCode files. Unlike the other machines though, the CNC toolpaths are more often than not saved as different files for a single design. There are often many different spindle mill/bits used for different operations it makes sense to separate the GCode/toolpath files relative to the bits or operation.
For example, if carving a bear out of a tree stump with a chainsaw you would not start carving the tiny details first. You would clear off large chunks of wood to get close to the outline of the bear you want to make. Next your would cut maybe with a chisel to get a much closer outline and then finally you would use the small hammer and chisel to start carving the fur, eye details etc. Same for CNC.
But, you have to enter or have setup all the various mill ends you have and plan to use. The ‘slicer’ needs to know not only these mill bits and their exact shapes/features but also needs to know how fast to drive the spindle and how fast to move the machine(Speeds and Feeds). Some bits will break quickly if the wood is very hard wood and the feed rate is too aggressive for the bit to remove the wood before the machine pushes the mill bit faster than it can remove the material.
So again this layer of software requires details of the machine, the tools to be used, and details specified by the operator as to how the machine should operate with the material intended to be milled out. Not too unlike setting up the 3D printer filament parameters only on CNCs the material often changes greatly. One day your cutting on pine the next day oak and the next aluminium.
Once you’ve generated all your toolpaths for clearing, roughing and finishing you need software to send this to the machine. Sometimes it’s combined with the CAM software(which generates the toolpaths) and sometimes there are different GCode senders or even “controllers”. In CNCs there usually was not firmware on the machine like GRBL, Marlin, etc. There was “control” software on a PC which in realtime( or close to it ) commanded drivers on the machine directly. Only within the last 10 years or so have seen started seeing buffered firmware like Marlin, Smoothieware, GRBL on CNC machines. Controller software like LinuxCNC and Mach have been around for many decades and are still in use today doing what they’ve always done. Taking GCode based toolpaths and digesting them into commands so it can control the machine movement. With the buffered firmware on the CNC machine you do as you did with the others, you used a GCode sender to send to the machine( bCNC, cncJS, etc are examples of CNC specific opensource GCode senders). You can also used LinuxCNC on a PC or even a Raspberry Pi(controlling a 32bit 3DP controller running realtime firmware called Remora) or use LinuxCNC and a Mesa FPGA board which will do the realtime hardware control interface.
Unlike the 3D printer and the laser cutter you have bit changes and other things which effect where the machine is in 3D space so almost all CNC machine controllers and GCode senders have zero’ing capabilities to set where the top of the material is, where the origin/corner of the material is. Many times there’s not even a need for endstops because ever operation is relative to where you defined 0,0,0 to be. And if you run your machine off the edge and into the end of travel and break a motor they will let you do that. Operators need to know what they are doing and many times beginners should keep their hand over the E-Stop switch until quite familiar with the machine contraints and the CAM software used to generate the GCode. I’ve heard people say they hated F360 CAM but used it so long they now know how to keep it from doing bad things and expect other software to be the same so they stick with “the devil they know”. There’s little hand-holding with the controller software like LinuxCNC and Mach so there is also a learning curve. If you are only into using a V bit and carving letters in signs, there are things like Shapeoko’s which use buffered firmware( GRBL ) and custom software which does the design and CAM and GCode sending all in one package and a few dollars.