Project4_G-Code
I am choosing option 2 for my project, which is to create my own slicer and generate g-code. I was thinking about what the 3D printer as a tool/device affords, which is primarily the physical creation of a 3 dimensional form. However, the method to obtain this 3D form is actually a 2D layered "drawing" pattern, which is in contrast to its affordance. I wanted to play with this thought a little bit and explore the 3D-printed output of a mark-driven layered drawing (as opposed to a 3D printed object) using a "random print generator" that I created. Leveraging aspects of generativity (randomness, repetition), my Grasshopper Python code outputs an executable g-code script for a layered "gestural" drawing.
First Draft of Python Script
I wanted to create a "random print generator" that generates a G-Code script based on two input integers: the total number of G-code commands in your print ("lines") and how many lines per layer of print ("linesPerLayer").
For my first iteration, "linesPerLayer" is a constant throughout the program to reduce complexity (so if I pick the value "5", all layers will have 5 lines per layer, except for the top which will just print the remaining lines). Before starting the print, I want to auto-home the printer and clean the nozzle (G28 and G12, respectively). Then, I use a double for loop to generate G-Code based on the variables "lines" and "linesPerLayer" using (G0-3: commands for drawing lines/curves).
Python Code:
<p>__author__ = "stejaraiulia"</p><p>import rhinoscriptsyntax as rs import random as r import math as m</p><p># create a random print generator # G12: clean the nozzle -> do this before and after? # G2/3: arc clockwise/counterclockwise</p><p>def generateCoordinatePoint(s, e) : #x_val = "X"+str(r.uniform(s, e)) #y_val = "Y"+str(r.uniform(s, e)) return (r.uniform(s, e), r.uniform(s, e)) #return (str(x_val) + " " + str(y_val)) def makeGcodeSpeed(frX, frY, toX, toY, speed): l = m.sqrt((toX - frX)**2 + (toY - frY)**2) numerator = (nozzleWidth * l) denominator = (1.75 / 2) * (1.75 / 2) * m.pi</p><p> e = numerator / denominator</p><p> return e</p><p>startVal = 1 endVal = 3 instructions = [] nozzleWidth = 0.4</p><p>xPos = 0 yPos = 0 zPos = 0.3 xPrev = 0 yPrev = 0</p><p># starting instructions from Cura software (http://www.emcu.eu/configure-ultimaker-cura-software-for-use-the-creality-3d-printer-model-ender-3/) instructions.append("M104 S200\n") # Set Extruder temperature instructions.append("M140 S50\n") # Set Heat Bed temperature instructions.append("M190 S200\n") # Wait for Heat Bed temperature instructions.append("M109 S50\n") # Wait for Extruder temperature instructions.append("G28\n") # auto-home before starting the print instructions.append("G92 E0\n") # Reset Extruder instructions.append("G1 Z5.0 F3000\n") # Move Z Axis up little to prevent scratching of Heat Bed instructions.append("G1 X0.1 Y20 Z" + str(zPos) + " F5000.0\n") # Move to start position instructions.append("G1 X0.1 Y200.0 Z0.3 F1500.0 E15\n") # Draw the first line instructions.append("G1 X0.4 Y200.0 Z0.3 F5000.0\n") # Move to side a little instructions.append("G1 X0.4 Y20 Z0.3 F1500.0 E30\n") # Draw the second line instructions.append("G92 E0\n") # Reset Extruder instructions.append("G1 Z5.0 F3000\n") # Move Z Axis up little to prevent scratching of Heat Bed</p><p># now, randomly generate g-code for layer drawing for i in range(lines): # go through based on total amount of commands (parameter) if (i % linesPerLayer != 0): num = r.randint(startVal, endVal) coord = generateCoordinatePoint(10, 220) xPrev = xPos yPrev = yPos xPos = coord[0] yPos = coord[1] e = makeGcodeSpeed(xPrev, yPrev, xPos, yPos, 1500.0) inst = "G" + str(num) + " X" + str(xPos) + " Y" + str(yPos) + " Z" + str(zPos) + " F1500.0 E" + str(e) + "\n" instructions.append(inst) else: # move to the next layer zPos += nozzleWidth # increment z up one layer by adding the nozzleWidth value instructions.append("G1 Z" + str(zPos) + " F5000.0\n") # move to start position #instructions.append("G1 X0.1 Y20 Z0.3 F5000.0\n")# move to start position</p><p># ending instructions from Cura software (http://www.emcu.eu/configure-ultimaker-cura-software-for-use-the-creality-3d-printer-model-ender-3/) instructions.append("G4\n") # Wait instructions.append("M220 S100\n") # Reset Speed factor override percentage to default (100%) instructions.append("M221 S100\n") # Reset Extrude factor override percentage to default (100%) instructions.append("G91n") # Set coordinates to relative instructions.append("G1 F1800 E-3\n") # Retract filament 3 mm to prevent oozing instructions.append("G1 F3000 Z10\n") # Move Z Axis up 10 mm to allow filament ooze freely instructions.append("G90\n") # Set coordinates to absolute instructions.append("G1 X0 Y200 F1000\n") # Move Heat Bed to the front for easy print removal instructions.append("M104 S0\n") # Turn off Extruder temperature instructions.append("M140 S0\n") # Turn off Heat Bed instructions.append("M106 S0\n") # Turn off Cooling Fan instructions.append("M107\n") # Turn off Fan instructions.append("M84\n") # Disable stepper motors</p><p> f = open("/Users/stejaraiulia/Desktop/draftOne.gcode", "w") str_instructions = ''.join(instructions) f.write(str_instructions) f.close()</p><p>print(str_instructions)</p>
Generated G-Code (First Draft):
<p>M104 S200<br>M140 S50 M190 S200 M109 S50 G28 G92 E0 G1 Z5.0 F3000 G1 X0.1 Y20 Z0.3 F5000.0 G1 X0.1 Y200.0 Z0.3 F1500.0 E15 G1 X0.4 Y200.0 Z0.3 F5000.0 G1 X0.4 Y20 Z0.3 F1500.0 E30 G92 E0 G1 Z5.0 F3000 G1 Z0.7 F5000.0 G2 X191.076085385 Y148.465580202 Z0.7 F1500.0 E40.2406740262 G2 X15.5820308180 Y113.423273021 Z0.7 F1500.0 E29.7609109127 G1 X49.7596834451 Y13.3216947459 Z0.7 F1500.0 E17.5905225395 G1 X32.9885168013 Y19.0962942020 Z0.7 F1500.0 E2.94975411671 G1 Z1.1 F5000.0 G2 X108.557252098 Y39.5409070785 Z1.1 F1500.0 E13.0189277293 G1 X109.900830515 Y50.0839713641 Z1.1 F1500.0 E1.76749852524 G2 X199.752097619 Y183.767377924 Z1.1 F1500.0 E26.7865445628 G2 X184.313418390 Y45.1581869908 Z1.1 F1500.0 E23.1933468922 G1 Z1.5 F5000.0 G1 X210.633980481 Y74.4342473136 Z1.5 F1500.0 E6.54696780110 G2 X154.883195586 Y172.644080872 Z1.5 F1500.0 E18.7804357761 G2 X181.897237258 Y89.8967489536 Z1.5 F1500.0 E14.4756875184 G1 X153.995136114 Y194.346202315 Z1.5 F1500.0 E17.9791070698 G1 Z1.9 F5000.0 G1 X48.2927709167 Y109.862785045 Z1.9 F1500.0 E22.5031531972 G3 X111.222129730 Y104.028190028 Z1.9 F1500.0 E10.5100799215 G2 X11.8551393594 Y156.723030304 Z1.9 F1500.0 E18.7046088178 G3 X145.547446349 Y14.6632218852 Z1.9 F1500.0 E32.4412604364 G1 Z2.3 F5000.0 G3 X101.004410501 Y12.9073438131 Z2.3 F1500.0 E7.41329006983 G1 X120.535314845 Y20.1689508543 Z2.3 F1500.0 E3.46523347637 G1 X177.982165059 Y70.4643198098 Z2.3 F1500.0 E12.6975381718 G1 X200.147968746 Y92.4734208445 Z2.3 F1500.0 E5.19466288541 G1 Z2.7 F5000.0 G2 X36.9260612396 Y181.853026031 Z2.7 F1500.0 E30.9471682623 G3 X11.0948342964 Y181.698243469 Z2.7 F1500.0 E4.29582760130 G1 X173.260864801 Y15.1063313617 Z2.7 F1500.0 E38.6629172790 G2 X171.294868657 Y41.8704040194 Z2.7 F1500.0 E4.46287537848 G1 Z3.1 F5000.0 G1 X179.592057342 Y171.579519975 Z3.1 F1500.0 E21.6148007005 G1 X67.0291701115 Y25.6160047301 Z3.1 F1500.0 E30.6533925953 G2 X96.4036242439 Y135.999484347 Z3.1 F1500.0 E18.9957095534 G3 X100.345074123 Y211.603753729 Z3.1 F1500.0 E12.5901150349 G1 Z3.5 F5000.0 G1 X190.433599275 Y22.6514123053 Z3.5 F1500.0 E34.8116729946 G2 X131.116772244 Y214.773469790 Z3.5 F1500.0 E33.4381702453 G1 X214.298481682 Y118.874844787 Z3.5 F1500.0 E21.1115042942 G1 X66.8231005585 Y40.7241369178 Z3.5 F1500.0 E27.7560366454 G1 Z3.9 F5000.0 G1 X143.573733672 Y36.9906706818 Z3.9 F1500.0 E12.7787742162 G2 X117.724015239 Y14.7207609752 Z3.9 F1500.0 E5.67413619972 G3 X211.968256580 Y138.726521872 Z3.9 F1500.0 E25.9020472851 G3 X175.938085236 Y42.5162991416 Z3.9 F1500.0 E17.0849807902 G4 M220 S100 M221 S100 G91nG1 F1800 E-3 G1 F3000 Z10 G90 G1 X0 Y200 F1000 M104 S0 M140 S0 M106 S0 M107 M84</p>
3D Print First Draft Drawing!
I exported my first draft G-code file and tried to print it as a test run. However, I ran into 2 issues right off the bat.
1. Heating the bed: even though I set the bed temp to 50 in the code, my printer says the bed temp is set to 125.
2. Levels of my drawing: the first mark goes down fine but then the z-axis bumps up a level due to a bug in the code.
Round 2 Python Script:
<p>"""Provides a scripting component.<br> Inputs: x: The x script variable y: The y script variable Output: a: The a output variable"""</p><p>__author__ = "stejaraiulia"</p><p>import rhinoscriptsyntax as rs import random as r import math as m</p><p># create a random print generator # G12: clean the nozzle -> do this before and after? # G2/3: arc clockwise/counterclockwise</p><p>def generateCoordinatePoint(s, e) : #x_val = "X"+str(r.uniform(s, e)) #y_val = "Y"+str(r.uniform(s, e)) return (r.uniform(s, e), r.uniform(s, e)) #return (str(x_val) + " " + str(y_val)) def makeGcodeSpeed(frX, frY, toX, toY, speed): l = m.sqrt((toX - frX)**2 + (toY - frY)**2) numerator = (nozzleWidth * l) denominator = (1.75 / 2) * (1.75 / 2) * m.pi</p><p> e = numerator / denominator</p><p> return e</p><p>startVal = 1 endVal = 3 instructions = [] nozzleWidth = 0.4</p><p>xPos = 0 yPos = 0 zPos = 0.3 xPrev = 0 yPrev = 0</p><p># starting instructions from Cura software (http://www.emcu.eu/configure-ultimaker-cura-software-for-use-the-creality-3d-printer-model-ender-3/) instructions.append("M104 S200\n") # Set Extruder temperature instructions.append("M140 S50\n") # Set Heat Bed temperature instructions.append("M190 S50\n") # Wait for Heat Bed temperature instructions.append("M109 S200\n") # Wait for Extruder temperature instructions.append("G28\n") # auto-home before starting the print instructions.append("G92 E0\n") # Reset Extruder instructions.append("G1 Z5.0 F3000\n") # Move Z Axis up little to prevent scratching of Heat Bed instructions.append("G1 X0.1 Y20 Z" + str(zPos) + " F5000.0\n") # Move to start position instructions.append("G1 X0.1 Y200.0 Z0.3 F1500.0 E15\n") # Draw the first line instructions.append("G1 X0.4 Y200.0 Z0.3 F5000.0\n") # Move to side a little instructions.append("G1 X0.4 Y20 Z0.3 F1500.0 E30\n") # Draw the second line instructions.append("G92 E0\n") # Reset Extruder instructions.append("G1 Z0.3 F3000\n") # Move Z Axis up little to prevent scratching of Heat Bed</p><p># now, randomly generate g-code for layer drawing for i in range(lines): # go through based on total amount of commands (parameter) if (i <= 1 or i % linesPerLayer != 0): num = r.randint(startVal, endVal) coord = generateCoordinatePoint(10, 220) xPrev = xPos yPrev = yPos xPos = coord[0] yPos = coord[1] e = makeGcodeSpeed(xPrev, yPrev, xPos, yPos, 1500.0) inst = "G" + str(num) + " X" + str(xPos) + " Y" + str(yPos) + " Z" + str(zPos) + " F1500.0 E" + str(e) + "\n" instructions.append(inst) else: # move to the next layer zPos += nozzleWidth # increment z up one layer by adding the nozzleWidth value instructions.append("G1 Z" + str(zPos) + " F5000.0\n") # move to start position #instructions.append("G1 X0.1 Y20 Z0.3 F5000.0\n")# move to start position</p><p># ending instructions from Cura software (http://www.emcu.eu/configure-ultimaker-cura-software-for-use-the-creality-3d-printer-model-ender-3/) instructions.append("G4\n") # Wait instructions.append("M220 S100\n") # Reset Speed factor override percentage to default (100%) instructions.append("M221 S100\n") # Reset Extrude factor override percentage to default (100%) instructions.append("G91n") # Set coordinates to relative instructions.append("G1 F1800 E-3\n") # Retract filament 3 mm to prevent oozing instructions.append("G1 F3000 Z10\n") # Move Z Axis up 10 mm to allow filament ooze freely instructions.append("G90\n") # Set coordinates to absolute instructions.append("G1 X0 Y200 F1000\n") # Move Heat Bed to the front for easy print removal instructions.append("M104 S0\n") # Turn off Extruder temperature instructions.append("M140 S0\n") # Turn off Heat Bed instructions.append("M106 S0\n") # Turn off Cooling Fan instructions.append("M107\n") # Turn off Fan instructions.append("M84\n") # Disable stepper motors</p><p> f = open("/Users/stejaraiulia/Desktop/draftOne.gcode", "w") str_instructions = ''.join(instructions) f.write(str_instructions) f.close()</p><p>print(str_instructions)</p>
Round 2 G-Code Draft:
<p>M104 S200<br>M140 S50 M190 S50 M109 S200 G28 G92 E0 G1 Z5.0 F3000 G1 X0.1 Y20 Z0.3 F5000.0 G1 X0.1 Y200.0 Z0.3 F1500.0 E15 G1 X0.4 Y200.0 Z0.3 F5000.0 G1 X0.4 Y20 Z0.3 F1500.0 E30 G92 E0 G1 Z0.3 F3000 G3 X180.791794908 Y78.2529806208 Z0.3 F1500.0 E32.7613183158 G3 X208.868746749 Y161.039183763 Z0.3 F1500.0 E14.5376381195 G2 X78.6501454924 Y72.6680257874 Z0.3 F1500.0 E26.1712808343 G3 X207.545519849 Y94.9220863672 Z0.3 F1500.0 E21.7525229265 G2 X118.087817224 Y122.754881733 Z0.3 F1500.0 E15.5802922037 G1 Z0.7 F5000.0 G1 X50.5716374999 Y159.844971568 Z0.7 F1500.0 E12.8106681950 G2 X149.480007056 Y152.212419920 Z0.7 F1500.0 E16.4974305027 G3 X48.0963034234 Y85.9035281301 Z0.7 F1500.0 E20.1460927184 G3 X122.034958437 Y119.584627267 Z0.7 F1500.0 E13.5117033277 G1 Z1.1 F5000.0 G1 X84.3715512989 Y97.5580523864 Z1.1 F1500.0 E7.25593732684 G2 X120.442170684 Y69.3356830586 Z1.1 F1500.0 E7.61648326005 G2 X98.8344292594 Y99.5690872928 Z1.1 F1500.0 E6.17992915198 G1 X125.088752981 Y57.8986912818 Z1.1 F1500.0 E8.19055967393 G1 Z1.5 F5000.0 G2 X212.378795808 Y186.973203571 Z1.5 F1500.0 E25.9129226003 G1 X146.377664385 Y189.603320128 Z1.5 F1500.0 E10.9847441690 G3 X104.678115651 Y68.4170162173 Z1.5 F1500.0 E21.3130861162 G2 X88.3711256290 Y17.8030024583 Z1.5 F1500.0 E8.84321930517 G1 Z1.9 F5000.0 G2 X159.735891663 Y120.141444415 Z1.9 F1500.0 E20.7483579963 G1 X204.040391222 Y209.027432426 Z1.9 F1500.0 E16.5162673677 G1 X29.1706965803 Y192.816057283 Z1.9 F1500.0 E29.2056461720 G2 X89.8497024713 Y60.0902030108 Z1.9 F1500.0 E24.2696986492 G1 Z2.3 F5000.0 G2 X117.739843482 Y129.873469416 Z2.3 F1500.0 E12.4975419225 G2 X138.199270167 Y10.9383123910 Z2.3 F1500.0 E20.0695081427 G2 X205.036406231 Y86.2135071925 Z2.3 F1500.0 E16.7407528633 G2 X212.872407414 Y190.219606938 Z2.3 F1500.0 E17.3453052804 G1 Z2.7 F5000.0 G1 X77.0614818773 Y79.6675230372 Z2.7 F1500.0 E29.1222686274 G3 X154.989338749 Y147.258762401 Z2.7 F1500.0 E17.1550464048 G1 X184.073545364 Y62.3852308836 Z2.7 F1500.0 E14.9202454480 G3 X75.9942068636 Y202.967014339 Z2.7 F1500.0 E29.4893730342 G1 Z3.1 F5000.0 G3 X176.809721437 Y98.1037148424 Z3.1 F1500.0 E24.1909353450 G3 X102.272682180 Y168.876441202 Z3.1 F1500.0 E17.0930472775 G2 X51.9509404862 Y39.8429919510 Z3.1 F1500.0 E23.0324386221 G3 X30.3776264069 Y138.521104545 Z3.1 F1500.0 E16.7978317332 G1 Z3.5 F5000.0 G2 X106.317379079 Y134.655503739 Z3.5 F1500.0 E12.6451832767 G3 X35.5546768511 Y127.169426881 Z3.5 F1500.0 E11.8335538142 G3 X170.624479789 Y15.6914549584 Z3.5 F1500.0 E29.1245567816 G3 X95.8769102073 Y147.575742681 Z3.5 F1500.0 E25.2101426936 G4 M220 S100 M221 S100 G91nG1 F1800 E-3 G1 F3000 Z10 G90 G1 X0 Y200 F1000 M104 S0 M140 S0 M106 S0 M107 M84</p>
This worked better, but I'm still having issues with layers. 2 problems again:
1. Too few "lines" drawn in a layer. I adjusted lines = 100 and linesPerLayer = 50 (to get 2 layers of 50 commands).
2. Nozzle is incrementing too far up. Not sure if this is due to problem 1, so I did not do anything to directly affect this issue yet. I did however remove the line of code to take the drawing back to the start for each layer.
New Python Code:
<p>__author__ = "stejaraiulia"</p><p>import rhinoscriptsyntax as rs import random as r import math as m</p><p># create a random print generator # G12: clean the nozzle -> do this before and after? # G2/3: arc clockwise/counterclockwise</p><p>def generateCoordinatePoint(s, e) : #x_val = "X"+str(r.uniform(s, e)) #y_val = "Y"+str(r.uniform(s, e)) return (r.uniform(s, e), r.uniform(s, e)) #return (str(x_val) + " " + str(y_val)) def makeGcodeSpeed(frX, frY, toX, toY, speed): l = m.sqrt((toX - frX)**2 + (toY - frY)**2) numerator = (nozzleWidth * l) denominator = (1.75 / 2) * (1.75 / 2) * m.pi</p><p> e = numerator / denominator</p><p> return e</p><p>startVal = 1 endVal = 3 instructions = [] nozzleWidth = 0.4</p><p>xPos = 0 yPos = 0 zPos = 0.3 xPrev = 0 yPrev = 0</p><p># starting instructions from Cura software (http://www.emcu.eu/configure-ultimaker-cura-software-for-use-the-creality-3d-printer-model-ender-3/) instructions.append("M104 S200\n") # Set Extruder temperature instructions.append("M140 S50\n") # Set Heat Bed temperature instructions.append("M190 S50\n") # Wait for Heat Bed temperature instructions.append("M109 S200\n") # Wait for Extruder temperature instructions.append("G28\n") # auto-home before starting the print instructions.append("G92 E0\n") # Reset Extruder instructions.append("G1 Z5.0 F3000\n") # Move Z Axis up little to prevent scratching of Heat Bed instructions.append("G1 X0.1 Y20 Z" + str(zPos) + " F5000.0\n") # Move to start position instructions.append("G1 X0.1 Y200.0 Z0.3 F1500.0 E15\n") # Draw the first line instructions.append("G1 X0.4 Y200.0 Z0.3 F5000.0\n") # Move to side a little instructions.append("G1 X0.4 Y20 Z0.3 F1500.0 E30\n") # Draw the second line instructions.append("G92 E0\n") # Reset Extruder instructions.append("G1 Z0.3 F3000\n") # Move Z Axis up little to prevent scratching of Heat Bed</p><p># now, randomly generate g-code for layer drawing for i in range(lines): # go through based on total amount of commands (parameter) if (i <= 1 or i % linesPerLayer != 0): num = r.randint(startVal, endVal) coord = generateCoordinatePoint(10, 220) xPrev = xPos yPrev = yPos xPos = coord[0] yPos = coord[1] e = makeGcodeSpeed(xPrev, yPrev, xPos, yPos, 1500.0) inst = "G" + str(num) + " X" + str(xPos) + " Y" + str(yPos) + " Z" + str(zPos) + " F1500.0 E" + str(e) + "\n" instructions.append(inst) else: # move to the next layer instructions.append("G4 P500\n") # Wait for half a second zPos += nozzleWidth # increment z up one layer by adding the nozzleWidth value #instructions.append("G1 Z" + str(zPos) + " F5000.0\n") # move to start position #instructions.append("G1 X0.1 Y20 Z0.3 F5000.0\n")# move to start position</p><p># ending instructions from Cura software (http://www.emcu.eu/configure-ultimaker-cura-software-for-use-the-creality-3d-printer-model-ender-3/) instructions.append("G4\n") # Wait instructions.append("M220 S100\n") # Reset Speed factor override percentage to default (100%) instructions.append("M221 S100\n") # Reset Extrude factor override percentage to default (100%) instructions.append("G91n") # Set coordinates to relative instructions.append("G1 F1800 E-3\n") # Retract filament 3 mm to prevent oozing instructions.append("G1 F3000 Z10\n") # Move Z Axis up 10 mm to allow filament ooze freely instructions.append("G90\n") # Set coordinates to absolute instructions.append("G1 X0 Y200 F1000\n") # Move Heat Bed to the front for easy print removal instructions.append("M104 S0\n") # Turn off Extruder temperature instructions.append("M140 S0\n") # Turn off Heat Bed instructions.append("M106 S0\n") # Turn off Cooling Fan instructions.append("M107\n") # Turn off Fan instructions.append("M84\n") # Disable stepper motors</p><p> f = open("/Users/stejaraiulia/Desktop/draftOne.gcode", "w") str_instructions = ''.join(instructions) f.write(str_instructions) f.close()</p><p>print(str_instructions)</p>
New G-Code:
<p>M104 S200<br>M140 S50 M190 S50 M109 S200 G28 G92 E0 G1 Z5.0 F3000 G1 X0.1 Y20 Z0.3 F5000.0 G1 X0.1 Y200.0 Z0.3 F1500.0 E15 G1 X0.4 Y200.0 Z0.3 F5000.0 G1 X0.4 Y20 Z0.3 F1500.0 E30 G92 E0 G1 Z0.3 F3000 G1 X198.991397369 Y98.2751220238 Z0.3 F1500.0 E36.9081020645 G2 X137.344431715 Y86.1533683815 Z0.3 F1500.0 E10.4482431390 G3 X112.067790442 Y35.1073657004 Z0.3 F1500.0 E9.47272204663 G2 X215.743785073 Y87.3106793881 Z0.3 F1500.0 E19.3037034602 G3 X141.157233209 Y215.844845389 Z0.3 F1500.0 E24.7135256317 G2 X215.604199481 Y62.7118301429 Z0.3 F1500.0 E28.3161127834 G3 X25.8056767678 Y48.2729471320 Z0.3 F1500.0 E31.6548259603 G1 X67.4768190190 Y192.681592235 Z0.3 F1500.0 E24.9951302793 G3 X77.8206807369 Y171.986369387 Z0.3 F1500.0 E3.84757996286 G3 X153.561855764 Y44.5567431786 Z0.3 F1500.0 E24.6523771119 G2 X108.621797904 Y145.010649666 Z0.3 F1500.0 E18.3010822653 G2 X23.8079330200 Y206.745346199 Z0.3 F1500.0 E17.4453803043 G2 X134.544585862 Y49.2886236612 Z0.3 F1500.0 E32.0124375565 G1 X34.7230895486 Y213.211970650 Z0.3 F1500.0 E31.9172524100 G3 X113.760132274 Y71.3130346263 Z0.3 F1500.0 E27.0115313042 G2 X41.5816383363 Y134.695468843 Z0.3 F1500.0 E15.9744484471 G3 X194.784410277 Y60.7543945216 Z0.3 F1500.0 E28.2898769651 G1 X46.2762824127 Y32.6665219878 Z0.3 F1500.0 E25.1348452629 G3 X66.3380563624 Y198.747728841 Z0.3 F1500.0 E27.8201904147 G3 X120.976953596 Y54.4246898248 Z0.3 F1500.0 E25.6634589282 G1 X125.426883393 Y89.9102707323 Z0.3 F1500.0 E5.94749511767 G1 X134.771075443 Y41.2031538514 Z0.3 F1500.0 E8.24773754145 G2 X174.757245236 Y124.563182030 Z0.3 F1500.0 E15.3752039597 G1 X75.7350079431 Y211.316039480 Z0.3 F1500.0 E21.8933192062 G3 X170.580408368 Y38.8217482952 Z0.3 F1500.0 E32.7362912871 G3 X85.9170005523 Y197.728017660 Z0.3 F1500.0 E29.9429411379 G2 X53.5802702789 Y198.974264054 Z0.3 F1500.0 E5.38161230015 G3 X41.7060639215 Y19.8343048185 Z0.3 F1500.0 E29.8564700947 G1 X110.769055071 Y96.1026117191 Z0.3 F1500.0 E17.1108375247 G1 X60.0774979624 Y160.677089958 Z0.3 F1500.0 E13.6523609293 G2 X132.139648147 Y191.939684316 Z0.3 F1500.0 E13.0631305925 G1 X199.065693358 Y87.0903324139 Z0.3 F1500.0 E20.6858803037 G3 X51.7096558622 Y118.166418350 Z0.3 F1500.0 E25.0444206061 G3 X123.224712382 Y175.504143370 Z0.3 F1500.0 E15.2435393746 G3 X202.472448378 Y12.8595588312 Z0.3 F1500.0 E30.0877699291 G3 X120.465858534 Y84.6341070048 Z0.3 F1500.0 E18.1234675336 G2 X165.602347482 Y122.566544706 Z0.3 F1500.0 E9.80493389846 G2 X86.5182960834 Y157.531586024 Z0.3 F1500.0 E14.3798082163 G1 X33.1361240007 Y96.9066334743 Z0.3 F1500.0 E13.4333905321 G2 X218.085826589 Y110.522616452 Z0.3 F1500.0 E30.8404983241 G1 X33.7472273303 Y143.948443944 Z0.3 F1500.0 E31.1555361310 G3 X72.6365281282 Y202.981518203 Z0.3 F1500.0 E11.7560364208 G2 X188.828056860 Y195.126276232 Z0.3 F1500.0 E19.3668372703 G1 X207.410993797 Y28.6698153412 Z0.3 F1500.0 E27.8537888682 G1 X50.3252891401 Y85.1008357914 Z0.3 F1500.0 E27.7579583707 G1 X14.2891950491 Y204.364906968 Z0.3 F1500.0 E20.7193014524 G1 X163.119206237 Y90.4216154116 Z0.3 F1500.0 E31.1712620752 G2 X204.430297415 Y82.3395888778 Z0.3 F1500.0 E7.00030125843 G3 X169.391546227 Y22.0760528550 Z0.3 F1500.0 E11.5927291292 G3 X134.189420642 Y24.3005225454 Z0.3 F1500.0 E5.86581382228 G4 P500 G2 X184.918405196 Y200.340821202 Z0.7 F1500.0 E30.4669085149 G1 X120.747582223 Y16.5493781078 Z0.7 F1500.0 E32.3740856858 G2 X130.820861878 Y11.5095695871 Z0.7 F1500.0 E1.87315866584 G1 X130.231522640 Y23.1542851136 Z0.7 F1500.0 E1.93900254976 G3 X65.1507975367 Y140.611035165 Z0.7 F1500.0 E22.3311460241 G3 X163.857099413 Y34.1052659501 Z0.7 F1500.0 E24.1487894972 G2 X217.045993519 Y125.735271127 Z0.7 F1500.0 E17.6193319312 G2 X67.8083536254 Y118.097565263 Z0.7 F1500.0 E24.8508011356 G1 X53.2561068706 Y189.371568161 Z0.7 F1500.0 E12.0974470038 G2 X172.385033571 Y64.0294267592 Z0.7 F1500.0 E28.7572066904 G2 X53.5895562612 Y30.1524119162 Z0.7 F1500.0 E20.5433624870 G3 X76.0375085571 Y167.139292654 Z0.7 F1500.0 E23.0848556183 G1 X34.7949925252 Y168.541181245 Z0.7 F1500.0 E6.86261940689 G1 X39.9199298759 Y119.938318461 Z0.7 F1500.0 E8.12749912100 G1 X52.1545873205 Y58.3092916729 Z0.7 F1500.0 E10.4489558043 G1 X167.641005306 Y204.979657332 Z0.7 F1500.0 E31.0449594980 G3 X93.0698671654 Y142.870813064 Z0.7 F1500.0 E16.1391898064 G1 X174.226878472 Y152.764815189 Z0.7 F1500.0 E13.5963914836 G1 X99.2406803336 Y187.203161407 Z0.7 F1500.0 E13.7225061652 G1 X101.040945246 Y138.441843178 Z0.7 F1500.0 E8.11456490755 G2 X68.0436829518 Y208.850436318 Z0.7 F1500.0 E12.9310825153 G1 X60.6819421711 Y218.563266207 Z0.7 F1500.0 E2.02678358135 G1 X134.821498593 Y59.0041850407 Z0.7 F1500.0 E29.2593617044 G2 X203.280350907 Y124.814819557 Z0.7 F1500.0 E15.7921331949 G3 X12.6831786073 Y56.3391950156 Z0.7 F1500.0 E33.6799693716 G1 X204.405047626 Y12.2530149014 Z0.7 F1500.0 E32.7155598099 G2 X119.133043778 Y206.196761384 Z0.7 F1500.0 E35.2327875315 G3 X101.502002717 Y22.2211172299 Z0.7 F1500.0 E30.7354473326 G1 X73.3164951707 Y136.214613206 Z0.7 F1500.0 E19.5280758326 G3 X117.617337293 Y85.8132820613 Z0.7 F1500.0 E11.1593314396 G2 X98.8903812644 Y43.8237166278 Z0.7 F1500.0 E7.64589394077 G1 X78.3262908994 Y73.3393119824 Z0.7 F1500.0 E5.98232367908 G3 X12.6270955069 Y18.4069624401 Z0.7 F1500.0 E14.2417351513 G1 X175.779462634 Y182.076134197 Z0.7 F1500.0 E38.4317559915 G2 X58.4007658631 Y75.0831885847 Z0.7 F1500.0 E26.4126357633 G2 X106.982166376 Y199.316120110 Z0.7 F1500.0 E22.1835213196 G2 X64.6098378357 Y80.5312291236 Z0.7 F1500.0 E20.9731885481 G2 X152.154548229 Y135.855183494 Z0.7 F1500.0 E17.2222124590 G3 X181.559812575 Y60.4505264797 Z0.7 F1500.0 E13.4596043732 G3 X97.9008140404 Y86.4053556020 Z0.7 F1500.0 E14.5667252476 G2 X171.665785586 Y153.145113578 Z0.7 F1500.0 E16.5429190697 G1 X12.5881118349 Y109.625926500 Z0.7 F1500.0 E27.4268213869 G3 X173.069209906 Y73.6764606794 Z0.7 F1500.0 E27.3495336645 G1 X176.565202162 Y68.5769317696 Z0.7 F1500.0 E1.02820571255 G1 X169.014671266 Y137.262804357 Z0.7 F1500.0 E11.4913160222 G3 X163.237191476 Y12.8076907504 Z0.7 F1500.0 E20.7192586221 G1 X148.157370701 Y193.747161986 Z0.7 F1500.0 E30.1946770355 G1 X80.7101211031 Y199.110410530 Z0.7 F1500.0 E11.2519286500 G3 X127.526363824 Y38.5121818886 Z0.7 F1500.0 E27.8192507709 G4 M220 S100 M221 S100 G91nG1 F1800 E-3 G1 F3000 Z10 G90 G1 X0 Y200 F1000 M104 S0 M140 S0 M106 S0 M107 M84</p>
While this fixed most of the visible issues, unfortunately, the filament either isn't extruding or isn't sticking to the bed plate. Will mess around with the Z values some more and also see if rounding the decimals works. There could also be a bug in the extrusion calculation.
Second Round of Trials and Edits
I re-calculated the extrusion volume based on Sam's question in the slack about extruder volume. I realized that before, I had neglected the layerHeight parameter in Jennifer's code (that I borrowed for the extrusion function calculation). I realized that this assumption was probably why my filament wasn't extruding properly, so here is the new code with this change:
Python Script:
<p>__author__ = "stejaraiulia"</p><p>import rhinoscriptsyntax as rs import random as r import math as m</p><p># create a random print generator # G12: clean the nozzle -> do this before and after? # G2/3: arc clockwise/counterclockwise</p><p>def generateCoordinatePoint(s, e) : #x_val = "X"+str(r.uniform(s, e)) #y_val = "Y"+str(r.uniform(s, e)) return (r.uniform(s, e), r.uniform(s, e)) #return (str(x_val) + " " + str(y_val)) def makeGcodeSpeed(frX, frY, toX, toY, speed): # E = nozzleRadius^2 * L / filamentRadius^2 l = m.sqrt((toX - frX)**2 + (toY - frY)**2) #calculate the distance e = ( (nozzleWidth/2)**2 * l ) / ( (1.75/2)**2 ) return e</p><p>startVal = 1 endVal = 3 instructions = [] nozzleWidth = 0.4</p><p>xPos = 0 yPos = 0 zPos = 0.3 xPrev = 0 yPrev = 0</p><p># starting instructions from Cura software (http://www.emcu.eu/configure-ultimaker-cura-software-for-use-the-creality-3d-printer-model-ender-3/) instructions.append("M104 S200\n") # Set Extruder temperature instructions.append("M140 S50\n") # Set Heat Bed temperature instructions.append("M190 S50\n") # Wait for Heat Bed temperature instructions.append("M109 S200\n") # Wait for Extruder temperature instructions.append("G28\n") # auto-home before starting the print instructions.append("G92 E0\n") # Reset Extruder instructions.append("G1 Z5.0 F3000\n") # Move Z Axis up little to prevent scratching of Heat Bed instructions.append("G1 X0.1 Y20 Z" + str(zPos) + " F5000.0\n") # Move to start position instructions.append("G1 X0.1 Y200.0 Z0.3 F1500.0 E15\n") # Draw the first line instructions.append("G1 X0.4 Y200.0 Z0.3 F5000.0\n") # Move to side a little instructions.append("G1 X0.4 Y20 Z0.3 F1500.0 E30\n") # Draw the second line instructions.append("G92 E0\n") # Reset Extruder instructions.append("G1 Z0.3 F3000\n") # Move Z Axis up little to prevent scratching of Heat Bed</p><p># now, randomly generate g-code for layer drawing for i in range(lines): # go through based on total amount of commands (parameter) if (i <= 1 or i % linesPerLayer != 0): num = r.randint(startVal, endVal) coord = generateCoordinatePoint(10, 220) xPrev = xPos yPrev = yPos xPos = coord[0] yPos = coord[1] e = makeGcodeSpeed(xPrev, yPrev, xPos, yPos, 1500.0) inst = "G" + str(num) + " X" + str(xPos) + " Y" + str(yPos) + " Z" + str(zPos) + " F1500.0 E" + str(e) + "\n" instructions.append(inst) else: # move to the next layer instructions.append("G4 P500\n") # Wait for half a second zPos += nozzleWidth # increment z up one layer by adding the nozzleWidth value #instructions.append("G1 Z" + str(zPos) + " F5000.0\n") # move to start position #instructions.append("G1 X0.1 Y20 Z0.3 F5000.0\n")# move to start position</p><p># ending instructions from Cura software (http://www.emcu.eu/configure-ultimaker-cura-software-for-use-the-creality-3d-printer-model-ender-3/) instructions.append("G4\n") # Wait instructions.append("M220 S100\n") # Reset Speed factor override percentage to default (100%) instructions.append("M221 S100\n") # Reset Extrude factor override percentage to default (100%) instructions.append("G91n") # Set coordinates to relative instructions.append("G1 F1800 E-3\n") # Retract filament 3 mm to prevent oozing instructions.append("G1 F3000 Z10\n") # Move Z Axis up 10 mm to allow filament ooze freely instructions.append("G90\n") # Set coordinates to absolute instructions.append("G1 X0 Y200 F1000\n") # Move Heat Bed to the front for easy print removal instructions.append("M104 S0\n") # Turn off Extruder temperature instructions.append("M140 S0\n") # Turn off Heat Bed instructions.append("M106 S0\n") # Turn off Cooling Fan instructions.append("M107\n") # Turn off Fan instructions.append("M84\n") # Disable stepper motors</p><p> f = open("/Users/stejaraiulia/Desktop/draftOne.gcode", "w") str_instructions = ''.join(instructions) f.write(str_instructions) f.close()</p><p>print(str_instructions)</p>
G-Code:
M104 S200 M140 S50 M190 S50 M109 S200 G28 G92 E0 G1 Z5.0 F3000 G1 X0.1 Y20 Z0.3 F5000.0 G1 X0.1 Y200.0 Z0.3 F1500.0 E15 G1 X0.4 Y200.0 Z0.3 F5000.0 G1 X0.4 Y20 Z0.3 F1500.0 E30 G92 E0 G1 Z0.3 F3000 G1 X205.353775573 Y27.7556401467 Z0.3 F1500.0 E10.8262407389 G2 X43.3776479867 Y104.374181355 Z0.3 F1500.0 E9.36141493979 G1 X122.910574239 Y24.2860643796 Z0.3 F1500.0 E5.89687143521 G2 X58.5332695031 Y125.258379920 Z0.3 F1500.0 E6.25627927458 G2 X92.1578335259 Y16.2023884558 Z0.3 F1500.0 E5.96228988632 G2 X101.197223872 Y48.0038016068 Z0.3 F1500.0 E1.72727705362 G1 X58.6133398338 Y185.553318766 Z0.3 F1500.0 E7.52276766615 G3 X161.964177264 Y169.611977254 Z0.3 F1500.0 E5.46340812178 G3 X42.2866763977 Y101.379688122 Z0.3 F1500.0 E7.19735800138 G1 X139.759019415 Y159.761221266 Z0.3 F1500.0 E5.93600936069 G1 X191.990939624 Y77.9902958720 Z0.3 F1500.0 E5.06927851970 G2 X209.358823188 Y48.2286678098 Z0.3 F1500.0 E1.80028814105 G1 X82.1798292440 Y100.637082532 Z0.3 F1500.0 E7.18650143905 G1 X166.432000633 Y96.7335888135 Z0.3 F1500.0 E4.40646788937 G3 X20.5435401845 Y118.653865875 Z0.3 F1500.0 E7.70748449272 G2 X143.397351841 Y130.973805411 Z0.3 F1500.0 E6.45067734974 G2 X185.077598803 Y78.0038118075 Z0.3 F1500.0 E3.52142363630 G2 X13.8346409899 Y20.5107723849 Z0.3 F1500.0 E9.43734347122 G3 X33.7563524890 Y77.8076738633 Z0.3 F1500.0 E3.16925040060 G2 X142.771573804 Y73.4457624031 Z0.3 F1500.0 E5.70004640420 G2 X71.3886234014 Y46.3769521477 Z0.3 F1500.0 E3.98852966074 G2 X92.9106312945 Y49.5072002532 Z0.3 F1500.0 E1.13624579070 G3 X47.0595086829 Y73.3271860903 Z0.3 F1500.0 E2.69945761327 G3 X119.071174994 Y81.7134976941 Z0.3 F1500.0 E3.78766873745 G3 X59.7484688629 Y127.229992871 Z0.3 F1500.0 E3.90648444139 G3 X63.6359777115 Y11.9922031014 Z0.3 F1500.0 E6.02401139143 G1 X150.259615896 Y169.412025019 Z0.3 F1500.0 E9.38732730108 G1 X132.756239875 Y16.8895362258 Z0.3 F1500.0 E8.02082175409 G2 X20.9920899883 Y30.4566899642 Z0.3 F1500.0 E5.88197110196 G3 X119.018947934 Y163.421173591 Z0.3 F1500.0 E8.63050590340 G1 X217.264992385 Y84.8536289154 Z0.3 F1500.0 E6.57230523556 G3 X159.614109203 Y27.4946126935 Z0.3 F1500.0 E4.24879237977 G1 X184.239154377 Y213.964262368 Z0.3 F1500.0 E9.82666994341 G2 X197.153643325 Y83.4304834576 Z0.3 F1500.0 E6.85301953709 G1 X161.869994271 Y95.0535256994 Z0.3 F1500.0 E1.94083361992 G3 X57.7155718744 Y138.497384104 Z0.3 F1500.0 E5.89592701973 G3 X141.849540955 Y119.067018270 Z0.3 F1500.0 E4.51126869771 G1 X124.479143375 Y178.969323499 Z0.3 F1500.0 E3.25851427893 G1 X109.253099272 Y14.5607510590 Z0.3 F1500.0 E8.62626569349 G1 X219.477661130 Y152.782412773 Z0.3 F1500.0 E9.23637221568 G2 X98.9215089200 Y105.935213573 Z0.3 F1500.0 E6.75727639665 G2 X55.1571777918 Y203.433590183 Z0.3 F1500.0 E5.58342525375 G3 X51.3423669577 Y38.2739356046 Z0.3 F1500.0 E8.63105073180 G3 X147.541622682 Y167.730271293 Z0.3 F1500.0 E8.42638127850 G2 X44.0654029955 Y173.252472099 Z0.3 F1500.0 E5.41379741656 G1 X156.458301035 Y186.637802444 Z0.3 F1500.0 E5.91345102661 G3 X123.018702334 Y65.0554657570 Z0.3 F1500.0 E6.58792861579 G2 X149.670141188 Y90.0207675991 Z0.3 F1500.0 E1.90788001708 G1 X187.597783896 Y139.533982017 Z0.3 F1500.0 E3.25853421502 G3 X32.0898262667 Y144.074888154 Z0.3 F1500.0 E8.12796038840 G4 P500 G2 X82.2768962199 Y81.6664277680 Z0.7 F1500.0 E4.18401656995 G2 X163.767689844 Y187.370944553 Z0.7 F1500.0 E6.97311741293 G1 X40.9719173024 Y209.483231120 Z0.7 F1500.0 E6.51863822484 G3 X41.2288484628 Y218.865558769 Z0.7 F1500.0 E0.490362512518 G2 X16.1994453100 Y141.591653039 Z0.7 F1500.0 E4.24366480981 G3 X47.4345280172 Y171.674427112 Z0.7 F1500.0 E2.26564846903 G2 X157.992349037 Y113.575726748 Z0.7 F1500.0 E6.52507000568 G2 X40.0057431849 Y182.052166190 Z0.7 F1500.0 E7.12714280381 G1 X209.010709010 Y70.4881334922 Z0.7 F1500.0 E10.5799739097 G2 X94.9302250258 Y21.5256045673 Z0.7 F1500.0 E6.48588079166 G2 X216.235097988 Y206.499785399 Z0.7 F1500.0 E11.5566753249 G1 X33.5226807236 Y55.1749432428 Z0.7 F1500.0 E12.3946035601 G1 X105.679896554 Y67.1580299117 Z0.7 F1500.0 E3.82147703811 G3 X207.912408611 Y99.5733860415 Z0.7 F1500.0 E5.60318720237 G3 X158.096308302 Y111.894480748 Z0.7 F1500.0 E2.68106096580 G1 X43.4502161794 Y57.6170011772 Z0.7 F1500.0 E6.62702821828 G3 X176.017201995 Y95.8598909686 Z0.7 F1500.0 E7.20838069004 G3 X174.346797892 Y88.0188995296 Z0.7 F1500.0 E0.4188444392 G2 X69.4819666117 Y210.847652587 Z0.7 F1500.0 E8.43775893266 G3 X145.634298609 Y77.2031208492 Z0.7 F1500.0 E8.03621614303 G1 X59.0288037376 Y94.5553074368 Z0.7 F1500.0 E4.61462066727 G3 X49.3605381875 Y118.872342470 Z0.7 F1500.0 E1.36717376598 G1 X143.711480100 Y150.855878572 Z0.7 F1500.0 E5.20487336309 G3 X39.9265183670 Y69.8293310778 Z0.7 F1500.0 E6.87901246326 G3 X138.426430798 Y87.9688244470 Z0.7 F1500.0 E5.23265294506 G1 X140.034774916 Y162.808870735 Z0.7 F1500.0 E3.91091337347 G3 X143.104523427 Y15.5796935439 Z0.7 F1500.0 E7.69364511619 G2 X118.987498297 Y137.917617900 Z0.7 F1500.0 E6.51454255628 G2 X13.0303255913 Y25.9944651217 Z0.7 F1500.0 E8.05210912801 G3 X155.208005128 Y56.0630605355 Z0.7 F1500.0 E7.59235630442 G1 X10.1588104768 Y39.4610589721 Z0.7 F1500.0 E7.62755745003 G3 X177.774022500 Y72.4798215716 Z0.7 F1500.0 E8.92533371397 G1 X168.650415381 Y127.242927045 Z0.7 F1500.0 E2.90052735330 G3 X122.066193110 Y176.800509715 Z0.7 F1500.0 E3.55343809416 G2 X13.0313508541 Y26.3667262937 Z0.7 F1500.0 E9.70671961922 G2 X37.9079530826 Y64.3900819871 Z0.7 F1500.0 E2.37390888935 G1 X101.132904477 Y36.0098495788 Z0.7 F1500.0 E3.62070036877 G3 X28.1329756846 Y21.7679004623 Z0.7 F1500.0 E3.88577824112 G3 X193.282816402 Y49.1997646002 Z0.7 F1500.0 E8.74645395758 G1 X129.558684816 Y153.707415048 Z0.7 F1500.0 E6.39495775620 G3 X168.771302215 Y126.262965091 Z0.7 F1500.0 E2.50057595338 G2 X61.2269773839 Y191.562687940 Z0.7 F1500.0 E6.57327932608 G1 X151.542470787 Y60.4367455957 Z0.7 F1500.0 E8.31841504956 G1 X74.5314279816 Y15.9686724294 Z0.7 F1500.0 E4.64601109751 G3 X193.226068270 Y107.397765795 Z0.7 F1500.0 E7.82762080052 G3 X60.5082476157 Y95.3139578432 Z0.7 F1500.0 E6.96251004422 G1 X90.2970800437 Y128.845052586 Z0.7 F1500.0 E2.34329220993 G2 X113.446884592 Y84.3746111870 Z0.7 F1500.0 E2.61930597481 G3 X23.7926242642 Y78.9751290978 Z0.7 F1500.0 E4.69246467638 G4 M220 S100 M221 S100 G91nG1 F1800 E-3 G1 F3000 Z10 G90 G1 X0 Y200 F1000 M104 S0 M140 S0 M106 S0 M107 M84
Some More Trial and Error...
I'm guessing that my biggest issue right now is the extrusion amount, which is being incorrectly calculated in my current code. Here is a fix that I did, including a layer height of 0.2.
Python Code:
<p>__author__ = "stejaraiulia"</p><p>import rhinoscriptsyntax as rs import random as r import math as m</p><p># create a random print generator # G12: clean the nozzle -> do this before and after? # G2/3: arc clockwise/counterclockwise</p><p>def generateCoordinatePoint(s, e) : #x_val = "X"+str(r.uniform(s, e)) #y_val = "Y"+str(r.uniform(s, e)) return (r.uniform(s, e), r.uniform(s, e)) #return (str(x_val) + " " + str(y_val)) def makeGcodeSpeed(frX, frY, toX, toY, speed): # E = nozzleRadius^2 * L / filamentRadius^2 l = m.sqrt((toX - frX)**2 + (toY - frY)**2) #calculate the distance numerator = (nozzleWidth/2 * l * layerHeight) denominator = (1.75 / 2) * (1.75 / 2) * m.pi e = numerator / denominator return e</p><p>startVal = 1 endVal = 3 instructions = [] nozzleWidth = 0.4 layerHeight = 0.2</p><p>xPos = 0 yPos = 0 zPos = 0.3 xPrev = 0 yPrev = 0</p><p># starting instructions from Cura software (http://www.emcu.eu/configure-ultimaker-cura-software-for-use-the-creality-3d-printer-model-ender-3/) instructions.append("M104 S200\n") # Set Extruder temperature instructions.append("M140 S50\n") # Set Heat Bed temperature instructions.append("M190 S50\n") # Wait for Heat Bed temperature instructions.append("M109 S200\n") # Wait for Extruder temperature instructions.append("G28\n") # auto-home before starting the print instructions.append("G92 E0\n") # Reset Extruder instructions.append("G1 Z5.0 F3000\n") # Move Z Axis up little to prevent scratching of Heat Bed instructions.append("G1 X0.1 Y20 Z" + str(zPos) + " F5000.0\n") # Move to start position instructions.append("G1 X0.1 Y200.0 Z0.3 F1500.0 E15\n") # Draw the first line instructions.append("G1 X0.4 Y200.0 Z0.3 F5000.0\n") # Move to side a little instructions.append("G1 X0.4 Y20 Z0.3 F1500.0 E30\n") # Draw the second line instructions.append("G92 E0\n") # Reset Extruder instructions.append("G1 Z0.3 F3000\n") # Move Z Axis up little to prevent scratching of Heat Bed</p><p># now, randomly generate g-code for layer drawing for i in range(lines): # go through based on total amount of commands (parameter) if (i <= 1 or i % linesPerLayer != 0): num = r.randint(startVal, endVal) coord = generateCoordinatePoint(10, 220) xPrev = xPos yPrev = yPos xPos = coord[0] yPos = coord[1] e = makeGcodeSpeed(xPrev, yPrev, xPos, yPos, 1500.0) inst = "G" + str(num) + " X" + str(xPos) + " Y" + str(yPos) + " Z" + str(zPos) + " F1500.0 E" + str(e) + "\n" instructions.append(inst) else: # move to the next layer instructions.append("G4 P500\n") # Wait for half a second zPos += layerHeight # increment z up one layer by adding the layerHeight value #instructions.append("G1 Z" + str(zPos) + " F5000.0\n") # move to start position #instructions.append("G1 X0.1 Y20 Z0.3 F5000.0\n")# move to start position</p><p># ending instructions from Cura software (http://www.emcu.eu/configure-ultimaker-cura-software-for-use-the-creality-3d-printer-model-ender-3/) instructions.append("G4\n") # Wait instructions.append("M220 S100\n") # Reset Speed factor override percentage to default (100%) instructions.append("M221 S100\n") # Reset Extrude factor override percentage to default (100%) instructions.append("G91n") # Set coordinates to relative instructions.append("G1 F1800 E-3\n") # Retract filament 3 mm to prevent oozing instructions.append("G1 F3000 Z10\n") # Move Z Axis up 10 mm to allow filament ooze freely instructions.append("G90\n") # Set coordinates to absolute instructions.append("G1 X0 Y200 F1000\n") # Move Heat Bed to the front for easy print removal instructions.append("M104 S0\n") # Turn off Extruder temperature instructions.append("M140 S0\n") # Turn off Heat Bed instructions.append("M106 S0\n") # Turn off Cooling Fan instructions.append("M107\n") # Turn off Fan instructions.append("M84\n") # Disable stepper motors</p><p> f = open("/Users/stejaraiulia/Desktop/draftOne.gcode", "w") str_instructions = ''.join(instructions) f.write(str_instructions) f.close()</p><p>print(str_instructions)</p>
G-code:
<p>M104 S200<br>M140 S50 M190 S50 M109 S200 G28 G92 E0 G1 Z5.0 F3000 G1 X0.1 Y20 Z0.3 F5000.0 G1 X0.1 Y200.0 Z0.3 F1500.0 E15 G1 X0.4 Y200.0 Z0.3 F5000.0 G1 X0.4 Y20 Z0.3 F1500.0 E30 G92 E0 G1 Z0.3 F3000 G2 X51.9521815682 Y192.948859677 Z0.3 F1500.0 E3.32303087929 G1 X153.786568644 Y180.957576467 Z0.3 F1500.0 E1.70521320036 G2 X69.3139244545 Y189.558288774 Z0.3 F1500.0 E1.4120484345 G3 X181.448290578 Y54.2988955776 Z0.3 F1500.0 E2.92184273720 G2 X72.8700230540 Y67.7149756818 Z0.3 F1500.0 E1.81939561605 G1 X105.769643331 Y208.586564086 Z0.3 F1500.0 E2.40574429944 G3 X207.957714165 Y148.153895414 Z0.3 F1500.0 E1.97432657956 G2 X50.7560506146 Y198.435549708 Z0.3 F1500.0 E2.74474756940 G3 X96.7997520853 Y44.2365449345 Z0.3 F1500.0 E2.67621944563 G3 X194.554175882 Y93.9507255157 Z0.3 F1500.0 E1.82381330499 G3 X50.8447300540 Y80.1821520861 Z0.3 F1500.0 E2.40084146771 G3 X176.176521465 Y55.8379501841 Z0.3 F1500.0 E2.12323035587 G3 X124.372507194 Y192.818072079 Z0.3 F1500.0 E2.43545108590 G2 X78.3610876331 Y118.365048597 Z0.3 F1500.0 E1.45551605105 G1 X217.176153654 Y166.957820897 Z0.3 F1500.0 E2.44585725599 G2 X186.710583072 Y194.290708669 Z0.3 F1500.0 E0.680663147044 G2 X79.6955862304 Y85.8842996074 Z0.3 F1500.0 E2.53324345715 G2 X208.278049683 Y159.774484767 Z0.3 F1500.0 E2.46625692038 G3 X180.878285895 Y41.5553303082 Z0.3 F1500.0 E2.01810618098 G1 X88.3142598215 Y101.424410712 Z0.3 F1500.0 E1.83326455899 G3 X205.937278151 Y165.604834304 Z0.3 F1500.0 E2.22832363166 G1 X104.699696719 Y186.676481514 Z0.3 F1500.0 E1.71966977966 G2 X203.510682410 Y90.1215449964 Z0.3 F1500.0 E2.29750667375 G3 X207.915429377 Y122.327863061 Z0.3 F1500.0 E0.540579196046 G3 X179.630816425 Y190.084331553 Z0.3 F1500.0 E1.22103187390 G3 X36.9894515592 Y78.6892502386 Z0.3 F1500.0 E3.00978601180 G1 X79.2943989439 Y205.157450891 Z0.3 F1500.0 E2.21772499689 G1 X121.401779123 Y215.377371743 Z0.3 F1500.0 E0.720578781609 G1 X20.3724190372 Y15.2988914634 Z0.3 F1500.0 E3.72744813465 G1 X111.709476083 Y110.349454178 Z0.3 F1500.0 E2.19221051321 G3 X16.2502059479 Y87.1237821469 Z0.3 F1500.0 E1.63380609386 G3 X91.6802125758 Y23.2310255978 Z0.3 F1500.0 E1.64393666009 G1 X31.4095774500 Y21.4182710378 Z0.3 F1500.0 E1.00275798208 G1 X142.838360088 Y100.273258718 Z0.3 F1500.0 E2.27014021889 G2 X21.3837317724 Y126.184607672 Z0.3 F1500.0 E2.06525250889 G3 X186.181432893 Y106.121627133 Z0.3 F1500.0 E2.76083190769 G2 X214.242360082 Y94.7130343817 Z0.3 F1500.0 E0.503748771082 G2 X197.945035901 Y52.1585499856 Z0.3 F1500.0 E0.757806999354 G3 X59.0359647372 Y93.0611088158 Z0.3 F1500.0 E2.40813193468 G2 X154.058404596 Y82.8854705561 Z0.3 F1500.0 E1.58926445059 G2 X46.3816512900 Y128.613680764 Z0.3 F1500.0 E1.94545865368 G2 X178.936651409 Y200.255654408 Z0.3 F1500.0 E2.50575997136 G3 X183.953563450 Y98.4557558048 Z0.3 F1500.0 E1.69499378244 G3 X168.183581485 Y21.3458845041 Z0.3 F1500.0 E1.30888505355 G1 X66.7821676626 Y113.777457229 Z0.3 F1500.0 E2.28176661446 G1 X29.0010292358 Y219.973024539 Z0.3 F1500.0 E1.87447589199 G2 X215.916902720 Y155.604578203 Z0.3 F1500.0 E3.28757720921 G3 X67.3659581866 Y42.7149030124 Z0.3 F1500.0 E3.10280972090 G3 X137.635443332 Y127.588453209 Z0.3 F1500.0 E1.83242819954 G3 X163.337187193 Y70.3840669504 Z0.3 F1500.0 E1.04292156720 G4 P500 G3 X88.6680360079 Y134.742995288 Z0.5 F1500.0 E1.63935303615 G3 X190.484915166 Y132.981068830 Z0.5 F1500.0 E1.69347508083 G1 X196.748952543 Y179.754735377 Z0.5 F1500.0 E0.784793668701 G3 X90.6677801553 Y189.674177709 Z0.5 F1500.0 E1.77183286335 G1 X189.519386530 Y158.993911030 Z0.5 F1500.0 E1.72126572191 G3 X161.669855629 Y159.616108766 Z0.5 F1500.0 E0.46325515035 G2 X188.127713266 Y52.6038367508 Z0.5 F1500.0 E1.83320714837 G1 X61.3875931632 Y131.131765613 Z0.5 F1500.0 E2.47948081040 G2 X178.298774184 Y30.2078134927 Z0.5 F1500.0 E2.56846363767 G3 X199.890949283 Y110.891670346 Z0.5 F1500.0 E1.38899464824 G1 X150.853574967 Y144.637552884 Z0.5 F1500.0 E0.989935925647 G1 X114.180422495 Y91.0739556253 Z0.5 F1500.0 E1.07954363057 G1 X109.428668662 Y100.188518392 Z0.5 F1500.0 E0.170937695804 G2 X18.6269549592 Y135.097995062 Z0.5 F1500.0 E1.61779214685 G3 X96.4796082236 Y196.251919954 Z0.5 F1500.0 E1.64636309091 G3 X167.367780174 Y92.0518220596 Z0.5 F1500.0 E2.09583676723 G1 X24.1558246912 Y95.0222386160 Z0.5 F1500.0 E2.38213672892 G3 X198.326235998 Y40.0082025949 Z0.5 F1500.0 E3.03752070313 G2 X181.463947987 Y181.114092946 Z0.5 F1500.0 E2.36329637671 G1 X144.876015550 Y146.228423771 Z0.5 F1500.0 E0.840713110725 G2 X130.787402212 Y188.797951974 Z0.5 F1500.0 E0.745697449125 G3 X134.388783240 Y202.209526678 Z0.5 F1500.0 E0.23093666554 G3 X44.7810484156 Y24.4145669714 Z0.5 F1500.0 E3.31103741621 G3 X111.188418663 Y41.4184916629 Z0.5 F1500.0 E1.13998746281 G1 X14.7414231759 Y174.998375522 Z0.5 F1500.0 E2.73995734403 G2 X114.435987014 Y14.9466153220 Z0.5 F1500.0 E3.13579632982 G2 X214.371320401 Y45.9905928512 Z0.5 F1500.0 E1.74027116512 G2 X130.519099460 Y210.318453370 Z0.5 F1500.0 E3.06800366232 G3 X45.5510869875 Y46.7167085543 Z0.5 F1500.0 E3.06576068559 G2 X92.9118556536 Y148.478676756 Z0.5 F1500.0 E1.86661233834 G1 X65.7354545155 Y110.223510492 Z0.5 F1500.0 E0.780376355387 G2 X12.0623191611 Y101.981467375 Z0.5 F1500.0 E0.903050448354 G1 X186.265862101 Y182.617345172 Z0.5 F1500.0 E3.19232411631 G2 X149.471407513 Y186.389923186 Z0.5 F1500.0 E0.615102166954 G3 X139.897463959 Y140.621039384 Z0.5 F1500.0 E0.777613692025 G2 X184.103706171 Y38.6376453087 Z0.5 F1500.0 E1.84846806415 G3 X26.9732285771 Y124.524766322 Z0.5 F1500.0 E2.97797032073 G2 X78.4923601117 Y30.5442146757 Z0.5 F1500.0 E1.78233403304 G2 X203.408214415 Y170.260753122 Z0.5 F1500.0 E3.11673739479 G1 X155.032850745 Y23.9673254379 Z0.5 F1500.0 E2.56243076379 G3 X115.261087760 Y198.851847183 Z0.5 F1500.0 E2.98260106070 G2 X112.744859565 Y177.305957851 Z0.5 F1500.0 E0.360744748042 G1 X66.6220258694 Y137.246370659 Z0.5 F1500.0 E1.01594419294 G3 X137.033684642 Y218.936472591 Z0.5 F1500.0 E1.79351052783 G3 X103.902140732 Y219.222656398 Z0.5 F1500.0 E0.551000366748 G2 X145.580978585 Y108.691319516 Z0.5 F1500.0 E1.96448207678 G2 X168.224011759 Y189.680323127 Z0.5 F1500.0 E1.39850124027 G1 X19.6905673979 Y116.792847761 Z0.5 F1500.0 E2.75149822808 G3 X63.0609094988 Y109.027236851 Z0.5 F1500.0 E0.732722225714 G4 M220 S100 M221 S100 G91nG1 F1800 E-3 G1 F3000 Z10 G90 G1 X0 Y200 F1000 M104 S0 M140 S0 M106 S0 M107 M84</p>
This worked much better than my previous attempts. However, there is still not enough filament being extruded (the numbers are way too low, from what I see in my G-Code compared with other generated G-Code from previous projects sliced with Cura). I'm noticing that an extrusion of 30 is used for the lines being drawn on the side of my printer before the print starts (lines 8-11 in my G-Code script). These two lines are successful, so I tried hardcoding the E value (30) just to see if this changes my issue. While this did not change the majority of the lines drawn, the first 3 were actually successfully extruded. I'm wondering what I am missing here.
Some more things to try:
- Restricting the drawing space. Right now, I'm using the entire bed area as viable X Y coordinates for the marks. This might introduce too much spread in the drawing, which can cause issues in terms of adhesion.
- Limit the drawing to lines only (G1). Then introduce curves.
- Keep debugging extrusion calculation.
- Introduce retraction, according to Sam's suggestion via slack. I'm wondering if this will solve my problem, but it looks right now that the issue is in extrusion volume.
After making adjustments to the drawing space and limiting the drawing to lines only (G1), I am still finding the same results. Going to look into the extrusion calculation and retraction more.
Incorporate a Base "canvas"
After a lot of trial and error, I asked Sam about her way of approaching the retraction and extraction using G-Code. She mentioned that the problem looks like an adhesion issue and presented the idea of a base layer, similar to a "canvas." I really like this idea, so I incorporated it into my script to see if it fixes the issue.
Only problem: still having adhesion issues even when I'm trying to build the square.
Python Script:
<p>__author__ = "stejaraiulia"</p><p>import rhinoscriptsyntax as rs import random as r import math as m</p><p># create a random print generator # G12: clean the nozzle -> do this before and after? # G2/3: arc clockwise/counterclockwise</p><p>def generateCoordinatePoint(s, e) : #x_val = "X"+str(r.uniform(s, e)) #y_val = "Y"+str(r.uniform(s, e)) return (r.uniform(s, e), r.uniform(s, e)) #return (str(x_val) + " " + str(y_val)) def makeGcodeSpeed(frX, frY, toX, toY, speed): # E = nozzleRadius^2 * L / filamentRadius^2 l = m.sqrt((toX - frX)**2 + (toY - frY)**2) #calculate the distance numerator = (nozzleWidth/2 * l * layerHeight) denominator = (1.75 / 2) * (1.75 / 2) * m.pi e = numerator / denominator return e</p><p>startVal = 1 endVal = 3 instructions = [] nozzleWidth = 0.4 layerHeight = 0.2</p><p>xPos = 0 yPos = 0 zPos = 0.3 xPrev = 0 yPrev = 0</p><p># size of the drawing space -> 50-100 in the x and y planes dimStart = 50 dimEnd = 100</p><p># starting instructions from Cura software (http://www.emcu.eu/configure-ultimaker-cura-software-for-use-the-creality-3d-printer-model-ender-3/) instructions.append("M104 S200\n") # Set Extruder temperature instructions.append("M140 S50\n") # Set Heat Bed temperature instructions.append("M190 S50\n") # Wait for Heat Bed temperature instructions.append("M109 S200\n") # Wait for Extruder temperature instructions.append("G28\n") # auto-home before starting the print instructions.append("G92 E0\n") # Reset Extruder instructions.append("G1 Z5.0 F3000\n") # Move Z Axis up little to prevent scratching of Heat Bed instructions.append("G1 X0.1 Y20 Z" + str(zPos) + " F5000.0\n") # Move to start position instructions.append("G1 X0.1 Y200.0 Z0.3 F1500.0 E15\n") # Draw the first line instructions.append("G1 X0.4 Y200.0 Z0.3 F5000.0\n") # Move to side a little instructions.append("G1 X0.4 Y20 Z0.3 F1500.0 E30\n") # Draw the second line instructions.append("G92 E0\n") # Reset Extruder instructions.append("G1 Z5.0 F3000\n") # Move Z Axis up little to prevent scratching of Heat Bed</p><p># build a "canvas" using the drawing dimensions # bounding box instructions.append("G1 X" + str(dimStart) + " Y" + str(dimStart) + " F3000\n") # move the extruder to starting position (50, 50) instructions.append("G1 Z0.3\n") #lower the extruder to start printing instructions.append("G1 X" + str(dimStart) + " Y" + str(dimEnd) + " Z0.3 F1500.0 E30\n") #draw first side of square instructions.append("G1 X" + str(dimEnd) + " Y" + str(dimEnd) + " Z0.3 F1500.0 E30\n") # draw connecting side instructions.append("G1 X" + str(dimEnd) + " Y" + str(dimStart) + " Z0.3 F1500.0 E30\n") # draw connecting side instructions.append("G1 X" + str(dimStart) + " Y" + str(dimStart) + " Z0.3 F1500.0 E30\n") # finish the square instructions.append("G1 Z5.0 F3000\n") # move z axis up to travel to new starting position based on where the drawing dimensions are</p><p># now, fill the square stepSize = 0.3 length = dimEnd - dimStart reps = int(length/stepSize) workingX = dimStart + stepSize</p><p>instructions.append("G1 X" + str(workingX) + " Y" + str(dimStart) + " Z0.3 F5000.0\n") # move to starting position, don't extrude for i in range(reps): instructions.append("G1 X" + str(workingX) + " Y" + str(dimEnd) + " Z0.3 F1500.0 E30\n") workingX += stepSize instructions.append("G1 X" + str(workingX) + " Y" + str(dimStart) + " Z0.3 F1500.0 E30\n") workingX += stepSize</p><p>instructions.append("G1 Z5.0 F3000\n") # move the extruder head up instructions.append("G1 X" + str(dimStart) + " Y" + str(dimStart) + " Z0.3 F5000.0\n") #travel to the starting position again instructions.append("G1 Z0.3 F3000\n") # move the extruder head down to start the drawing # now, randomly generate g-code for layer drawing for i in range(lines): # go through based on total amount of commands (parameter) if (i <= 1 or i % linesPerLayer != 0): #num = r.randint(startVal, endVal) num = 1 coord = generateCoordinatePoint(dimStart, dimEnd) #restrict the drawing space xPrev = xPos yPrev = yPos xPos = coord[0] yPos = coord[1] e = makeGcodeSpeed(xPrev, yPrev, xPos, yPos, 1500.0) #e = 30 inst = "G" + str(num) + " X" + str(xPos) + " Y" + str(yPos) + " Z" + str(zPos) + " F1500.0 E" + str(e) + "\n" instructions.append(inst) else: # move to the next layer instructions.append("G4 P2000\n") # Wait for 2 seconds zPos += layerHeight # increment z up one layer by adding the layerHeight value #instructions.append("G1 Z" + str(zPos) + " F5000.0\n") # move to start position #instructions.append("G1 X0.1 Y20 Z0.3 F5000.0\n")# move to start position</p><p># ending instructions from Cura software (http://www.emcu.eu/configure-ultimaker-cura-software-for-use-the-creality-3d-printer-model-ender-3/) instructions.append("G4\n") # Wait instructions.append("M220 S100\n") # Reset Speed factor override percentage to default (100%) instructions.append("M221 S100\n") # Reset Extrude factor override percentage to default (100%) instructions.append("G91n") # Set coordinates to relative instructions.append("G1 F1800 E-3\n") # Retract filament 3 mm to prevent oozing instructions.append("G1 F3000 Z10\n") # Move Z Axis up 10 mm to allow filament ooze freely instructions.append("G90\n") # Set coordinates to absolute instructions.append("G1 X0 Y200 F1000\n") # Move Heat Bed to the front for easy print removal instructions.append("M104 S0\n") # Turn off Extruder temperature instructions.append("M140 S0\n") # Turn off Heat Bed instructions.append("M106 S0\n") # Turn off Cooling Fan instructions.append("M107\n") # Turn off Fan instructions.append("M84\n") # Disable stepper motors</p><p> f = open("/Users/stejaraiulia/Desktop/marks.gcode", "w") str_instructions = ''.join(instructions) f.write(str_instructions) f.close()</p><p>print(str_instructions)</p>
G-Code:
<p>M104 S200<br>M140 S50 M190 S50 M109 S200 G28 G92 E0 G1 Z5.0 F3000 G1 X0.1 Y20 Z0.3 F5000.0 G1 X0.1 Y200.0 Z0.3 F1500.0 E15 G1 X0.4 Y200.0 Z0.3 F5000.0 G1 X0.4 Y20 Z0.3 F1500.0 E30 G92 E0 G1 Z5.0 F3000 G1 X50 Y50 F3000 G1 Z0.3 G1 X50 Y100 Z0.3 F1500.0 E30 G1 X100 Y100 Z0.3 F1500.0 E30</p><p>G1 X100 Y50 Z0.3 F1500.0 E30 G1 X50 Y50 Z0.3 F1500.0 E30</p><p>G1 Z5.0 F3000 G1 X50.3 Y50 Z0.3 F5000.0 G1 X50.3 Y100 Z0.3 F1500.0 E30 G1 X50.6 Y50 Z0.3 F1500.0 E30 G1 X50.9 Y100 Z0.3 F1500.0 E30 G1 X51.2 Y50 Z0.3 F1500.0 E30 G1 X51.5 Y100 Z0.3 F1500.0 E30 G1 X51.8 Y50 Z0.3 F1500.0 E30 G1 X52.1 Y100 Z0.3 F1500.0 E30 G1 X52.4 Y50 Z0.3 F1500.0 E30 G1 X52.7 Y100 Z0.3 F1500.0 E30 G1 X53.0 Y50 Z0.3 F1500.0 E30 G1 X53.3 Y100 Z0.3 F1500.0 E30 G1 X53.6 Y50 Z0.3 F1500.0 E30 G1 X53.9 Y100 Z0.3 F1500.0 E30 G1 X54.2 Y50 Z0.3 F1500.0 E30 G1 X54.5 Y100 Z0.3 F1500.0 E30 G1 X54.8 Y50 Z0.3 F1500.0 E30 G1 X55.1 Y100 Z0.3 F1500.0 E30 G1 X55.4 Y50 Z0.3 F1500.0 E30 G1 X55.7 Y100 Z0.3 F1500.0 E30 G1 X56.0 Y50 Z0.3 F1500.0 E30 G1 X56.3 Y100 Z0.3 F1500.0 E30 G1 X56.6 Y50 Z0.3 F1500.0 E30 G1 X56.9 Y100 Z0.3 F1500.0 E30 G1 X57.2 Y50 Z0.3 F1500.0 E30 G1 X57.5 Y100 Z0.3 F1500.0 E30 G1 X57.8 Y50 Z0.3 F1500.0 E30 G1 X58.1 Y100 Z0.3 F1500.0 E30 G1 X58.4 Y50 Z0.3 F1500.0 E30 G1 X58.7 Y100 Z0.3 F1500.0 E30 G1 X59.0 Y50 Z0.3 F1500.0 E30 G1 X59.3 Y100 Z0.3 F1500.0 E30 G1 X59.6 Y50 Z0.3 F1500.0 E30 G1 X59.9 Y100 Z0.3 F1500.0 E30 G1 X60.2 Y50 Z0.3 F1500.0 E30 G1 X60.5 Y100 Z0.3 F1500.0 E30 G1 X60.8 Y50 Z0.3 F1500.0 E30 G1 X61.1 Y100 Z0.3 F1500.0 E30 G1 X61.4 Y50 Z0.3 F1500.0 E30 G1 X61.7 Y100 Z0.3 F1500.0 E30 G1 X62.0 Y50 Z0.3 F1500.0 E30 G1 X62.3 Y100 Z0.3 F1500.0 E30 G1 X62.6 Y50 Z0.3 F1500.0 E30 G1 X62.9 Y100 Z0.3 F1500.0 E30 G1 X63.2 Y50 Z0.3 F1500.0 E30 G1 X63.5 Y100 Z0.3 F1500.0 E30 G1 X63.8 Y50 Z0.3 F1500.0 E30 G1 X64.1 Y100 Z0.3 F1500.0 E30 G1 X64.4 Y50 Z0.3 F1500.0 E30 G1 X64.7 Y100 Z0.3 F1500.0 E30 G1 X65.0 Y50 Z0.3 F1500.0 E30 G1 X65.3 Y100 Z0.3 F1500.0 E30 G1 X65.6 Y50 Z0.3 F1500.0 E30 G1 X65.9 Y100 Z0.3 F1500.0 E30 G1 X66.2 Y50 Z0.3 F1500.0 E30 G1 X66.5 Y100 Z0.3 F1500.0 E30 G1 X66.8 Y50 Z0.3 F1500.0 E30 G1 X67.1 Y100 Z0.3 F1500.0 E30 G1 X67.4 Y50 Z0.3 F1500.0 E30 G1 X67.7 Y100 Z0.3 F1500.0 E30 G1 X68.0 Y50 Z0.3 F1500.0 E30 G1 X68.3 Y100 Z0.3 F1500.0 E30 G1 X68.6 Y50 Z0.3 F1500.0 E30 G1 X68.9 Y100 Z0.3 F1500.0 E30 G1 X69.2 Y50 Z0.3 F1500.0 E30 G1 X69.5 Y100 Z0.3 F1500.0 E30 G1 X69.8 Y50 Z0.3 F1500.0 E30 G1 X70.1 Y100 Z0.3 F1500.0 E30 G1 X70.4 Y50 Z0.3 F1500.0 E30 G1 X70.7 Y100 Z0.3 F1500.0 E30 G1 X71.0 Y50 Z0.3 F1500.0 E30 G1 X71.3 Y100 Z0.3 F1500.0 E30 G1 X71.6 Y50 Z0.3 F1500.0 E30 G1 X71.9 Y100 Z0.3 F1500.0 E30 G1 X72.2 Y50 Z0.3 F1500.0 E30 G1 X72.5 Y100 Z0.3 F1500.0 E30 G1 X72.8 Y50 Z0.3 F1500.0 E30 G1 X73.1 Y100 Z0.3 F1500.0 E30 G1 X73.4 Y50 Z0.3 F1500.0 E30 G1 X73.7 Y100 Z0.3 F1500.0 E30 G1 X74.0 Y50 Z0.3 F1500.0 E30 G1 X74.3 Y100 Z0.3 F1500.0 E30 G1 X74.6 Y50 Z0.3 F1500.0 E30 G1 X74.9 Y100 Z0.3 F1500.0 E30 G1 X75.2 Y50 Z0.3 F1500.0 E30 G1 X75.5 Y100 Z0.3 F1500.0 E30 G1 X75.8 Y50 Z0.3 F1500.0 E30 G1 X76.1 Y100 Z0.3 F1500.0 E30 G1 X76.4 Y50 Z0.3 F1500.0 E30 G1 X76.7 Y100 Z0.3 F1500.0 E30 G1 X77.0 Y50 Z0.3 F1500.0 E30 G1 X77.3 Y100 Z0.3 F1500.0 E30 G1 X77.6 Y50 Z0.3 F1500.0 E30 G1 X77.9 Y100 Z0.3 F1500.0 E30 G1 X78.2 Y50 Z0.3 F1500.0 E30 G1 X78.5 Y100 Z0.3 F1500.0 E30 G1 X78.8 Y50 Z0.3 F1500.0 E30 G1 X79.1 Y100 Z0.3 F1500.0 E30 G1 X79.4 Y50 Z0.3 F1500.0 E30 G1 X79.7 Y100 Z0.3 F1500.0 E30 G1 X80.0 Y50 Z0.3 F1500.0 E30 G1 X80.3 Y100 Z0.3 F1500.0 E30 G1 X80.6 Y50 Z0.3 F1500.0 E30 G1 X80.9 Y100 Z0.3 F1500.0 E30 G1 X81.2 Y50 Z0.3 F1500.0 E30 G1 X81.5 Y100 Z0.3 F1500.0 E30 G1 X81.8 Y50 Z0.3 F1500.0 E30 G1 X82.1 Y100 Z0.3 F1500.0 E30 G1 X82.4 Y50 Z0.3 F1500.0 E30 G1 X82.7 Y100 Z0.3 F1500.0 E30 G1 X83.0 Y50 Z0.3 F1500.0 E30 G1 X83.3 Y100 Z0.3 F1500.0 E30 G1 X83.6 Y50 Z0.3 F1500.0 E30 G1 X83.9 Y100 Z0.3 F1500.0 E30 G1 X84.2 Y50 Z0.3 F1500.0 E30 G1 X84.5 Y100 Z0.3 F1500.0 E30 G1 X84.8 Y50 Z0.3 F1500.0 E30 G1 X85.1 Y100 Z0.3 F1500.0 E30 G1 X85.4 Y50 Z0.3 F1500.0 E30 G1 X85.7 Y100 Z0.3 F1500.0 E30 G1 X86.0 Y50 Z0.3 F1500.0 E30 G1 X86.3 Y100 Z0.3 F1500.0 E30 G1 X86.6 Y50 Z0.3 F1500.0 E30 G1 X86.9 Y100 Z0.3 F1500.0 E30 G1 X87.2 Y50 Z0.3 F1500.0 E30 G1 X87.5 Y100 Z0.3 F1500.0 E30 G1 X87.8 Y50 Z0.3 F1500.0 E30 G1 X88.1 Y100 Z0.3 F1500.0 E30 G1 X88.4 Y50 Z0.3 F1500.0 E30 G1 X88.7 Y100 Z0.3 F1500.0 E30 G1 X89.0 Y50 Z0.3 F1500.0 E30 G1 X89.3 Y100 Z0.3 F1500.0 E30 G1 X89.6 Y50 Z0.3 F1500.0 E30 G1 X89.9 Y100 Z0.3 F1500.0 E30 G1 X90.2 Y50 Z0.3 F1500.0 E30 G1 X90.5 Y100 Z0.3 F1500.0 E30 G1 X90.8 Y50 Z0.3 F1500.0 E30 G1 X91.1 Y100 Z0.3 F1500.0 E30 G1 X91.4 Y50 Z0.3 F1500.0 E30 G1 X91.7 Y100 Z0.3 F1500.0 E30 G1 X92.0 Y50 Z0.3 F1500.0 E30 G1 X92.3 Y100 Z0.3 F1500.0 E30 G1 X92.6 Y50 Z0.3 F1500.0 E30 G1 X92.9 Y100 Z0.3 F1500.0 E30 G1 X93.2 Y50 Z0.3 F1500.0 E30 G1 X93.5 Y100 Z0.3 F1500.0 E30 G1 X93.8 Y50 Z0.3 F1500.0 E30 G1 X94.1 Y100 Z0.3 F1500.0 E30 G1 X94.4 Y50 Z0.3 F1500.0 E30 G1 X94.7 Y100 Z0.3 F1500.0 E30 G1 X95.0 Y50 Z0.3 F1500.0 E30 G1 X95.3 Y100 Z0.3 F1500.0 E30 G1 X95.6 Y50 Z0.3 F1500.0 E30 G1 X95.9 Y100 Z0.3 F1500.0 E30 G1 X96.2 Y50 Z0.3 F1500.0 E30 G1 X96.5 Y100 Z0.3 F1500.0 E30 G1 X96.8 Y50 Z0.3 F1500.0 E30 G1 X97.1 Y100 Z0.3 F1500.0 E30 G1 X97.4 Y50 Z0.3 F1500.0 E30 G1 X97.7 Y100 Z0.3 F1500.0 E30 G1 X98.0 Y50 Z0.3 F1500.0 E30 G1 X98.3 Y100 Z0.3 F1500.0 E30 G1 X98.6 Y50 Z0.3 F1500.0 E30 G1 X98.9 Y100 Z0.3 F1500.0 E30 G1 X99.2 Y50 Z0.3 F1500.0 E30 G1 X99.5 Y100 Z0.3 F1500.0 E30 G1 X99.8 Y50 Z0.3 F1500.0 E30 G1 X100.1 Y100 Z0.3 F1500.0 E30 G1 X100.4 Y50 Z0.3 F1500.0 E30 G1 X100.7 Y100 Z0.3 F1500.0 E30 G1 X101.0 Y50 Z0.3 F1500.0 E30 G1 X101.3 Y100 Z0.3 F1500.0 E30 G1 X101.6 Y50 Z0.3 F1500.0 E30 G1 X101.9 Y100 Z0.3 F1500.0 E30 G1 X102.2 Y50 Z0.3 F1500.0 E30 G1 X102.5 Y100 Z0.3 F1500.0 E30 G1 X102.800000000 Y50 Z0.3 F1500.0 E30 G1 X103.100000000 Y100 Z0.3 F1500.0 E30 G1 X103.400000000 Y50 Z0.3 F1500.0 E30 G1 X103.700000000 Y100 Z0.3 F1500.0 E30 G1 X104.000000000 Y50 Z0.3 F1500.0 E30 G1 X104.300000000 Y100 Z0.3 F1500.0 E30 G1 X104.600000000 Y50 Z0.3 F1500.0 E30 G1 X104.900000000 Y100 Z0.3 F1500.0 E30 G1 X105.200000000 Y50 Z0.3 F1500.0 E30 G1 X105.500000000 Y100 Z0.3 F1500.0 E30 G1 X105.800000000 Y50 Z0.3 F1500.0 E30 G1 X106.100000000 Y100 Z0.3 F1500.0 E30 G1 X106.400000000 Y50 Z0.3 F1500.0 E30 G1 X106.700000000 Y100 Z0.3 F1500.0 E30 G1 X107.000000000 Y50 Z0.3 F1500.0 E30 G1 X107.300000000 Y100 Z0.3 F1500.0 E30 G1 X107.600000000 Y50 Z0.3 F1500.0 E30 G1 X107.900000000 Y100 Z0.3 F1500.0 E30 G1 X108.200000000 Y50 Z0.3 F1500.0 E30 G1 X108.500000000 Y100 Z0.3 F1500.0 E30 G1 X108.800000000 Y50 Z0.3 F1500.0 E30 G1 X109.100000000 Y100 Z0.3 F1500.0 E30 G1 X109.400000000 Y50 Z0.3 F1500.0 E30 G1 X109.700000000 Y100 Z0.3 F1500.0 E30 G1 X110.000000000 Y50 Z0.3 F1500.0 E30 G1 X110.300000000 Y100 Z0.3 F1500.0 E30 G1 X110.600000000 Y50 Z0.3 F1500.0 E30 G1 X110.900000000 Y100 Z0.3 F1500.0 E30 G1 X111.200000000 Y50 Z0.3 F1500.0 E30 G1 X111.500000000 Y100 Z0.3 F1500.0 E30 G1 X111.800000000 Y50 Z0.3 F1500.0 E30 G1 X112.100000000 Y100 Z0.3 F1500.0 E30 G1 X112.400000000 Y50 Z0.3 F1500.0 E30 G1 X112.700000000 Y100 Z0.3 F1500.0 E30 G1 X113.000000000 Y50 Z0.3 F1500.0 E30 G1 X113.300000000 Y100 Z0.3 F1500.0 E30 G1 X113.600000000 Y50 Z0.3 F1500.0 E30 G1 X113.900000000 Y100 Z0.3 F1500.0 E30 G1 X114.200000000 Y50 Z0.3 F1500.0 E30 G1 X114.500000000 Y100 Z0.3 F1500.0 E30 G1 X114.800000000 Y50 Z0.3 F1500.0 E30 G1 X115.100000000 Y100 Z0.3 F1500.0 E30 G1 X115.400000000 Y50 Z0.3 F1500.0 E30 G1 X115.700000000 Y100 Z0.3 F1500.0 E30 G1 X116.000000000 Y50 Z0.3 F1500.0 E30 G1 X116.300000000 Y100 Z0.3 F1500.0 E30 G1 X116.600000000 Y50 Z0.3 F1500.0 E30 G1 X116.900000000 Y100 Z0.3 F1500.0 E30 G1 X117.200000000 Y50 Z0.3 F1500.0 E30 G1 X117.500000000 Y100 Z0.3 F1500.0 E30 G1 X117.800000000 Y50 Z0.3 F1500.0 E30 G1 X118.100000000 Y100 Z0.3 F1500.0 E30 G1 X118.400000000 Y50 Z0.3 F1500.0 E30 G1 X118.700000000 Y100 Z0.3 F1500.0 E30 G1 X119.000000000 Y50 Z0.3 F1500.0 E30 G1 X119.300000000 Y100 Z0.3 F1500.0 E30 G1 X119.600000000 Y50 Z0.3 F1500.0 E30 G1 X119.900000000 Y100 Z0.3 F1500.0 E30 G1 X120.200000000 Y50 Z0.3 F1500.0 E30 G1 X120.500000000 Y100 Z0.3 F1500.0 E30 G1 X120.800000000 Y50 Z0.3 F1500.0 E30 G1 X121.100000000 Y100 Z0.3 F1500.0 E30 G1 X121.400000000 Y50 Z0.3 F1500.0 E30 G1 X121.700000000 Y100 Z0.3 F1500.0 E30 G1 X122.000000000 Y50 Z0.3 F1500.0 E30 G1 X122.300000000 Y100 Z0.3 F1500.0 E30 G1 X122.600000000 Y50 Z0.3 F1500.0 E30 G1 X122.900000000 Y100 Z0.3 F1500.0 E30 G1 X123.200000000 Y50 Z0.3 F1500.0 E30 G1 X123.500000000 Y100 Z0.3 F1500.0 E30 G1 X123.800000000 Y50 Z0.3 F1500.0 E30 G1 X124.100000000 Y100 Z0.3 F1500.0 E30 G1 X124.400000000 Y50 Z0.3 F1500.0 E30 G1 X124.700000000 Y100 Z0.3 F1500.0 E30 G1 X125.000000000 Y50 Z0.3 F1500.0 E30 G1 X125.300000000 Y100 Z0.3 F1500.0 E30 G1 X125.600000000 Y50 Z0.3 F1500.0 E30 G1 X125.900000000 Y100 Z0.3 F1500.0 E30 G1 X126.200000000 Y50 Z0.3 F1500.0 E30 G1 X126.500000000 Y100 Z0.3 F1500.0 E30 G1 X126.800000000 Y50 Z0.3 F1500.0 E30 G1 X127.100000000 Y100 Z0.3 F1500.0 E30 G1 X127.400000000 Y50 Z0.3 F1500.0 E30 G1 X127.700000000 Y100 Z0.3 F1500.0 E30 G1 X128.000000000 Y50 Z0.3 F1500.0 E30 G1 X128.300000000 Y100 Z0.3 F1500.0 E30 G1 X128.600000000 Y50 Z0.3 F1500.0 E30 G1 X128.900000000 Y100 Z0.3 F1500.0 E30 G1 X129.200000000 Y50 Z0.3 F1500.0 E30 G1 X129.500000000 Y100 Z0.3 F1500.0 E30 G1 X129.800000000 Y50 Z0.3 F1500.0 E30 G1 X130.100000000 Y100 Z0.3 F1500.0 E30 G1 X130.400000000 Y50 Z0.3 F1500.0 E30 G1 X130.700000000 Y100 Z0.3 F1500.0 E30 G1 X131.000000000 Y50 Z0.3 F1500.0 E30 G1 X131.300000000 Y100 Z0.3 F1500.0 E30 G1 X131.600000000 Y50 Z0.3 F1500.0 E30 G1 X131.900000000 Y100 Z0.3 F1500.0 E30 G1 X132.200000000 Y50 Z0.3 F1500.0 E30 G1 X132.500000000 Y100 Z0.3 F1500.0 E30 G1 X132.800000000 Y50 Z0.3 F1500.0 E30 G1 X133.100000000 Y100 Z0.3 F1500.0 E30 G1 X133.400000000 Y50 Z0.3 F1500.0 E30 G1 X133.700000000 Y100 Z0.3 F1500.0 E30 G1 X134.000000000 Y50 Z0.3 F1500.0 E30 G1 X134.300000000 Y100 Z0.3 F1500.0 E30 G1 X134.6 Y50 Z0.3 F1500.0 E30 G1 X134.9 Y100 Z0.3 F1500.0 E30 G1 X135.2 Y50 Z0.3 F1500.0 E30 G1 X135.5 Y100 Z0.3 F1500.0 E30 G1 X135.8 Y50 Z0.3 F1500.0 E30 G1 X136.1 Y100 Z0.3 F1500.0 E30 G1 X136.4 Y50 Z0.3 F1500.0 E30 G1 X136.7 Y100 Z0.3 F1500.0 E30 G1 X137.0 Y50 Z0.3 F1500.0 E30 G1 X137.3 Y100 Z0.3 F1500.0 E30 G1 X137.6 Y50 Z0.3 F1500.0 E30 G1 X137.9 Y100 Z0.3 F1500.0 E30 G1 X138.2 Y50 Z0.3 F1500.0 E30 G1 X138.5 Y100 Z0.3 F1500.0 E30 G1 X138.8 Y50 Z0.3 F1500.0 E30 G1 X139.1 Y100 Z0.3 F1500.0 E30 G1 X139.4 Y50 Z0.3 F1500.0 E30 G1 X139.7 Y100 Z0.3 F1500.0 E30 G1 X140.0 Y50 Z0.3 F1500.0 E30 G1 X140.3 Y100 Z0.3 F1500.0 E30 G1 X140.6 Y50 Z0.3 F1500.0 E30 G1 X140.9 Y100 Z0.3 F1500.0 E30 G1 X141.2 Y50 Z0.3 F1500.0 E30 G1 X141.5 Y100 Z0.3 F1500.0 E30 G1 X141.8 Y50 Z0.3 F1500.0 E30 G1 X142.1 Y100 Z0.3 F1500.0 E30 G1 X142.4 Y50 Z0.3 F1500.0 E30 G1 X142.7 Y100 Z0.3 F1500.0 E30 G1 X143.0 Y50 Z0.3 F1500.0 E30 G1 X143.3 Y100 Z0.3 F1500.0 E30 G1 X143.6 Y50 Z0.3 F1500.0 E30 G1 X143.9 Y100 Z0.3 F1500.0 E30 G1 X144.2 Y50 Z0.3 F1500.0 E30 G1 X144.5 Y100 Z0.3 F1500.0 E30 G1 X144.8 Y50 Z0.3 F1500.0 E30 G1 X145.1 Y100 Z0.3 F1500.0 E30 G1 X145.4 Y50 Z0.3 F1500.0 E30 G1 X145.7 Y100 Z0.3 F1500.0 E30 G1 X146.0 Y50 Z0.3 F1500.0 E30 G1 X146.3 Y100 Z0.3 F1500.0 E30 G1 X146.6 Y50 Z0.3 F1500.0 E30 G1 X146.9 Y100 Z0.3 F1500.0 E30 G1 X147.2 Y50 Z0.3 F1500.0 E30 G1 X147.5 Y100 Z0.3 F1500.0 E30 G1 X147.8 Y50 Z0.3 F1500.0 E30 G1 X148.1 Y100 Z0.3 F1500.0 E30 G1 X148.4 Y50 Z0.3 F1500.0 E30 G1 X148.7 Y100 Z0.3 F1500.0 E30 G1 X149.0 Y50 Z0.3 F1500.0 E30 G1 X149.3 Y100 Z0.3 F1500.0 E30 G1 X149.6 Y50 Z0.3 F1500.0 E30 G1 Z5.0 F3000 G1 X50 Y50 Z0.3 F5000.0 G1 Z0.3 F3000 G1 X83.2755179447 Y95.3343021784 Z0.3 F1500.0 E2.10509600088 G1 X58.3454474616 Y76.1969041944 Z0.3 F1500.0 E0.522657496058 G1 X66.8791956174 Y55.4393836859 Z0.3 F1500.0 E0.373232779492 G1 X93.0747148048 Y54.9159380236 Z0.3 F1500.0 E0.435720216361 G1 X97.9880369551 Y73.4199523981 Z0.3 F1500.0 E0.318386229106 G1 X97.7697200403 Y97.5229725308 Z0.3 F1500.0 E0.400851294461 G1 X65.4176325948 Y64.2202121236 Z0.3 F1500.0 E0.772131619708 G1 X70.4919120753 Y93.6385213083 Z0.3 F1500.0 E0.496452842974 G1 X92.2743959414 Y80.5612342903 Z0.3 F1500.0 E0.422512398607 G1 X62.5564997992 Y95.1899077832 Z0.3 F1500.0 E0.55084232307 G1 X79.2710431683 Y71.8547103081 Z0.3 F1500.0 E0.477345919773 G1 X60.4742453349 Y75.3852442537 Z0.3 F1500.0 E0.318058151414 G1 X79.7481149539 Y53.3829406507 Z0.3 F1500.0 E0.486435420314 G1 X71.7499536024 Y75.5955843635 Z0.3 F1500.0 E0.392614771747 G1 X80.1389518332 Y53.8273593803 Z0.3 F1500.0 E0.38795880666 G1 X99.0385488555 Y57.5478988449 Z0.3 F1500.0 E0.320333772787 G1 X77.9187914490 Y56.2107640570 Z0.3 F1500.0 E0.351926211253 G1 X71.8761016740 Y60.9390836152 Z0.3 F1500.0 E0.127598364674 G1 X56.4673746659 Y69.6013930486 Z0.3 F1500.0 E0.293964126515 G1 X63.1750702201 Y77.0085574280 Z0.3 F1500.0 E0.166183611396 G1 X68.8108933386 Y95.7804336929 Z0.3 F1500.0 E0.325943316518 G1 X90.8822631337 Y76.1820139376 Z0.3 F1500.0 E0.490866923376 G1 X61.5036531339 Y65.7830394179 Z0.3 F1500.0 E0.51827183121 G1 X81.3303692942 Y69.0008860114 Z0.3 F1500.0 E0.334033943256 G1 X85.8336581134 Y86.4506304970 Z0.3 F1500.0 E0.29969817615 G1 X88.1067044208 Y58.9357156607 Z0.3 F1500.0 E0.459133630338 G1 X52.8967318685 Y82.5331521958 Z0.3 F1500.0 E0.704883647158 G1 X93.9705588913 Y56.2634960912 Z0.3 F1500.0 E0.810816691288 G1 X60.1154684740 Y58.8559798747 Z0.3 F1500.0 E0.564660741958 G1 X59.9329398917 Y87.3913342775 Z0.3 F1500.0 E0.4745545787 G1 X75.1413512440 Y64.4822727825 Z0.3 F1500.0 E0.457287812187 G1 X97.9653265919 Y81.3227040208 Z0.3 F1500.0 E0.471700359236 G1 X69.0610274906 Y71.4576691497 Z0.3 F1500.0 E0.507905627446 G1 X57.1857182364 Y80.0854222221 Z0.3 F1500.0 E0.244105993018 G1 X71.6253536653 Y94.7094085358 Z0.3 F1500.0 E0.341772790125 G1 X77.8658656019 Y67.1425489417 Z0.3 F1500.0 E0.470038712738 G1 X91.7751527287 Y63.1027711065 Z0.3 F1500.0 E0.240870941304 G1 X88.0266994269 Y56.1617469801 Z0.3 F1500.0 E0.131186588939 G1 X84.1266561090 Y57.4546445119 Z0.3 F1500.0 E0.0683289828912 G1 X91.8597455623 Y87.2344060456 Z0.3 F1500.0 E0.511664471028 G1 X88.8103381964 Y50.2424291795 Z0.3 F1500.0 E0.617265731874 G1 X52.6066278484 Y73.4900268981 Z0.3 F1500.0 E0.715510359282 G1 X97.3850329084 Y99.8222423539 Z0.3 F1500.0 E0.863882169088 G1 X92.4902062299 Y65.7717607453 Z0.3 F1500.0 E0.572082692392 G1 X80.1394797269 Y70.0517138705 Z0.3 F1500.0 E0.217376321855 G1 X65.2670385236 Y62.5600914803 Z0.3 F1500.0 E0.276936272471 G1 X77.1051133708 Y58.6164134704 Z0.3 F1500.0 E0.207504737001 G1 X76.6084192460 Y79.3646541340 Z0.3 F1500.0 E0.345143498207 G1 X69.2640881671 Y80.8216025717 Z0.3 F1500.0 E0.12451678824 G1 X70.7576888926 Y65.3482397980 Z0.3 F1500.0 E0.258519092639 G4 P2000 G1 X85.9000277236 Y94.6909482270 Z0.5 F1500.0 E0.549115905918 G1 X90.0542762465 Y91.3526900856 Z0.5 F1500.0 E0.0886271020872 G1 X84.2089182307 Y97.7830166808 Z0.5 F1500.0 E0.144516444994 G1 X93.8292870848 Y70.9668873458 Z0.5 F1500.0 E0.473783674367 G1 X90.5781662793 Y78.7127937389 Z0.5 F1500.0 E0.139701329719 G1 X66.9036897187 Y88.6234301674 Z0.5 F1500.0 E0.426813705681 G1 X92.1363782122 Y50.2202711744 Z0.5 F1500.0 E0.764167651572 G1 X56.7051295190 Y64.5028587370 Z0.5 F1500.0 E0.635295938179 G1 X58.6487737295 Y99.9210746465 Z0.5 F1500.0 E0.589893547688 G1 X65.9536871194 Y81.0529620714 Z0.5 F1500.0 E0.336473338112 G1 X71.1083588389 Y89.8545340051 Z0.5 F1500.0 E0.169625310262 G1 X85.4041194784 Y76.0013716071 Z0.5 F1500.0 E0.331050673992 G1 X97.4817308488 Y65.3842006240 Z0.5 F1500.0 E0.267425248709 G1 X87.5922405650 Y69.5018873252 Z0.5 F1500.0 E0.178149369821 G1 X83.7323116290 Y67.2970160205 Z0.5 F1500.0 E0.0739252964256 G1 X94.6647902326 Y58.2700569191 Z0.5 F1500.0 E0.235774877721 G1 X84.7134407177 Y91.2757349676 Z0.5 F1500.0 E0.573292276259 G1 X57.1693549941 Y55.4751382555 Z0.5 F1500.0 E0.751185761454 G1 X56.9279192085 Y98.7120056047 Z0.5 F1500.0 E0.719043233608 G1 X87.0918006659 Y83.0367722523 Z0.5 F1500.0 E0.565317782101 G1 X81.6070443745 Y83.0789094053 Z0.5 F1500.0 E0.0912145591975 G1 X81.8410193911 Y76.9143792370 Z0.5 F1500.0 E0.102590368297 G1 X74.5744036825 Y59.0852439579 Z0.5 F1500.0 E0.320180313748 G1 X73.3259905565 Y79.0246814843 Z0.5 F1500.0 E0.33224348851 G1 X52.1757001900 Y55.9665203656 Z0.5 F1500.0 E0.520341386532 G1 X78.8816459062 Y59.2725406428 Z0.5 F1500.0 E0.447511781959 G1 X65.3087049193 Y83.8628438194 Z0.5 F1500.0 E0.467097045563 G1 X97.3468474569 Y88.0456928525 Z0.5 F1500.0 E0.537318177368 G1 X54.9192771933 Y99.9252443985 Z0.5 F1500.0 E0.732709237236 G1 X71.9751388697 Y74.0421325907 Z0.5 F1500.0 E0.515488610294 G1 X64.4769934644 Y72.4168749051 Z0.5 F1500.0 E0.127590281575 G1 X53.8378401172 Y95.1308832882 Z0.5 F1500.0 E0.417119012442 G1 X63.1091041925 Y66.2873043259 Z0.5 F1500.0 E0.503841204024 G1 X93.5613399329 Y82.7709250578 Z0.5 F1500.0 E0.575853979044 G1 X85.9294336080 Y54.8103584580 Z0.5 F1500.0 E0.481996416359 G1 X71.8211583912 Y60.6450120121 Z0.5 F1500.0 E0.253894139813 G1 X86.7258303280 Y56.9122972236 Z0.5 F1500.0 E0.255520543862 G1 X50.1656533033 Y82.1120658063 Z0.5 F1500.0 E0.738433965122 G1 X85.5973029040 Y90.5018688488 Z0.5 F1500.0 E0.605524163598 G1 X79.5241747086 Y97.7507295561 Z0.5 F1500.0 E0.157265289381 G1 X86.3846713043 Y78.5030164618 Z0.5 F1500.0 E0.339815754719 G1 X81.7398688449 Y65.7518376936 Z0.5 F1500.0 E0.225683404421 G1 X79.2867572420 Y93.9940142119 Z0.5 F1500.0 E0.471437715203 G1 X96.7264302939 Y73.2396101639 Z0.5 F1500.0 E0.450821311302 G1 X85.8410597713 Y72.0940843070 Z0.5 F1500.0 E0.182024062715 G1 X98.4352011788 Y56.1315280970 Z0.5 F1500.0 E0.33813290997 G1 X82.5712075111 Y52.6329093232 Z0.5 F1500.0 E0.270158826862 G1 X57.3768830653 Y86.7823434233 Z0.5 F1500.0 E0.705737790506 G1 X82.5589864903 Y78.9387339673 Z0.5 F1500.0 E0.438624310012 G4 M220 S100 M221 S100 G91nG1 F1800 E-3 G1 F3000 Z10 G90 G1 X0 Y200 F1000 M104 S0 M140 S0 M106 S0 M107 M84</p>
I even tried to score the mat on my heat bed again to see if that does the trick, but it didn't work.
Based on advice from Jennifer and Sam, I tried changing the z height as well as the feedRate, but this made no difference in terms of adhesion. Here is my final code:
Python Script:
"""Provides a scripting component.
Inputs: x: The x script variable y: The y script variable Output: a: The a output variable"""__author__ = "stejaraiulia"
import rhinoscriptsyntax as rs import random as r import math as m
# create a random prinHi t generator # G12: clean the nozzle -> do this before and after? # G2/3: arc clockwise/counterclockwise
def generateCoordinatePoint(s, e) : #x_val = "X"+str(r.uniform(s, e)) #y_val = "Y"+str(r.uniform(s, e)) return (r.uniform(s, e), r.uniform(s, e)) #return (str(x_val) + " " + str(y_val)) def makeGcodeSpeed(frX, frY, toX, toY, speed): # E = nozzleRadius^2 * L / filamentRadius^2 l = m.sqrt((toX - frX)**2 + (toY - frY)**2) #calculate the distance numerator = (nozzleWidth/2 * l * layerHeight) denominator = (1.75 / 2) * (1.75 / 2) * m.pi e = numerator / denominator return e
startVal = 1 endVal = 3 instructions = [] nozzleWidth = 0.4 layerHeight = 0.2
xPos = 0 yPos = 0 zPos = 0.1 xPrev = 0 yPrev = 0
# size of the drawing space -> 50-100 in the x and y planes dimStart = 50 dimEnd = 100
# starting instructions from Cura software (http://www.emcu.eu/configure-ultimaker-cura-software-for-use-the-creality-3d-printer-model-ender-3/) instructions.append("M104 S200\n") # Set Extruder temperature instructions.append("M140 S50\n") # Set Heat Bed temperature instructions.append("M190 S50\n") # Wait for Heat Bed temperature instructions.append("M109 S200\n") # Wait for Extruder temperature instructions.append("G28\n") # auto-home before starting the print instructions.append("G92 E0\n") # Reset Extruder instructions.append("G1 Z5.0 F3000\n") # Move Z Axis up little to prevent scratching of Heat Bed instructions.append("G1 X0.1 Y20 Z0.3 F5000.0\n") # Move to start position instructions.append("G1 X0.1 Y200.0 Z0.3 F1500.0 E15\n") # Draw the first line instructions.append("G1 X0.4 Y200.0 Z0.3 F5000.0\n") # Move to side a little instructions.append("G1 X0.4 Y20 Z0.3 F1500.0 E30\n") # Draw the second line instructions.append("G92 E0\n") # Reset Extruder instructions.append("G1 Z5.0 F3000\n") # Move Z Axis up little to prevent scratching of Heat Bed
# build a "canvas" using the drawing dimensions # bounding box instructions.append("G1 X" + str(dimStart) + " Y" + str(dimStart) + " F3000\n") # move the extruder to starting position (50, 50) instructions.append("G1 Z0.1\n") #lower the extruder to start printing instructions.append("G1 X" + str(dimStart) + " Y" + str(dimEnd) + " Z0.1 F1200.0 E30\n") #draw first side of square instructions.append("G1 X" + str(dimEnd) + " Y" + str(dimEnd) + " Z0.1 F1200.0 E30\n") # draw connecting side instructions.append("G1 X" + str(dimEnd) + " Y" + str(dimStart) + " Z0.1 F1200.0 E30\n") # draw connecting side instructions.append("G1 X" + str(dimStart) + " Y" + str(dimStart) + " Z0.1 F1200.0 E30\n") # finish the square instructions.append("G1 Z5.0 F3000\n") # move z axis up to travel to new starting position based on where the drawing dimensions are
# now, fill the square stepSize = 0.3 length = dimEnd - dimStart reps = int(length/stepSize) workingX = dimStart + stepSize
instructions.append("G1 X" + str(workingX) + " Y" + str(dimStart) + " Z0.1 F5000.0\n") # move to starting position, don't extrude for i in range(reps): instructions.append("G1 X" + str(workingX) + " Y" + str(dimEnd) + " Z0.1 F1200.0 E30\n") workingX += stepSize instructions.append("G1 X" + str(workingX) + " Y" + str(dimStart) + " Z0.1 F1200.0 E30\n") workingX += stepSize
instructions.append("G1 Z5.0 F3000\n") # move the extruder head up instructions.append("G1 X" + str(dimStart) + " Y" + str(dimStart) + " F5000.0\n") #travel to the starting position again instructions.append("G1 Z0.1 F3000\n") # move the extruder head down to start the drawing # now, randomly generate g-code for layer drawing for i in range(lines): # go through based on total amount of commands (parameter) if (i <= 1 or i % linesPerLayer != 0): #num = r.randint(startVal, endVal) num = 1 coord = generateCoordinatePoint(dimStart, dimEnd) #restrict the drawing space xPrev = xPos yPrev = yPos xPos = coord[0] yPos = coord[1] e = makeGcodeSpeed(xPrev, yPrev, xPos, yPos, 1500.0) #e = 30 inst = "G" + str(num) + " X" + str(xPos) + " Y" + str(yPos) + " Z" + str(zPos) + " F1200.0 E" + str(e) + "\n" instructions.append(inst) else: # move to the next layer instructions.append("G4 P2000\n") # Wait for 2 seconds zPos += layerHeight # increment z up one layer by adding the layerHeight value #instructions.append("G1 Z" + str(zPos) + " F5000.0\n") # move to start position #instructions.append("G1 X0.1 Y20 Z0.3 F5000.0\n")# move to start position
# ending instructions from Cura software (http://www.emcu.eu/configure-ultimaker-cura-software-for-use-the-creality-3d-printer-model-ender-3/) instructions.append("G4\n") # Wait instructions.append("M220 S100\n") # Reset Speed factor override percentage to default (100%) instructions.append("M221 S100\n") # Reset Extrude factor override percentage to default (100%) instructions.append("G91n") # Set coordinates to relative instructions.append("G1 F1800 E-3\n") # Retract filament 3 mm to prevent oozing instructions.append("G1 F3000 Z10\n") # Move Z Axis up 10 mm to allow filament ooze freely instructions.append("G90\n") # Set coordinates to absolute instructions.append("G1 X0 Y200 F1000\n") # Move Heat Bed to the front for easy print removal instructions.append("M104 S0\n") # Turn off Extruder temperature instructions.append("M140 S0\n") # Turn off Heat Bed instructions.append("M106 S0\n") # Turn off Cooling Fan instructions.append("M107\n") # Turn off Fan instructions.append("M84\n") # Disable stepper motors
f = open("/Users/stejaraiulia/Desktop/marks.gcode", "w") str_instructions = ''.join(instructions) f.write(str_instructions) f.close()
print(str_instructions)
G-Code:
M104 S200
M140 S50 M190 S50 M109 S200 G28 G92 E0 G1 Z5.0 F3000 G1 X0.1 Y20 Z0.3 F5000.0 G1 X0.1 Y200.0 Z0.3 F1500.0 E15 G1 X0.4 Y200.0 Z0.3 F5000.0 G1 X0.4 Y20 Z0.3 F1500.0 E30 G92 E0 G1 Z5.0 F3000 G1 X50 Y50 F3000 G1 Z0.1 G1 X50 Y100 Z0.1 F1200.0 E30 G1 X100 Y100 Z0.1 F1200.0 E30 G1 X100 Y50 Z0.1 F1200.0 E30 G1 X50 Y50 Z0.1 F1200.0 E30 G1 Z5.0 F3000 G1 X50.3 Y50 Z0.1 F5000.0 G1 X50.3 Y100 Z0.1 F1200.0 E30 G1 X50.6 Y50 Z0.1 F1200.0 E30 G1 X50.9 Y100 Z0.1 F1200.0 E30 G1 X51.2 Y50 Z0.1 F1200.0 E30 G1 X51.5 Y100 Z0.1 F1200.0 E30 G1 X51.8 Y50 Z0.1 F1200.0 E30 G1 X52.1 Y100 Z0.1 F1200.0 E30 G1 X52.4 Y50 Z0.1 F1200.0 E30 G1 X52.7 Y100 Z0.1 F1200.0 E30 G1 X53.0 Y50 Z0.1 F1200.0 E30 G1 X53.3 Y100 Z0.1 F1200.0 E30 G1 X53.6 Y50 Z0.1 F1200.0 E30 G1 X53.9 Y100 Z0.1 F1200.0 E30 G1 X54.2 Y50 Z0.1 F1200.0 E30 G1 X54.5 Y100 Z0.1 F1200.0 E30 G1 X54.8 Y50 Z0.1 F1200.0 E30 G1 X55.1 Y100 Z0.1 F1200.0 E30 G1 X55.4 Y50 Z0.1 F1200.0 E30 G1 X55.7 Y100 Z0.1 F1200.0 E30 G1 X56.0 Y50 Z0.1 F1200.0 E30 G1 X56.3 Y100 Z0.1 F1200.0 E30 G1 X56.6 Y50 Z0.1 F1200.0 E30 G1 X56.9 Y100 Z0.1 F1200.0 E30 G1 X57.2 Y50 Z0.1 F1200.0 E30 G1 X57.5 Y100 Z0.1 F1200.0 E30 G1 X57.8 Y50 Z0.1 F1200.0 E30 G1 X58.1 Y100 Z0.1 F1200.0 E30 G1 X58.4 Y50 Z0.1 F1200.0 E30 G1 X58.7 Y100 Z0.1 F1200.0 E30 G1 X59.0 Y50 Z0.1 F1200.0 E30 G1 X59.3 Y100 Z0.1 F1200.0 E30 G1 X59.6 Y50 Z0.1 F1200.0 E30 G1 X59.9 Y100 Z0.1 F1200.0 E30 G1 X60.2 Y50 Z0.1 F1200.0 E30 G1 X60.5 Y100 Z0.1 F1200.0 E30 G1 X60.8 Y50 Z0.1 F1200.0 E30 G1 X61.1 Y100 Z0.1 F1200.0 E30 G1 X61.4 Y50 Z0.1 F1200.0 E30 G1 X61.7 Y100 Z0.1 F1200.0 E30 G1 X62.0 Y50 Z0.1 F1200.0 E30 G1 X62.3 Y100 Z0.1 F1200.0 E30 G1 X62.6 Y50 Z0.1 F1200.0 E30 G1 X62.9 Y100 Z0.1 F1200.0 E30 G1 X63.2 Y50 Z0.1 F1200.0 E30 G1 X63.5 Y100 Z0.1 F1200.0 E30 G1 X63.8 Y50 Z0.1 F1200.0 E30 G1 X64.1 Y100 Z0.1 F1200.0 E30 G1 X64.4 Y50 Z0.1 F1200.0 E30 G1 X64.7 Y100 Z0.1 F1200.0 E30 G1 X65.0 Y50 Z0.1 F1200.0 E30 G1 X65.3 Y100 Z0.1 F1200.0 E30 G1 X65.6 Y50 Z0.1 F1200.0 E30 G1 X65.9 Y100 Z0.1 F1200.0 E30 G1 X66.2 Y50 Z0.1 F1200.0 E30 G1 X66.5 Y100 Z0.1 F1200.0 E30 G1 X66.8 Y50 Z0.1 F1200.0 E30 G1 X67.1 Y100 Z0.1 F1200.0 E30 G1 X67.4 Y50 Z0.1 F1200.0 E30 G1 X67.7 Y100 Z0.1 F1200.0 E30 G1 X68.0 Y50 Z0.1 F1200.0 E30 G1 X68.3 Y100 Z0.1 F1200.0 E30 G1 X68.6 Y50 Z0.1 F1200.0 E30 G1 X68.9 Y100 Z0.1 F1200.0 E30 G1 X69.2 Y50 Z0.1 F1200.0 E30 G1 X69.5 Y100 Z0.1 F1200.0 E30 G1 X69.8 Y50 Z0.1 F1200.0 E30 G1 X70.1 Y100 Z0.1 F1200.0 E30 G1 X70.4 Y50 Z0.1 F1200.0 E30 G1 X70.7 Y100 Z0.1 F1200.0 E30 G1 X71.0 Y50 Z0.1 F1200.0 E30 G1 X71.3 Y100 Z0.1 F1200.0 E30 G1 X71.6 Y50 Z0.1 F1200.0 E30 G1 X71.9 Y100 Z0.1 F1200.0 E30 G1 X72.2 Y50 Z0.1 F1200.0 E30 G1 X72.5 Y100 Z0.1 F1200.0 E30 G1 X72.8 Y50 Z0.1 F1200.0 E30 G1 X73.1 Y100 Z0.1 F1200.0 E30 G1 X73.4 Y50 Z0.1 F1200.0 E30 G1 X73.7 Y100 Z0.1 F1200.0 E30 G1 X74.0 Y50 Z0.1 F1200.0 E30 G1 X74.3 Y100 Z0.1 F1200.0 E30 G1 X74.6 Y50 Z0.1 F1200.0 E30 G1 X74.9 Y100 Z0.1 F1200.0 E30 G1 X75.2 Y50 Z0.1 F1200.0 E30 G1 X75.5 Y100 Z0.1 F1200.0 E30 G1 X75.8 Y50 Z0.1 F1200.0 E30 G1 X76.1 Y100 Z0.1 F1200.0 E30 G1 X76.4 Y50 Z0.1 F1200.0 E30 G1 X76.7 Y100 Z0.1 F1200.0 E30 G1 X77.0 Y50 Z0.1 F1200.0 E30 G1 X77.3 Y100 Z0.1 F1200.0 E30 G1 X77.6 Y50 Z0.1 F1200.0 E30 G1 X77.9 Y100 Z0.1 F1200.0 E30 G1 X78.2 Y50 Z0.1 F1200.0 E30 G1 X78.5 Y100 Z0.1 F1200.0 E30 G1 X78.8 Y50 Z0.1 F1200.0 E30 G1 X79.1 Y100 Z0.1 F1200.0 E30 G1 X79.4 Y50 Z0.1 F1200.0 E30 G1 X79.7 Y100 Z0.1 F1200.0 E30 G1 X80.0 Y50 Z0.1 F1200.0 E30 G1 X80.3 Y100 Z0.1 F1200.0 E30 G1 X80.6 Y50 Z0.1 F1200.0 E30 G1 X80.9 Y100 Z0.1 F1200.0 E30 G1 X81.2 Y50 Z0.1 F1200.0 E30 G1 X81.5 Y100 Z0.1 F1200.0 E30 G1 X81.8 Y50 Z0.1 F1200.0 E30 G1 X82.1 Y100 Z0.1 F1200.0 E30 G1 X82.4 Y50 Z0.1 F1200.0 E30 G1 X82.7 Y100 Z0.1 F1200.0 E30 G1 X83.0 Y50 Z0.1 F1200.0 E30 G1 X83.3 Y100 Z0.1 F1200.0 E30 G1 X83.6 Y50 Z0.1 F1200.0 E30 G1 X83.9 Y100 Z0.1 F1200.0 E30 G1 X84.2 Y50 Z0.1 F1200.0 E30 G1 X84.5 Y100 Z0.1 F1200.0 E30 G1 X84.8 Y50 Z0.1 F1200.0 E30 G1 X85.1 Y100 Z0.1 F1200.0 E30 G1 X85.4 Y50 Z0.1 F1200.0 E30 G1 X85.7 Y100 Z0.1 F1200.0 E30 G1 X86.0 Y50 Z0.1 F1200.0 E30 G1 X86.3 Y100 Z0.1 F1200.0 E30 G1 X86.6 Y50 Z0.1 F1200.0 E30 G1 X86.9 Y100 Z0.1 F1200.0 E30 G1 X87.2 Y50 Z0.1 F1200.0 E30 G1 X87.5 Y100 Z0.1 F1200.0 E30 G1 X87.8 Y50 Z0.1 F1200.0 E30 G1 X88.1 Y100 Z0.1 F1200.0 E30 G1 X88.4 Y50 Z0.1 F1200.0 E30 G1 X88.7 Y100 Z0.1 F1200.0 E30 G1 X89.0 Y50 Z0.1 F1200.0 E30 G1 X89.3 Y100 Z0.1 F1200.0 E30 G1 X89.6 Y50 Z0.1 F1200.0 E30 G1 X89.9 Y100 Z0.1 F1200.0 E30 G1 X90.2 Y50 Z0.1 F1200.0 E30 G1 X90.5 Y100 Z0.1 F1200.0 E30 G1 X90.8 Y50 Z0.1 F1200.0 E30 G1 X91.1 Y100 Z0.1 F1200.0 E30 G1 X91.4 Y50 Z0.1 F1200.0 E30 G1 X91.7 Y100 Z0.1 F1200.0 E30 G1 X92.0 Y50 Z0.1 F1200.0 E30 G1 X92.3 Y100 Z0.1 F1200.0 E30 G1 X92.6 Y50 Z0.1 F1200.0 E30 G1 X92.9 Y100 Z0.1 F1200.0 E30 G1 X93.2 Y50 Z0.1 F1200.0 E30 G1 X93.5 Y100 Z0.1 F1200.0 E30 G1 X93.8 Y50 Z0.1 F1200.0 E30 G1 X94.1 Y100 Z0.1 F1200.0 E30 G1 X94.4 Y50 Z0.1 F1200.0 E30 G1 X94.7 Y100 Z0.1 F1200.0 E30 G1 X95.0 Y50 Z0.1 F1200.0 E30 G1 X95.3 Y100 Z0.1 F1200.0 E30 G1 X95.6 Y50 Z0.1 F1200.0 E30 G1 X95.9 Y100 Z0.1 F1200.0 E30 G1 X96.2 Y50 Z0.1 F1200.0 E30 G1 X96.5 Y100 Z0.1 F1200.0 E30 G1 X96.8 Y50 Z0.1 F1200.0 E30 G1 X97.1 Y100 Z0.1 F1200.0 E30 G1 X97.4 Y50 Z0.1 F1200.0 E30 G1 X97.7 Y100 Z0.1 F1200.0 E30 G1 X98.0 Y50 Z0.1 F1200.0 E30 G1 X98.3 Y100 Z0.1 F1200.0 E30 G1 X98.6 Y50 Z0.1 F1200.0 E30 G1 X98.9 Y100 Z0.1 F1200.0 E30 G1 X99.2 Y50 Z0.1 F1200.0 E30 G1 X99.5 Y100 Z0.1 F1200.0 E30 G1 X99.8 Y50 Z0.1 F1200.0 E30 G1 X100.1 Y100 Z0.1 F1200.0 E30 G1 X100.4 Y50 Z0.1 F1200.0 E30 G1 X100.7 Y100 Z0.1 F1200.0 E30 G1 X101.0 Y50 Z0.1 F1200.0 E30 G1 X101.3 Y100 Z0.1 F1200.0 E30 G1 X101.6 Y50 Z0.1 F1200.0 E30 G1 X101.9 Y100 Z0.1 F1200.0 E30 G1 X102.2 Y50 Z0.1 F1200.0 E30 G1 X102.5 Y100 Z0.1 F1200.0 E30 G1 X102.800000000 Y50 Z0.1 F1200.0 E30 G1 X103.100000000 Y100 Z0.1 F1200.0 E30 G1 X103.400000000 Y50 Z0.1 F1200.0 E30 G1 X103.700000000 Y100 Z0.1 F1200.0 E30 G1 X104.000000000 Y50 Z0.1 F1200.0 E30 G1 X104.300000000 Y100 Z0.1 F1200.0 E30 G1 X104.600000000 Y50 Z0.1 F1200.0 E30 G1 X104.900000000 Y100 Z0.1 F1200.0 E30 G1 X105.200000000 Y50 Z0.1 F1200.0 E30 G1 X105.500000000 Y100 Z0.1 F1200.0 E30 G1 X105.800000000 Y50 Z0.1 F1200.0 E30 G1 X106.100000000 Y100 Z0.1 F1200.0 E30 G1 X106.400000000 Y50 Z0.1 F1200.0 E30 G1 X106.700000000 Y100 Z0.1 F1200.0 E30 G1 X107.000000000 Y50 Z0.1 F1200.0 E30 G1 X107.300000000 Y100 Z0.1 F1200.0 E30 G1 X107.600000000 Y50 Z0.1 F1200.0 E30 G1 X107.900000000 Y100 Z0.1 F1200.0 E30 G1 X108.200000000 Y50 Z0.1 F1200.0 E30 G1 X108.500000000 Y100 Z0.1 F1200.0 E30 G1 X108.800000000 Y50 Z0.1 F1200.0 E30 G1 X109.100000000 Y100 Z0.1 F1200.0 E30 G1 X109.400000000 Y50 Z0.1 F1200.0 E30 G1 X109.700000000 Y100 Z0.1 F1200.0 E30 G1 X110.000000000 Y50 Z0.1 F1200.0 E30 G1 X110.300000000 Y100 Z0.1 F1200.0 E30 G1 X110.600000000 Y50 Z0.1 F1200.0 E30 G1 X110.900000000 Y100 Z0.1 F1200.0 E30 G1 X111.200000000 Y50 Z0.1 F1200.0 E30 G1 X111.500000000 Y100 Z0.1 F1200.0 E30 G1 X111.800000000 Y50 Z0.1 F1200.0 E30 G1 X112.100000000 Y100 Z0.1 F1200.0 E30 G1 X112.400000000 Y50 Z0.1 F1200.0 E30 G1 X112.700000000 Y100 Z0.1 F1200.0 E30 G1 X113.000000000 Y50 Z0.1 F1200.0 E30 G1 X113.300000000 Y100 Z0.1 F1200.0 E30 G1 X113.600000000 Y50 Z0.1 F1200.0 E30 G1 X113.900000000 Y100 Z0.1 F1200.0 E30 G1 X114.200000000 Y50 Z0.1 F1200.0 E30 G1 X114.500000000 Y100 Z0.1 F1200.0 E30 G1 X114.800000000 Y50 Z0.1 F1200.0 E30 G1 X115.100000000 Y100 Z0.1 F1200.0 E30 G1 X115.400000000 Y50 Z0.1 F1200.0 E30 G1 X115.700000000 Y100 Z0.1 F1200.0 E30 G1 X116.000000000 Y50 Z0.1 F1200.0 E30 G1 X116.300000000 Y100 Z0.1 F1200.0 E30 G1 X116.600000000 Y50 Z0.1 F1200.0 E30 G1 X116.900000000 Y100 Z0.1 F1200.0 E30 G1 X117.200000000 Y50 Z0.1 F1200.0 E30 G1 X117.500000000 Y100 Z0.1 F1200.0 E30 G1 X117.800000000 Y50 Z0.1 F1200.0 E30 G1 X118.100000000 Y100 Z0.1 F1200.0 E30 G1 X118.400000000 Y50 Z0.1 F1200.0 E30 G1 X118.700000000 Y100 Z0.1 F1200.0 E30 G1 X119.000000000 Y50 Z0.1 F1200.0 E30 G1 X119.300000000 Y100 Z0.1 F1200.0 E30 G1 X119.600000000 Y50 Z0.1 F1200.0 E30 G1 X119.900000000 Y100 Z0.1 F1200.0 E30 G1 X120.200000000 Y50 Z0.1 F1200.0 E30 G1 X120.500000000 Y100 Z0.1 F1200.0 E30 G1 X120.800000000 Y50 Z0.1 F1200.0 E30 G1 X121.100000000 Y100 Z0.1 F1200.0 E30 G1 X121.400000000 Y50 Z0.1 F1200.0 E30 G1 X121.700000000 Y100 Z0.1 F1200.0 E30 G1 X122.000000000 Y50 Z0.1 F1200.0 E30 G1 X122.300000000 Y100 Z0.1 F1200.0 E30 G1 X122.600000000 Y50 Z0.1 F1200.0 E30 G1 X122.900000000 Y100 Z0.1 F1200.0 E30 G1 X123.200000000 Y50 Z0.1 F1200.0 E30 G1 X123.500000000 Y100 Z0.1 F1200.0 E30 G1 X123.800000000 Y50 Z0.1 F1200.0 E30 G1 X124.100000000 Y100 Z0.1 F1200.0 E30 G1 X124.400000000 Y50 Z0.1 F1200.0 E30 G1 X124.700000000 Y100 Z0.1 F1200.0 E30 G1 X125.000000000 Y50 Z0.1 F1200.0 E30 G1 X125.300000000 Y100 Z0.1 F1200.0 E30 G1 X125.600000000 Y50 Z0.1 F1200.0 E30 G1 X125.900000000 Y100 Z0.1 F1200.0 E30 G1 X126.200000000 Y50 Z0.1 F1200.0 E30 G1 X126.500000000 Y100 Z0.1 F1200.0 E30 G1 X126.800000000 Y50 Z0.1 F1200.0 E30 G1 X127.100000000 Y100 Z0.1 F1200.0 E30 G1 X127.400000000 Y50 Z0.1 F1200.0 E30 G1 X127.700000000 Y100 Z0.1 F1200.0 E30 G1 X128.000000000 Y50 Z0.1 F1200.0 E30 G1 X128.300000000 Y100 Z0.1 F1200.0 E30 G1 X128.600000000 Y50 Z0.1 F1200.0 E30 G1 X128.900000000 Y100 Z0.1 F1200.0 E30 G1 X129.200000000 Y50 Z0.1 F1200.0 E30 G1 X129.500000000 Y100 Z0.1 F1200.0 E30 G1 X129.800000000 Y50 Z0.1 F1200.0 E30 G1 X130.100000000 Y100 Z0.1 F1200.0 E30 G1 X130.400000000 Y50 Z0.1 F1200.0 E30 G1 X130.700000000 Y100 Z0.1 F1200.0 E30 G1 X131.000000000 Y50 Z0.1 F1200.0 E30 G1 X131.300000000 Y100 Z0.1 F1200.0 E30 G1 X131.600000000 Y50 Z0.1 F1200.0 E30 G1 X131.900000000 Y100 Z0.1 F1200.0 E30 G1 X132.200000000 Y50 Z0.1 F1200.0 E30 G1 X132.500000000 Y100 Z0.1 F1200.0 E30 G1 X132.800000000 Y50 Z0.1 F1200.0 E30 G1 X133.100000000 Y100 Z0.1 F1200.0 E30 G1 X133.400000000 Y50 Z0.1 F1200.0 E30 G1 X133.700000000 Y100 Z0.1 F1200.0 E30 G1 X134.000000000 Y50 Z0.1 F1200.0 E30 G1 X134.300000000 Y100 Z0.1 F1200.0 E30 G1 X134.6 Y50 Z0.1 F1200.0 E30 G1 X134.9 Y100 Z0.1 F1200.0 E30 G1 X135.2 Y50 Z0.1 F1200.0 E30 G1 X135.5 Y100 Z0.1 F1200.0 E30 G1 X135.8 Y50 Z0.1 F1200.0 E30 G1 X136.1 Y100 Z0.1 F1200.0 E30 G1 X136.4 Y50 Z0.1 F1200.0 E30 G1 X136.7 Y100 Z0.1 F1200.0 E30 G1 X137.0 Y50 Z0.1 F1200.0 E30 G1 X137.3 Y100 Z0.1 F1200.0 E30 G1 X137.6 Y50 Z0.1 F1200.0 E30 G1 X137.9 Y100 Z0.1 F1200.0 E30 G1 X138.2 Y50 Z0.1 F1200.0 E30 G1 X138.5 Y100 Z0.1 F1200.0 E30 G1 X138.8 Y50 Z0.1 F1200.0 E30 G1 X139.1 Y100 Z0.1 F1200.0 E30 G1 X139.4 Y50 Z0.1 F1200.0 E30 G1 X139.7 Y100 Z0.1 F1200.0 E30 G1 X140.0 Y50 Z0.1 F1200.0 E30 G1 X140.3 Y100 Z0.1 F1200.0 E30 G1 X140.6 Y50 Z0.1 F1200.0 E30 G1 X140.9 Y100 Z0.1 F1200.0 E30 G1 X141.2 Y50 Z0.1 F1200.0 E30 G1 X141.5 Y100 Z0.1 F1200.0 E30 G1 X141.8 Y50 Z0.1 F1200.0 E30 G1 X142.1 Y100 Z0.1 F1200.0 E30 G1 X142.4 Y50 Z0.1 F1200.0 E30 G1 X142.7 Y100 Z0.1 F1200.0 E30 G1 X143.0 Y50 Z0.1 F1200.0 E30 G1 X143.3 Y100 Z0.1 F1200.0 E30 G1 X143.6 Y50 Z0.1 F1200.0 E30 G1 X143.9 Y100 Z0.1 F1200.0 E30 G1 X144.2 Y50 Z0.1 F1200.0 E30 G1 X144.5 Y100 Z0.1 F1200.0 E30 G1 X144.8 Y50 Z0.1 F1200.0 E30 G1 X145.1 Y100 Z0.1 F1200.0 E30 G1 X145.4 Y50 Z0.1 F1200.0 E30 G1 X145.7 Y100 Z0.1 F1200.0 E30 G1 X146.0 Y50 Z0.1 F1200.0 E30 G1 X146.3 Y100 Z0.1 F1200.0 E30 G1 X146.6 Y50 Z0.1 F1200.0 E30 G1 X146.9 Y100 Z0.1 F1200.0 E30 G1 X147.2 Y50 Z0.1 F1200.0 E30 G1 X147.5 Y100 Z0.1 F1200.0 E30 G1 X147.8 Y50 Z0.1 F1200.0 E30 G1 X148.1 Y100 Z0.1 F1200.0 E30 G1 X148.4 Y50 Z0.1 F1200.0 E30 G1 X148.7 Y100 Z0.1 F1200.0 E30 G1 X149.0 Y50 Z0.1 F1200.0 E30 G1 X149.3 Y100 Z0.1 F1200.0 E30 G1 X149.6 Y50 Z0.1 F1200.0 E30 G1 Z5.0 F3000 G1 X50 Y50 F5000.0 G1 Z0.1 F3000 G1 X99.0979945202 Y56.0187926923 Z0.1 F1200.0 E1.89309180261 G1 X94.4528994759 Y77.8216190288 Z0.1 F1200.0 E0.370720031578 G1 X86.8031277456 Y84.3295690034 Z0.1 F1200.0 E0.167024520422 G1 X97.6753219364 Y71.2501281771 Z0.1 F1200.0 E0.28284629791 G1 X85.0852246398 Y57.8154090080 Z0.1 F1200.0 E0.306193022306 G1 X72.0965192397 Y74.7776736694 Z0.1 F1200.0 E0.355286472898 G1 X71.0573536190 Y83.7710167125 Z0.1 F1200.0 E0.150555009547 G1 X74.5925842760 Y54.3025595010 Z0.1 F1200.0 E0.493576321136 G1 X63.0361282719 Y88.7877851388 Z0.1 F1200.0 E0.604836827569 G1 X71.4097242145 Y64.4394484157 Z0.1 F1200.0 E0.428190689939 G1 X78.8678646850 Y75.8900015564 Z0.1 F1200.0 E0.227254011321 G1 X59.9183039409 Y63.7336159536 Z0.1 F1200.0 E0.37440319726 G1 X76.5170247394 Y69.0448099264 Z0.1 F1200.0 E0.289824584607 G1 X99.5561197781 Y55.0234895716 Z0.1 F1200.0 E0.448517984913 G1 X80.1665821110 Y81.3282078198 Z0.1 F1200.0 E0.543447699897 G1 X77.0957531059 Y77.7615821798 Z0.1 F1200.0 E0.0782688244519 G1 X97.6763693813 Y51.7108751355 Z0.1 F1200.0 E0.552108500012 G1 X88.4759541602 Y57.2983139917 Z0.1 F1200.0 E0.179008686546 G1 X51.5004634430 Y78.7370129301 Z0.1 F1200.0 E0.710787981464 G1 X69.6637507577 Y92.0082875232 Z0.1 F1200.0 E0.374095849351 G1 X78.5318875025 Y58.6678403742 Z0.1 F1200.0 E0.573732332169 G1 X59.2168178972 Y85.6923442218 Z0.1 F1200.0 E0.552407619787 G1 X59.9120807948 Y83.9487883353 Z0.1 F1200.0 E0.0312157381257 G1 X59.1691958043 Y59.0339175554 Z0.1 F1200.0 E0.414520125056 G1 X91.5416003480 Y59.9944405763 Z0.1 F1200.0 E0.538592197448 G1 X60.9573110833 Y50.8851446493 Z0.1 F1200.0 E0.530699308384 G1 X50.5081461088 Y65.5003557697 Z0.1 F1200.0 E0.298781480554 G1 X98.5802565599 Y79.1951913969 Z0.1 F1200.0 E0.831249949531 G1 X70.2530637611 Y60.9090983659 Z0.1 F1200.0 E0.560709811759 G1 X60.5101320430 Y88.5447563626 Z0.1 F1200.0 E0.487307606047 G1 X62.2537275708 Y53.3238750791 Z0.1 F1200.0 E0.586442915176 G1 X95.6112147108 Y99.2788845748 Z0.1 F1200.0 E0.944345503856 G1 X64.3717562157 Y63.2303850247 Z0.1 F1200.0 E0.793273062264 G1 X68.8828490099 Y94.8017476492 Z0.1 F1200.0 E0.530366434702 G1 X71.4595782374 Y86.2092534805 Z0.1 F1200.0 E0.149180594763 G1 X62.3687258130 Y57.6764997763 Z0.1 F1200.0 E0.498003645451 G1 X92.9185007586 Y85.3668078894 Z0.1 F1200.0 E0.68568370202 G1 X73.6684373557 Y69.8305785535 Z0.1 F1200.0 E0.411384768221 G1 X95.4103209215 Y60.2829803396 Z0.1 F1200.0 E0.394895348164 G1 X65.5176339164 Y98.0430622484 Z0.1 F1200.0 E0.800905937665 G1 X52.6245931990 Y95.4636704046 Z0.1 F1200.0 E0.218660891178 G1 X93.0582913829 Y60.5813119050 Z0.1 F1200.0 E0.888061625781 G1 X79.6710372145 Y50.5887819544 Z0.1 F1200.0 E0.277811352527 G1 X89.0411495803 Y54.4926594415 Z0.1 F1200.0 E0.168808919092 G1 X89.2363823390 Y59.6499725393 Z0.1 F1200.0 E0.085827896451 G1 X99.4641511883 Y92.4408051554 Z0.1 F1200.0 E0.571224291066 G1 X88.0395146090 Y98.1155740061 Z0.1 F1200.0 E0.21213952057 G1 X53.1465214245 Y63.8008816453 Z0.1 F1200.0 E0.813857747046 G1 X60.9722586748 Y75.0928919806 Z0.1 F1200.0 E0.228475377485 G1 X50.2691698384 Y64.1278322296 Z0.1 F1200.0 E0.254819440744 G4 P2000 G1 X62.8675680934 Y79.6199824317 Z0.3 F1200.0 E0.332071408832 G1 X67.3428747131 Y70.1918752659 Z0.3 F1200.0 E0.17355734283 G1 X99.0406852828 Y61.7609329609 Z0.3 F1200.0 E0.545464182401 G1 X52.7682702197 Y51.7952440860 Z0.3 F1200.0 E0.787157742614 G1 X82.2618202790 Y99.2177025054 Z0.3 F1200.0 E0.928720270591 G1 X81.0831868676 Y78.9141060046 Z0.3 F1200.0 E0.338218618797 G1 X69.8498259725 Y77.4381940593 Z0.3 F1200.0 E0.188417060051 G1 X78.9390857385 Y71.4132515842 Z0.3 F1200.0 E0.181347493135 G1 X92.3299325564 Y58.6839885995 Z0.3 F1200.0 E0.307250979263 G1 X74.7525780802 Y97.3540274332 Z0.3 F1200.0 E0.706403162241 G1 X65.8507909733 Y81.1589733601 Z0.3 F1200.0 E0.307328682757 G1 X82.7157898772 Y55.0719328876 Z0.3 F1200.0 E0.51659367993 G1 X70.5535793248 Y58.9635470386 Z0.3 F1200.0 E0.212360184136 G1 X75.5014254123 Y50.0056572705 Z0.3 F1200.0 E0.17018415981 G1 X98.0196831015 Y62.5641783752 Z0.3 F1200.0 E0.428781187781 G1 X56.9599955907 Y57.4467759751 Z0.3 F1200.0 E0.688108255607 G1 X88.1292523701 Y62.4567168941 Z0.3 F1200.0 E0.524999952475 G1 X98.0487937984 Y82.1281121000 Z0.3 F1200.0 E0.366375557152 G1 X84.2211045523 Y82.5333879116 Z0.3 F1200.0 E0.230054152539 G1 X76.6321765308 Y97.8923693526 Z0.3 F1200.0 E0.284898898322 G1 X62.4897453694 Y74.1103798141 Z0.3 F1200.0 E0.460142694869 G1 X76.7832176552 Y88.8890859040 Z0.3 F1200.0 E0.341914149318 G1 X94.0700605746 Y77.2685401237 Z0.3 F1200.0 E0.346397569128 G1 X57.1031277227 Y67.8447746778 Z0.3 F1200.0 E0.634423776097 G1 X72.2514042505 Y86.6692103300 Z0.3 F1200.0 E0.401825126027 G1 X71.5988820357 Y55.2805677183 Z0.3 F1200.0 E0.52210802689 G1 X52.5774664349 Y62.1062482390 Z0.3 F1200.0 E0.33607723414 G1 X62.1516420972 Y78.2893703795 Z0.3 F1200.0 E0.312697579812 G1 X88.5945983289 Y68.4782473067 Z0.3 F1200.0 E0.469041044272 G1 X67.8973172877 Y77.4340221824 Z0.3 F1200.0 E0.375037832469 G1 X80.6462144460 Y68.0207859963 Z0.3 F1200.0 E0.263545067479 G1 X50.0789056893 Y82.7036523940 Z0.3 F1200.0 E0.563940015231 G1 X93.9796908771 Y68.1504360182 Z0.3 F1200.0 E0.769142878692 G1 X92.6295458687 Y62.4527476742 Z0.3 F1200.0 E0.0973768829051 G1 X59.7578718261 Y75.2576069333 Z0.3 F1200.0 E0.586669415292 G1 X56.0003258292 Y77.7506536437 Z0.3 F1200.0 E0.0749911571298 G1 X69.5105945404 Y74.6624258702 Z0.3 F1200.0 E0.230471684212 G1 X61.1201597710 Y55.8669734716 Z0.3 F1200.0 E0.342300128748 G1 X74.4817102281 Y81.2822687482 Z0.3 F1200.0 E0.477508365392 G1 X68.5773757466 Y79.2650640273 Z0.3 F1200.0 E0.103761867452 G1 X70.8246455379 Y50.9196865401 Z0.3 F1200.0 E0.472864688635 G1 X84.4156445213 Y62.3833039393 Z0.3 F1200.0 E0.295683244642 G1 X66.4139550102 Y60.5010270586 Z0.3 F1200.0 E0.301001370009 G1 X75.8873619202 Y50.2115783817 Z0.3 F1200.0 E0.232594067509 G1 X80.0234342163 Y93.5045078447 Z0.3 F1200.0 E0.723242541982 G1 X65.8039346315 Y92.4568378941 Z0.3 F1200.0 E0.237112212341 G1 X76.8458339163 Y84.1712936107 Z0.3 F1200.0 E0.229575527632 G1 X99.9138439376 Y57.5773056060 Z0.3 F1200.0 E0.585457100794 G1 X71.8317741301 Y83.7526136564 Z0.3 F1200.0 E0.638419042769 G4 M220 S100 M221 S100 G91nG1 F1800 E-3 G1 F3000 Z10 G90 G1 X0 Y200 F1000 M104 S0 M140 S0 M106 S0 M107 M84