-
Notifications
You must be signed in to change notification settings - Fork 0
Geometry3d
This part of the system is all the hard core geometry needed to go from user supplied STL file(s) to machine-runnable g-code, this process is highly complicated, but can be split into several somewhat independent parts.
There is no user interface in this code at all, only configuration files and command lines.
It would probably be beneficial to build all of it into one large binary, which can do more than one step at a time without dumping the state out to disk, but which can also dump out the slices and do just one job at a time for debugging.
The user interface will need to be able to supply a set of parameters and relatively quickly get some rough estimates back on runtime.
Notice that a lot of content from the workshop, which mainly focused in this area of the software, is only available in Danish on the old wiki page, please copy it over to this wiki and translate it ASAP: http://osaa.dk/wiki/index.php/3DHighLevel
The layouters simplest job is to take the STL file and translate/rotate the object coordinates into machine coordinates to best fit the machine and give the best print result, so for each printable object it needs to rotate the coordinates and add an offset.
It would also be very nice to be able to choose a single STL file and have the machine replicate it into say a 3x3 grid with a configurable spacing so input file could look something like:
# Chamber size, in mm, provided by the machine when a chamber is plugged in:
chamber.size.z=200
chamber.size.x=200
chamber.size.y=200
source.count=2
source.0=foo.stl
source.1=bar.stl
target.count=3
target.0.source=0
target.0.offset.x=1000
target.0.offset.y=1000
target.0.rotate.x=0
target.0.rotate.y=90
target.0.rotate.z=180
target.1.source=0
target.1.offset.x=1500
target.1.offset.y=1500
target.2.source=1
target.2.offset.x=100
target.2.offset.y=200
Eats a 3D model and outputs 2D slices, needs the following configuration:
layer.thickness=100um
A scanning plane algorithm to slice the stl into 2D linesegments A scanline algorithm to convert the line segements to 2D polygons This should be done in C++ utilizing CGAL
Eats 2D layers and adds tool paths for the outline, needs input like this: laser.beamwidth=100um outline.passes=3 outline.overlap=30um
Eats 2D layers and outlines and adds tool paths for the hatching, needs input like this: laser.beamwidth=100um hatching.overlap=30um hatching.angles=16,-8,0,-16,8,0
The hatching.angles is the number of degrees different from a pure x movement, changing for each layer.
Eats tool paths for each layer and outputs g-code which can control the hardware, needs a lot of machine and material specific input like: laser.max-power=80 laser.energy-density=3
motion.acceleration.x=40
motion.acceleration.y=15
motion.acceleration.z=1
motion.top-speed.x=15
motion.top-speed.y=5
motion.top-speed.z=0.2
motion.top-speed.scoop=0.2
chamber.offset.x=100
chamber.offset.y=100
chamber.offset.z=200
power is in Watt, energy-density is in Joule / meter, acceleration is in m/s^2, top-speed is in m/s
The scoop is the material handling thingy that deposits a layer of material after lowering the bottom of the build chamber, maybe it's moved by hooking it with the x axis and dragging it over the chamber using the y axis.