2.Write a Slicer
One of the key steps in processing an STL file for printing is slicing. STL files were written
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.
3.In this problem and the next one, we’re going to make a very simple spam checker program by just looking
ooking at how likely a given email is to be spam based on the words it contains. In particular, in this problem we’re going to count how often words are present in spam emails within some set of training data (which here means a set of emails that have already been marked as spam or not spam manually).
We have already started to write a function spam_score(spam_file, not_file, word), which takes in two filenames, along with a target word (a lowercase string). Both filenames refer to text files which must be in the same directory as hw07.py (we’ve provided several such files in hw07files.zip). The text files contain one email per line (really just the subject line to keep things simple) - you can assume that these emails will be a series of words separated by spaces with no punctuation. The first file contains emails that have been identified as spam, the second contains emails that have been identified as not spam.
Since you haven’t learned File I/O yet, we’ve provided code that opens the two files and puts the data into two lists of strings (where each element is one line - that is, one email). You then must complete the function, so that it returns the spam score for the target word. The spam score is an integer representing the total number of times the target word occurs across all the spam emails, minus the total number of times the word occurs in not-spam emails. Convert all words to lowercase before counting, to ensure capitalization does not throw off the count.