# Example script to produce a spiral on the current layer # # solicit geometrical info from user num = AskReal("Number of turns? ", "1") if (num < 0 | num > 100) ShowPrompt("Bad input (< 0 or > 100) for turns: ", num) Exit() end width = AskReal("Width of spiral path? ", "4") if (width < 0) ShowPrompt("Bad input (< 0) for width: ", width) Exit() end rmin = AskReal("Starting radius? ", "20") if (rmin < width/2) ShowPrompt("Bad input (< width/2) for min radius: ", rmin) Exit() end spa = AskReal("Pitch? ", "10") if (spa < width) ShowPrompt("Bad input (< width) for pitch: ", pitch) Exit() end nums = AskReal("Edges per 360 degrees? ", "50") if (nums < 3 | nums > 90) ShowPrompt("Bad input (< 3 or > 90) for edge count: ", nums) Exit() end # initialize width = width/2 dth = 2*pi/nums n = nums*num + 1 i = 0 theta = 0 # there is an internal limit of 2000 polygon vertices nverts = 2*n + 1 if (nverts > 2000) ShowPrompt("Sorry, resulting polygon would have too many vertices.") Exit() end # allocate array, size 2*nverts array[4000] = 0 l = 4*n j = 0 # fill in the array while (i < n) r = rmin + theta*spa/(2*pi) x = (r-width)*cos(theta) y = (r-width)*sin(theta) array[j] = x array[j+1] = y x = (r+width)*cos(theta) y = (r+width)*sin(theta) array[l-j-2] = x array[l-j-1] = y j = j + 2 i = i + 1 theta = theta + dth end # close the path, necessary for polygon array[l] = array[0] array[l+1] = array[1] # get the location for the spiral and transform array ShowPrompt("Point to locate center of spiral") xy[2] PushGhost(array, nverts) ShowGhost(8) if !Point(xy) Exit() end ShowGhost(0) PopGhost() i = 0 j = 0 while (i < nverts) array[j] = array[j] + xy[0] array[j+1] = array[j+1] + xy[1] i = i + 1 j = j + 2 end # create the polygon drc = DRCstate(0) Polygon(nverts, array) Commit() DRCstate(drc) ShowPrompt("Info: spiral not drc'ed. Drc takes a long time for these objects.") #done