#usage "de:Das Board transparent ausdrucken.

" "Nur die Option IMAGE kann wirklich transparent ausdrucken.

" "RUN print-transparent-brd [Options]
" "Es werden für die Layer 1 16 17 18 20 21 22 25 26 27 28 51 und 52 die " "entsprechenden Farb-Codes gesetzt,
" "und falls mit DISPLAY aktiviert, ausgedruckt. Alle anderen Layer werden abgeschaltet.

" "Die Hintergrundfarbe wird auf " "weiss umgestellt, die Farben der Kupferlayer " "werden entsprechend abgeschwächt, die Farben des Place, Docu, Name, und " "Value-Layer werden auf schwarz eingestellt, so dass die Leiterbahnen " "nur schwach unter dem kräftigen Bestückungsdruck " "zu erkennen sind.

" "Alle PRINT-Option werden ausgeführt. Lesen Sie bitte dazu unter HELP PRINT.

" "RUN print-transparent-brd IMAGE @ DPI [Options]

" "Die Option IMAGE erzeugt ein Bitmap-Bild des Fensters anstatt eines Ausdrucks.
" "Die Option @ nach IMAGE wird durch den Dateinamen inkl. Pfad und die Dateierweiterung .png ersetzt.
" "Alternativ kann/muß man den Pfad/Dateinamen, in Hochkommas (Apostroph) eingeschlossen angeben, wenn " "im Pfad oder Dateinamen ein Leerzeichen (Space) vorkommt.
" "DPI ist die Auflösung (dots per inch), z.B. 360
" "RUN print-transparent-brd IMAGE 'Laufwerk:/Pfad/Dateiname' 360

" "Author: alf@cadsoft.de" , "en:Print Board in a transparent style.

" "Only the option IMAGE print real transparent.

" "RUN print-transparent-brd [options]
" "The ULP changes the color settings for layers 1 16 17 18 20 21 22 25 26 27 28 51 and 52
" "and prints them, if activated. All the other layers will be switched off.

" "The background color will be set to " "white , the colors of the copper layers " "will be changed into a less bright mode. The colors of layers Place, Docu, Name, and " "value will be set to black , so that the traces " "are faintly visible under the strong silk screen layers.

" "All given PRINT options will be executed. Please read HELP PRINT for details.

" "RUN print-transparent-brd IMAGE @ DPI

" "The IMAGE option generates a bitmap of the editor window instead of the print-out.
" "The parameter @ following the IMAGE option will be replaced by path + file name + extension .png.
" "As an alterantive you can add your own path/file name which has to be included into single quotes.
" "DPI stands for the resolution, for example, 360
" "RUN print-transparent-brd IMAGE 'drive:/path/file name' 360

