s were written to make slicing a low memory task by storing each triangle at a single place.
We already have code to do the following:
A Generator that returns a triangle one at a time from an STL file (specifically an ASCII STL file). It Return the triangle as a list of 3D points (tuples), ignoring the normal. (from HW4)
A function that takes a list of line segments, each line segment is a list of 2D points (tuples) and returns a single list of 2D points where the start of one segment is the end of another. ( from HW 3)
A function that converts a list of 2D points to G-Code (lab 2)
A function that writes GCode to a file
To make a slicer you need to:
Write a function that calculates the intersection of a triangle with a horizontal plane. The input of the function should be a list of 3D points (tuples). It should return a list of 3D points. See this website for hints on the mathematics http://geomalgorithms.com/a06-_intersect-2.html#Triangle-Plane (Links to an external site.)
( https://web.archive.org/web/20180706054857/http://geomalgorithms.com/a06-_intersect-2.html (Links to an external site.) )
Next you need to combine all of these different functions into a single workflow that takes in an STL file, a slicing height, print temperatures, movement speed , and extrusion speed and returns a G-code String which prints the walls of the STL file. It should have an outer iteration over slice heights of the STL, for each slice height, it should scan all triangles and make a list of the line segments that intersect the plane at that Z height. Then it should order those segments into a list of points. That list of points is then converted into gcode movement and extrusion commands. The entire system combines these slices with setup and shutdown Gcode for the ender 3 printer to make the print job. You may write to a file a layer at a time or at the end.
Once the slicer is done:
Run the previous function with a vase file such as one of the following files:
Submit your code as a Jupiter notebook with the .gcode in it and, and an image of your print.