I haven written a python script to create a testtrack purposed to test the cornering behaviour of a cad/cam machine. The script creates a polyline with incremental corner sharpness every time it has come full circle.
Every time the corner changes sharpness, it prints the new corner together with the distance travelled. As a backup, it creates or updates a text file with the same values.
The script works fine, the polyline and the printed values appear almost instantaneously in Rhino when the script is started. The problem is, it continues to do something for the next minute or so. It gets there in the end, but I am puzzled as to what causes the delay. I tried commenting out the lines related to the text file, but nothing changed.
Can someone shed some light on this?
The script:
# Testtrack for CAM angle negotiation.
# by Max Zuijdendorp, April 2018
# dit script creeert een polyline van een track met bochten (richtingsveranderingen) die in scherpte toenemen tot 180 graden, waarmee je het bochtgedrag van de freesmachine kunt testen.
# de bocht wordt met dezelfde scherpte herhaald totdat een volledige cirkel is doorlopen.
# in regels 19 t/m 22 worden de starthoek van de eerste bocht, de toename van de bochthoek na elke cirkel, de lengte van elk lijnstuk en de hoek van de laatste bocht die nog meegenomen wordt vastgelegd.
# als je in regel 19 de waarde van een "verdachte" hoek invult, en in regel 20 de waarde 0 invult kun je een volledige cirkel met die hoek doorlopen om de machine te testen.
import rhinoscriptsyntax as rs
import math
# Check of laag "Testtrack" bestaat, indien niet voeg deze laag dan toe
if not rs.IsLayer("Testtrack"):
rs.AddLayer("Testtrack")
rs.CurrentLayer(layer="Testtrack")
def DRAWTRACK():
corner =4 # hoek in graden van de eerste bocht (niet op 0 zetten)
cornerincr = 0.5 # hoek in graden waarmee de bocht toeneemt bij elke nieuwe cirkel. Indien dit 0 is wordt maar 1 cirkel getekend
sectionlen = 10 # lengte van de lijnstukken
lastcorner = 180 # scherpste hoek die nog meegenomen wordt.
angle = 0
repeat = 0
start = (0,0,0)
run = True
totallen = 0
Pointlist = []
Pointlist.append (start)
diamax = sectionlen/math.sin(corner*math.pi/360)
if (diamax > 500): # diameter van de eerste/grootste cirkel
print"Maximum machinebereik overschreden"
run = False
if run:
createtextfile = True # True maakt tekstbestand aan of ververst het, False niet.
if createtextfile:
f=open("//Users/maxzuijdendorp/Desktop/Hoeken.txt",'w')
f.write("Eerste bochthoek: "+str(corner)+'\n')
f.write("Laatste bochthoek: "+str(lastcorner)+'\n')
f.write("Hoektoename: "+str(cornerincr)+'\n')
f.write("Lengte lijnsegment: "+str(sectionlen)+'\n')
f.write('\n')
f.write("Snijlengte-Nieuwe Hoek\n")
imax = 1 # als cornerincr 0 is wordt maar 1 keer een cirkel doorlopen, in alle andere gevallen wordt hieronder het aantal cirkels berekend.
if (cornerincr <> 0):
imax = int((lastcorner-corner)/cornerincr)+1
for i in range(0,imax,1):
repeat = int(360/corner)+1 # de bocht wordt herhaald met dezelfde hoek totdat tenminste 360 graden doorlopen is
for n in range(0,repeat,1):
angle = angle + corner
point = rs.Polar(start, angle, sectionlen, rs.WorldXYPlane() ) # WorldZXPlane WorldYZPlane
end = point
Pointlist.append (point)
start = end
corner = corner + cornerincr
totallen = totallen+(n+1)*sectionlen
print totallen, corner
if createtextfile: f.write(str(totallen)+" "+str(corner)+'\n')
rs.AddPolyline (Pointlist)
if createtextfile: f.close()
DRAWTRACK()