neingeist
/
arduinisten
Archived
1
0
Fork 0
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.

268 lines
7.0 KiB
Plaintext

#usage "<qt>This ULP changes the wire width of certain signals and do have "
"a wire width in between the minimum (minwidth) and maximum (maxwidth) values.<p>"
"NameOff = 1 switches off the checking of net names.<p>"
string hilfe =
"Dieses ULP ändert die Leiterbahnbreite abhaengig vom Signalnamen und "
"der vorgegebenen min. max. Breite.<p>" +
"! Mit NameOff kann die Netz-Namen-Ueberpruefung abgeschaltet werden.<p>";
// "THIS PROGRAM IS PROVIDED AS IS AND WITHOUT WARRANTY OF ANY KIND, EXPRESSED OR IMPLIED.</qt>"
// * 2005-03-02 alf@cadsoft.de
// 2008-06-03 alf@cadsoft.de display the same layers as in the beginning
string help = usage;
if (language() == "de") help = hilfe;
int Gridval = 1; // 1=mm 2=mil 3=inch ***
// choose the value for the units you're working with
string grid_unit;
real changewidth = 0.3; // gewuenschte Breite in ***
// enter desired width here
real minwidth = 0.0; // Auswahl-Min-Breite in ***
// minimum width and
real maxwidth = 13.1; // Auswahl-Max-Breite in ***
// maximum width of tracks that will be taken into consideration.
int NameOff = 0; // 0 = Breite abhaengig vom Netznamen aendern
// 0 = change width by name
// 1 = Breite unabhaengig vom Netznamen aendern
// 1 = change width without name
string signals[] = { "" };
string chsignals[] = { "" };
int chngsig = 0;
int lastSigCh = 0;
int decs;
string list;
string grid[] = { "MIC", "MM", "MIL", "INCH" };
real maxwidthUnit[] = { 13100.0, 13.1, 516.0, 0.516 };
string Version = " Version 1.5";
int index[];
int x1[], y1[], x2[], y2[], layer[];
int usedlayer[];
int n = 1;
int lVisible[]; // 2008-06-03 alf@cadsoft.de
int found(string fnam) {
int fnd = 0;
do {
if (chsignals[fnd] == fnam) {
return 1;
break;
}
++fnd;
} while (chsignals[fnd]);
return 0;
}
real fwidth(real ww) {
if (ww <= maxwidth && ww >= minwidth) return 1;
return 0;
}
void disp(int l) {
printf("DISPLAY NONE %d ;\n", l);
return;
}
void clearlay() {
for (int ly = 0; ly <= 255; ly++) usedlayer[ly] = 0;
return;
}
void clearsig (int selct) {
for (int r = selct; r < lastSigCh; r++) {
chsignals[r] = chsignals[r + 1];
}
chsignals[r + 1] = "";
if (lastSigCh) lastSigCh--;
return;
}
void AddList (string SigName) {
int found = 0;
for (int r = 0; r < lastSigCh; r++) {
if (chsignals[r] == SigName) {
found = 1;
break;
}
}
if (!found) {
chsignals[r] = SigName;
lastSigCh++;
}
return;
}
void menue() {
int cs;
int l;
int Result = dlgDialog("Change wire with") {
string slist[];
dlgLabel(help);
dlgSpacing(40);
dlgGridLayout {
dlgCell (0, 1) dlgSpacing(200);
dlgCell (0, 5) dlgSpacing(200);
dlgCell (1, 1) dlgLabel("&Signal list");
dlgCell (2, 1) dlgComboBox(signals, chngsig);
dlgCell (2, 3) dlgPushButton("&Add -->>") {
AddList(signals[chngsig]);
}
dlgCell (1, 5) dlgLabel("Signals &to change");
dlgCell (2, 5) dlgComboBox(chsignals, decs);
dlgCell (2, 6) dlgPushButton("&Delete") {
clearsig(decs);
}
}
dlgStretch(1);
dlgCheckBox("&Change without Signal name", NameOff);
dlgHBoxLayout {
dlgGroup("between wire width : " + grid_unit) {
dlgHBoxLayout {
dlgLabel("Mi&n. "); dlgRealEdit(minwidth, 0.0, maxwidthUnit[Gridval]);
dlgLabel(" Ma&x. "); dlgRealEdit(maxwidth, minwidth, maxwidthUnit[Gridval]);
}
}
dlgLabel(" new wire &width ");
dlgRealEdit(changewidth);
dlgStretch(1);
}
dlgHBoxLayout {
dlgStretch(0);
dlgPushButton("&OK") dlgAccept();
dlgStretch(1);
dlgPushButton("-Cancel") dlgReject();
dlgStretch(0);
}
dlgStretch(0);
};
if (Result == 0) exit (0);
return;
}
if (board) board(B) {
B.layers(L) {
lVisible[L.number] = L.visible;
}
int s = 0;
B.signals(S) {
signals[s] = S.name;
s++;
}
Gridval = B.grid.unit;
grid_unit = "Unit " + grid[Gridval];
maxwidth = maxwidthUnit[Gridval];
menue();
clearlay();
string file = filesetext(B.name, "chnwidth.scr");
output (file, "wtD") {
printf("# %s\n", Version);
printf("# %s\n\n", EAGLE_SIGNATURE);
printf("# exported from %s\n# at %s\n\n", B.name, t2string(time()) );
printf("# This Script changed Wire Width between %.3f %s and %.3f %s to %.3f %s\n",
minwidth, grid[Gridval], maxwidth, grid[Gridval], changewidth, grid[Gridval]);
printf("GRID %s FINEST;\n", grid[Gridval]);
B.signals(S) {
if (found(S.name) || NameOff) {
real Wwidth;
S.wires(W) {
switch (Gridval) {
case 0: Wwidth = u2mic(W.width);
break;
case 1: Wwidth = u2mm(W.width);
break;
case 2: Wwidth = u2mil(W.width);
break;
case 3: Wwidth = u2inch(W.width);
break;
}
if(fwidth(Wwidth)) {
x1[n] = W.x1;
y1[n] = W.y1;
x2[n] = W.x2;
y2[n] = W.y2;
layer[n] = W.layer;
++n;
}
}
}
}
sort(n, index, layer);
int dl = 0;
for (int i = 1; i < n; ++i) {
if(dl != layer[index[i]]) {
dl = layer[index[i]];
disp(dl);
usedlayer[dl] = 1;
}
switch (Gridval) {
case 0: printf("CHANGE WIDTH %.3f (%.3f %.3f);\n",
changewidth, (u2mic(x1[index[i]]) + u2mic(x2[index[i]])) / 2,
(u2mic(y1[index[i]]) + u2mic(y2[index[i]])) / 2 );
break;
case 1: printf("CHANGE WIDTH %.3f (%.3f %.3f);\n",
changewidth, (u2mm(x1[index[i]]) + u2mm(x2[index[i]])) / 2,
(u2mm(y1[index[i]]) + u2mm(y2[index[i]])) / 2 );
break;
case 2: printf("CHANGE WIDTH %.3f (%.3f %.3f);\n",
changewidth, (u2mil(x1[index[i]]) + u2mil(x2[index[i]])) / 2,
(u2mil(y1[index[i]]) + u2mil(y2[index[i]])) / 2 );
break;
case 3: printf("CHANGE WIDTH %.3f (%.3f %.3f);\n",
changewidth, (u2inch(x1[index[i]]) + u2inch(x2[index[i]])) / 2,
(u2inch(y1[index[i]]) + u2inch(y2[index[i]])) / 2 );
break;
}
}
printf(";\n");
printf("DISPLAY NONE ");
for(int l = 1; l < 90; l++) {
if (lVisible[l]) {
printf(" %d", l);
}
}
for(l = 100; l < 256; l++) {
if (lVisible[l]) {
printf(" %d", l);
}
}
printf(";\nSET DISPLAY_MODE REAL;\nGRID LAST;\n");
}
exit ("SCRIPT '" + file + "';");
}
else dlgMessageBox("start this ULP in Board", "OK");