FullControl: Unconstrained gcode design for 3D printers
github.com
github.com
I think integrating toolpath design into cad makes more sense than using Excel as an intermediate layer.
https://www.folklore.org/StoryView.py?story=Discovered_Loops...
I write software that generates gcode for things like vases and mugs. The gcode for a typical print is between 200KB and 2MB. It would be impossible to hand code at any decent level of productivity.
Folks get an awful lot of work done using G-code thus, incl. work on lathes which few CAM programs would handle with aplomb, let alone the same mathematically correct efficiency.
With a subtractive process you typically only need to put a few holes into specific locations using a cutting tool roughly the same size as the hole. Jog over, plunge, jog over to the next site, plunge. Maybe you need to mill out a few pockets or an exterior shape, in which case you switch to an endmill that's good for mass material removal and perform 2-3 passes around the outline's polygon.
And then there are additive processes that 3D printers use. Try to back-of-the-envelope how many passes of the tool head are required to build a 5x5x5cm cube using a hotend that has an orifice of 0.0004 cm and a layer thickness of 0.0002 cm. It's a lot of passes, and because gcode was designed for the subtractive processes where only a few passes are typically required, it contains zero macro commands for doing it in fewer lines of code. If you want to infill with a fancy material-saving pattern, the complexity of the movements required goes exponential and so does the LoC.
Plus it's nice to be able to visualize a piece in CAD before generating the gcode.
I've long been frustrated by traditional CAD/CAM, so finally worked up:
https://github.com/WillAdams/gcodepreview
which allows me to use:
and:
https://github.com/derkork/openscad-graph-editor
to create joinery:
https://forum.makerforums.info/t/openscad-and-python-looking...
which would otherwise be tedious to draw up:
I like the convenience that OpenScad and the slicer take care of translating my shape into instructions for the printer.
With FullControl, will I still be able to describe a shape and it gets done, or do I have to think in printer movements rather than 3d forms?
When slicing a 3d shape the are multiple different ways the head can move to create the same shape. Slicers account for some of these with features like 'Spiral Vase' where instead of having a stack of horizontal circles you can instead continuously spiral the extrude up the vase. FullControl lets you have even more control.
hint hint.
I find, when updating docs, that is easy to miss a paragraph and leave obsolete info. Then you have invalid state. If you merely post updates, then accurate state can always be reconstructed by replaying the log. The cost is that replaying is more expensive.
Likewise, if you're busy, it might suit you to chuck an update at the doc rather than take care over it. It's probably not so good for the doc, but better than not updating the doc. Startup mentality <taps head>
That works only for existing infill patterns. The idea is that if you wanted to create a completely new infill pattern,you could first prototype it using FullControl before implementing it in a slicer.
> or couldn't be banged out in five minutes in Notepad in raw gcode.
That's the point this just a slightly more convenient method for generating gcode.
Manual typing in notepad has it's limitation, as there is only so much text you can type. So you will want some kind of scripting language supporting loops and expression evaluation, so that repetitive parts can be described more easily. Some more advanced gcode interpreters even have extensions that allow you to do loops and calculations directly within the GCODE. But I don't think any of widely used 3d printer firmwares have that or support it too well. There are a couple of benefits doing it on computer in a general purpose language:
* GCODE wasn't exactly designed as general purpose scripting language so for more complex stuff syntax isn't that great compared to python
* performance and ability to plan ahead. If 3d printer evaluated and executed each gcode instruction independently it would result in very choppy movement as the tool accelerated and stopped for each of them. Most modern 3d printer firmwares will plan the movement acceleration across the multiple gcode instructions. That's not easily doable if the future gcode instructions depend arbitrary logic. It's simpler to split it into two parts so that 3d printer only needs to care about linear sequence of instructions with no loops, branching or complicated calculations.
* People always make mistakes. Pregenerating the sequence of gcode on computer, allows you to simulate and verify it on computer before running on actual device.
You could also just generate the GCode directly as plaintext from scripting language of your choice. But again this is just a bit of convenience allowing you to skip of the boilerplate for most common actions and transformations.
> There's not much in those screenshots that doesn't look like it was done with a normal slicer o
From what I see those pictures:
* gyroid like looking thing -> already explained before
* surface texture patterns -> some slicers have builtin functionality, but again it doesn't help if you are prototyping new surface texture pattern
* complex single wall thickness shapes -> there is vase mode but it only works for external contour, and attempting to slice single wall thickness model without vase mode wouldn't work well either
* grid of lines on build plate -> probably some kind of test pattern for finetuning one of the printing parameters
* single extrusion thick tower with bridging
* very thick extrusion beads forming a braid like pattern
* more single extrusion thick latices
* non planar movement
* spool shaped object -> 90 degree overhangs
I wish slicers had an even smarter mode: Reduce free-space moves. When printing a castle with 4 turrets, the slicer could be smart enough to know that after printing the main part of the castle, it can then print the turrets one at a time because they won't hit the print head.
If the turrets were a bit taller, and would collide with the print head, then you could still print half of all the turrets, followed by the other half of all the turrets.
End result: Less print time, less retractions, less moves over free space (stringing).