45 | | string HEADER = |
46 | | " 0\n" |
47 | | "SECTION\n" |
48 | | " 2\n" |
49 | | "HEADER\n" |
50 | | " 9\n" |
51 | | "$ACADVER\n" |
52 | | " 1\n" |
53 | | "AC1014\n" |
54 | | " 9\n" |
55 | | "$HANDSEED\n" |
56 | | " 5\n" |
57 | | "FFFF\n" |
58 | | " 9\n" |
59 | | "$MEASUREMENT\n" |
60 | | " 70\n" |
61 | | " 1\n" // unit: mm |
62 | | " 0\n" |
63 | | "ENDSEC\n" |
64 | | " 0\n" |
65 | | "SECTION\n" |
66 | | " 2\n" |
67 | | "ENTITIES\n"; |
68 | | |
69 | | string POLYLINE = |
70 | | " 0\n" |
71 | | "LWPOLYLINE\n" |
72 | | " 5\n" |
73 | | "%d\n" // id |
74 | | "100\n" |
75 | | "AcDbEntity\n" |
76 | | " 8\n" |
77 | | "0\n" |
78 | | " 62\n" |
79 | | "7\n" |
80 | | "100\n" |
81 | | "AcDbPolyline\n" |
82 | | " 90\n" |
83 | | "%d\n" // number of points |
84 | | " 70\n" |
85 | | "0\n"; |
86 | | |
87 | | string POINT = |
88 | | " 10\n" |
89 | | "%f\n" |
90 | | " 20\n" |
91 | | "%f\n" |
92 | | " 30\n" |
93 | | "0.0\n"; |
94 | | |
95 | | string TRAILER = |
96 | | " 0\n" |
97 | | "ENDSEC\n" |
98 | | " 0\n" |
99 | | "EOF\n"; |
100 | | |
101 | | void processLayer(UL_BOARD B, int layer) { |
102 | | int cream = (layer == LAYER_TOP ? LAYER_TCREAM : LAYER_BCREAM); |
103 | | int id = 100; |
104 | | printf("%s", HEADER); |
105 | | B.elements(E) { |
106 | | E.package.contacts(C) { |
107 | | if (C.smd && C.smd.layer == layer) { |
108 | | real x = C.smd.x / 10000.0; |
109 | | real y = C.smd.y / 10000.0; |
110 | | real w = C.smd.dx[cream] / 10000.0 / 2; |
111 | | real h = C.smd.dy[cream] / 10000.0 / 2; |
112 | | real a = C.smd.angle / 180 * PI; |
113 | | real wc = w * cos(a); |
114 | | real hs = h * sin(a); |
115 | | real ws = w * sin(a); |
116 | | real hc = h * cos(a); |
117 | | printf(POLYLINE, id++, 5); // 5 points |
118 | | printf(POINT, x + wc - hs, y + ws + hc); |
119 | | printf(POINT, x - wc - hs, y - ws + hc); |
120 | | printf(POINT, x - wc + hs, y - ws - hc); |
121 | | printf(POINT, x + wc + hs, y + ws - hc); |
122 | | printf(POINT, x + wc - hs, y + ws + hc); |
123 | | } |
124 | | } |
125 | | } |
126 | | printf("%s", TRAILER); |
127 | | } |
128 | | |
129 | | board(B) { |
130 | | output(filesetext(B.name, "-tcream.dxf")) processLayer(B, LAYER_TOP); |
131 | | output(filesetext(B.name, "-bcream.dxf")) processLayer(B, LAYER_BOTTOM); |
132 | | } |
133 | | }}} |
| 38 | The code moved to <https://gist.github.com/703363>. |