" "Author: alf@cadsoft.de" #require 5.1200 string Version = "1.0.2"; // 2010-11-11 alf@cadsoft.de // 2010-11-30 Alle Print-Optionen durchreichen. // Layer die nicht gedruckt werden sollen, werden mit -nummer ab, // und nach dem drucken wieder eingeschaltet. // Die Option IMAGE kann die Ansicht als Bild abspeichern. // 2011-09-01 Bestückungsvarianten ausdruck. Der Layer 101 bis 106 bleiben erhalten // wie sie sind. // 2013-07-03 bei Palette schwarz und weiss wird die Frabe 0 nicht behandelt // Wenn Pad bzw. Via-Layer keine eigene Farbe besitzt, wird die Farbe nicht verändert. string Ptype[] = { "BLACK", "WHITE", "COLORED" }; enum { BLACK, WHITE, COLORED }; // Paletten Definition //int Fa[], Fr[], Fg[], Fb[]; // Farbcodes der Palette, Alpha, Rot, Grün, Blau int Actual_Palette = -1; string s, Scmd, Spalette, OrgLayColor; string Fname = ""; // Board-Dateiname string Fscript = ""; // Script-Dateiname // Die Farben (Nummerzuweisung) zum Transparant drucken mit weissen Hintergrund. enum { WeissNT, HellGrau, Hellblau, Hellgruen, Hellcyan, Hellrot, Hellmagenta, Hellgelb, Hellgrau2, Schwarz, Blau, Gruen, Cyan, Rot, Magenta, Gelb, Grid, Null }; // Die Farbdefinitionen string PrintColor[]; PrintColor[WeissNT] = "0xFFFFFFFF"; // weiss, nicht transparent PrintColor[HellGrau] = "0xFFC8C8C8"; PrintColor[Hellblau] = "0x8FC3CEFF"; PrintColor[Hellgruen] = "0x4F004000"; PrintColor[Hellcyan] = "0x8FA4FCFF"; PrintColor[Hellrot] = "0x8FFFB9B9"; PrintColor[Hellmagenta] = "0x8FE9C8FF"; PrintColor[Hellgelb] = "0x8FFDFFB9"; PrintColor[Hellgrau2] = "0xFFDEDEDE"; PrintColor[Schwarz] = "0xFF000000"; PrintColor[Blau] = "0x8F4C49FF"; PrintColor[Gruen] = "0x8F00FF00"; PrintColor[Cyan] = "0x8F00D7FD"; PrintColor[Rot] = "0x8FFF3737"; PrintColor[Magenta] = "0x8FFF0AF3"; PrintColor[Gelb] = "0x8FFCFF13"; PrintColor[Grid] = "0x3213F3F3"; PrintColor[Null] = "0x00FFFFFF"; // weiss transparent int PrintBackground = WHITE; // weisser Hintergrund zum drucken string SetPrintColor = ""; string ReDisplayLAyer = ""; // zum wieder herstellen der Layer (Display) int test = 0; // test flag if (argv[1] == "-T") test = 1; // ### Funktionen ### void readPalette(int t) { for (int n = 0; n < PALETTE_ENTRIES; n++) { if ((t == 0 || t == 1) && n == 0) { ; // Farbe 0 (Hintergrund) in weißer und schwarzer Palette kann nicht gändert werden. } else { sprintf(s, "Set PALETTE %d 0x%08X;\n", n, palette(n, t)); Spalette+=s; } } return; } string getColor(int color, int type) { string s; if (color || type > 1 ) { sprintf(s, "SEt PALETTE % 3d 0x%08X\n", color, palette(color, type) ); } return s; } void save(string Fname, string script) { output(Fname, "wtD") { printf("%s", script); } return; } for (int t = 0; t < PALETTE_TYPES; t++) { // *** Anzahl der Paletten *** sprintf(s, "SET PALETTE %s;\n", Ptype[t]); Spalette+=s; readPalette(t); } Actual_Palette = palette(-1); // die Palette des aktuellen Fenster wählen Spalette+="# Die aktuelle Palette\n"; sprintf(s, "sET PALETTE %s;\n", Ptype[Actual_Palette]); Spalette+=s; /* Die verwendeten Farben für die Layer 1. Hintergrund weiss 2. Top hell rot 3. Bottom hell blau 4. tPlace schwarz 5. bPlace schwarz 6. tNamens schwarz 7. bNamens schwarz 8. tValues schwarz 9. bValues schwarz */ if (board) board(BRD) { if (argc < 2) { dlgDialog("Print transparant HELP") { dlgHBoxLayout dlgSpacing(550); dlgHBoxLayout { dlgVBoxLayout dlgSpacing(300); dlgTextView(usage); } dlgHBoxLayout { dlgPushButton("+OK") dlgAccept(); dlgStretch(1); dlgPushButton("-CANCEL") { dlgReject(); exit(0); } } }; } Fname = BRD.name; sprintf(Fscript, "%s", filesetext(Fname, "~print~transparent.scr")); string restore_org_palette = filesetext(Fname, "~restore-palette.scr"); Scmd+="# "+Fname+"\n"; sprintf(s, "# Generated with ULP %s Version %s;\n# 1st to restore original palette\nSET PALETTE %s;\n", // weisser Hintergrund filename(argv[0]), Version, Ptype[PrintBackground] ); Scmd += "SET PAD_NAMES OFF;\n"; OrgLayColor+=s; SetPrintColor+= "seT PALETTE "+Ptype[PrintBackground]+";\n"; BRD.layers(L) { if (L.visible) { OrgLayColor+=getColor(L.color, PrintBackground); switch(L.number) { // Top case 1 : sprintf(s, "SET PALETTE %d %s; # %d hellrot\n", L.color, PrintColor[Hellrot], L.number); SetPrintColor += s; break; // Bottom case 16 : sprintf(s, "SET PALETTE %d %s; # %d hellblau\n", L.color, PrintColor[Hellblau], L.number); SetPrintColor += s; break; // Pads case 17 : if (L.color) { // nur wenn PAD-Layer eine eigene Farbe besitzt sprintf(s, "SET PALETTE %d %s; # %d hellgruen\n", L.color, PrintColor[Hellgruen], L.number); SetPrintColor += s; } break; // Vias case 18 : if (L.color) { // nur wenn VIA-Layer eine eigene Farbe besitzt sprintf(s, "SET PALETTE %d %s; # %d hellgruen\n", L.color, PrintColor[Hellgruen], L.number); SetPrintColor += s; } break; // Dimension case 20 : sprintf(s, "SET PALETTE %d %s; # %d dunkelgrau\n", L.color, PrintColor[Hellgrau2], L.number); SetPrintColor += s; break; // tPlace case 21 : sprintf(s, "SET PALETTE %d %s; # %d schwarz\n", L.color, PrintColor[Schwarz], L.number); SetPrintColor += s; break; // bPlace case 22 : sprintf(s, "SET PALETTE %d %s; # %d schwarz\n", L.color, PrintColor[Schwarz], L.number); SetPrintColor += s; break; // tName case 25 : sprintf(s, "SET PALETTE %d %s; # %d schwarz\n", L.color, PrintColor[Schwarz], L.number); SetPrintColor += s; break; // bName case 26 : sprintf(s, "SET PALETTE %d %s; # %d schwarz\n", L.color, PrintColor[Schwarz], L.number); SetPrintColor += s; break; // tValue case 27 : sprintf(s, "SET PALETTE %d %s; # %d schwarz\n", L.color, PrintColor[Schwarz], L.number); SetPrintColor += s; break; // bValue case 28 : sprintf(s, "SET PALETTE %d %s; # %d schwarz\n", L.color, PrintColor[Schwarz], L.number); SetPrintColor += s; break; // tDocu case 51 : sprintf(s, "SET PALETTE %d %s; # %d schwarz\n", L.color, PrintColor[Schwarz], L.number); SetPrintColor += s; break; // bDocu case 52 : sprintf(s, "SET PALETTE %d %s; # %d schwarz\n", L.color, PrintColor[Schwarz], L.number); SetPrintColor += s; break; case 101 : break; case 102 : break; case 103 : break; case 104 : break; case 105 : break; // alle anderen default : // Layer abschalten die nicht gedruckt werden sollen. sprintf(s, "DISPLAY -%d;\n", L.number); // Layer abschalten die nicht gedruckt werden sollen SetPrintColor += s; sprintf(s, "DISPLAY %d;\n", L.number); // Layer wieder einschalten ReDisplayLAyer += s; } } } sprintf(s, "%s WIN;\n", SetPrintColor); Scmd += s; if (test) Scmd += "RUN ulpmessage 'blasse Farben?';\n"; // else { int n1 = 1; if (strupr(argv[1]) == "IMAGE") { sprintf(s, "EXPORT "); Scmd += s; if (argv[2] == "@") { // wird ersetzt durch den Dateinamen und die Extension ".png", dammit man sich nicht die Finger wund tippen muß. n1 = 3; sprintf(s, "IMAGE '%s' ", filesetext(Fname, ".png")); Scmd += s; } } else { sprintf(s, "PRINT "); Scmd += s; } for (int n = n1; n < argc; n++) { // 2010-11-29 alle Optionen wie in der Kommandozeile angegeben weiterreichen. sprintf(s, " %s", argv[n]); Scmd += s; } } sprintf(s, ";\nSCRIPT '%s'", restore_org_palette); Scmd += s; sprintf(s, "# 2nd to reset the used palette\nSET PALETTE %s;\n", Ptype[palette(-1)]); // aktueller Hintergrund OrgLayColor+=s; OrgLayColor += "SET PAD_NAMES ON;"; save(restore_org_palette, OrgLayColor); } else { dlgMessageBox("Start this ULP in a BRD!", "OK"); exit(-1); } if (test) { int Result = dlgDialog("Farbpalette für aktuellen Ausdruck") { dlgHBoxLayout { dlgVBoxLayout dlgSpacing(500); dlgVBoxLayout { dlgHBoxLayout dlgSpacing(350); dlgTextEdit(Scmd); } dlgVBoxLayout { dlgHBoxLayout dlgSpacing(300); dlgTextEdit(OrgLayColor); } dlgVBoxLayout { dlgHBoxLayout dlgSpacing(100); dlgTextEdit(Spalette); } } dlgHBoxLayout { dlgPushButton("+OK") dlgAccept(); dlgPushButton("-ESC") dlgReject(); dlgStretch(1); } }; if (!Result) exit(-1); } output(Fscript, "wtD") { printf("%s\n%s", Scmd, ReDisplayLAyer); } exit("SCRIPT '"+Fscript+"'");