508Views7Replies

### Author Options:

In Eagle, I'm trying to make a ring that is divided into 18 equal sections. However, I'm not sure how to do it. The only idea I can think of is manually creating each polygon, but there has to be an easier way. I've tried taking the ring and drawing lines through it in both the restrict & kepout layers, it doesn't work, though.

Tags:

## Discussions

EAGLE has polar coordinates available from the command line, which is probably the easiest way to do something like this: grid mm; arc ccw 0.5 (p 25 0) (p 25 180) (p 25 19); arc ccw 0.5 (p 25 20) (p 25 200) (p 25 39); arc ccw 0.5 (p 25 40) (p 25 220) (p 25 59); (and etc. Or write a ULP.)

Thanks! I'll have to play around with it, though.

I wrote a python script to generate the code. This got me pretty close:
`for x in range(18):    n = 20 * x    print "arc ccw 5 (p 7 %s) (p 7 %s) (p 7 %s);" % (n,(180 + n),(n+18))`
Don't mock the power of quick-coding! Ugly gets you really far sometimes! :P
If anyone is referencing this. Change the "print" line accordingly:
replace...
5 with the width of the segments
7 (all 3) with the radius
n+18 makes 2mm separations (20-2 = 18)
If you want more/less segments, adjust range(18) accordingly. However, you will need to replace 20 * x such that the 2 numbers multiplied by each other is 360.

BTW; that's brilliant. I've seen a lot of people over in the EAGLE forum that never seem to make that leap of intuition to get to "I can create EAGLE scripts using some other convenient programming! (or even a fancy text editor!)"

This is what I finnally ended up using:
`grid mm;arc ccw 11 (p 9 0) (p 9 180) (p 9 18);arc ccw 11 (p 9 20) (p 9 200) (p 9 38);arc ccw 11 (p 9 40) (p 9 220) (p 9 58);arc ccw 11 (p 9 60) (p 9 240) (p 9 78);arc ccw 11 (p 9 80) (p 9 260) (p 9 98);arc ccw 11 (p 9 100) (p 9 280) (p 9 118);arc ccw 11 (p 9 120) (p 9 300) (p 9 138);arc ccw 11 (p 9 140) (p 9 320) (p 9 158);arc ccw 11 (p 9 160) (p 9 340) (p 9 178);arc ccw 11 (p 9 180) (p 9 360) (p 9 198);arc ccw 11 (p 9 200) (p 9 380) (p 9 218);arc ccw 11 (p 9 220) (p 9 400) (p 9 238);arc ccw 11 (p 9 240) (p 9 420) (p 9 258);arc ccw 11 (p 9 260) (p 9 440) (p 9 278);arc ccw 11 (p 9 280) (p 9 460) (p 9 298);arc ccw 11 (p 9 300) (p 9 480) (p 9 318);arc ccw 11 (p 9 320) (p 9 500) (p 9 338);arc ccw 11 (p 9 340) (p 9 520) (p 9 358);`
For completeness, here's some code in EAGLE's "User Language" to do the same thing, somewhat more prettified than Zachinme's python. From an "advanced user" point of view, I REALLY like having both scripts and ULPs available to augment EAGLE's capabilities.
`string grid = "grid mm;";	// units and grid settingstring center = "(00 00)";	// coordinates of center pointstring cap = "flat";		// arc line cap style (flat or round.)				//   (rounded segments will overlap!)int segments = 18;		// number of segmentsint gap = 2;			// gap between segments (in degrees)int width = 13;			// line width for arcint radius = 20;		// circle radius/* code */int eachsegment = 360/segments;int i;string h, cmd ="";/* main */cmd = grid + "change cap " + cap + ";\n";sprintf(h, "mark %s;", center); cmd +=h;for (i=0; i < segments; i++) {  int arcstart = i * eachsegment;  sprintf(h, "arc ccw %d (p %d %d) (p %d %d) (p %d %d);\n",	width,	radius, arcstart,	radius, arcstart + 180,	radius, arcstart + eachsegment - gap);  cmd += h;}exit(cmd);`