- /* dieses Program macht die Seitenpanele aus dem Masterboard-design fuer jlcpcb */
-
- string str = "";
-
- // erstellt einen Punkt als string
- string Point(real X, real Y)
- {
- string temp = "";
- sprintf(temp, "(%f %f)", X,Y);
- return temp;
- }
-
- // kopiert eine selektierte Gruppe in die zwischenablage
- void cut(real originX, real originY)
- {
- string temp = "";
- sprintf(temp, "GRID mm 1;\nCUT (%f %f);\nGRID last;\nDISPLAY last;\n", originX, originY);
- str += temp;
- }
-
- // gruppiert elemente in einem rechteck
- void group(real upperLeftX, real upperLeftY, real lowerRightX, real lowerRightY)
- {
- string a = Point(upperLeftX, lowerRightY);
- string b = Point(upperLeftX, upperLeftY);
- string c = Point(lowerRightX, upperLeftY);
- string d = Point(lowerRightX, lowerRightY);
-
- string temp = "";
- sprintf(temp, "GROUP %s %s %s %s %s;\n", a,b,c,d,a);
- str += temp;
- }
-
- // oeffnet ein neues board zum editieren
- void edit(string name)
- {
- string temp = "";
- sprintf(temp, "SET CONFIRM YES;\nEDIT %s;\nSET CONFIRM OFF;\n", name);
- str += temp;
- }
-
- // loescht alle elemente auf einem board
- void clearBrd()
- {
- str += "DISPLAY ALL;\nSET CONFIRM YES;\nRIP;\nGROUP ALL;\nDELETE (C> 0 0);\nSET CONFIRM OFF;\nDISPLAY last;\n";
- }
-
- // speichert das board
- void write()
- {
- str += "SET CONFIRM YES;\nWRITE;\nSET CONFIRM OFF;\n";
- }
-
- // fuegt letzte kopierte sektion in das board an der gewaehlten stelle ein
- void paste(int offset, real originX, real originY)
- {
- string temp = "";
- sprintf(temp, "GRID mm;\nPASTE %d (%f %f);\nGRID last;\n", offset, originX, originY);
- str += temp;
- }
-
- // zeichnet eine linie mit dicke width
- void line(real width, string A, string B)
- {
- string temp = "";
- sprintf(temp, "LINE %f %s %s;\n", width, A, B);
- str += temp;
- }
-
- // zeichnet eine runde linie zwischen den Punkten A und B
- void arc(int width, string A, string B, real angle)
- {
- string temp = "";
- sprintf(temp, "LINE %d %s %f %s;\n", width, A, angle, B);
- str += temp;
- }
-
- // loescht dinge um gegebenen Punkt
- void delete(string atPoint)
- {
- string temp = "";
- sprintf(temp, "DELETE %s;\n", atPoint);
- str += temp;
- }
-
-
- // schliesst die outline
- void closeBoundary(real slotwidth, real radius, real hoehe, real mittelabstand_links, real mittelabstand_rechts)
- {
- str += "LAYER 20;\nDISPLAY NONE;\nDISPLAY 20;\n";
- // setzt das grid auf mm fuer folgende operationen
- str += "GRID mm 0.1;\n";
-
- group(0, hoehe - 0.1, 100, 4);
- delete("(C> 0 0)");
- delete(Point(10, hoehe));
- delete(Point(50-10, hoehe));
-
- delete(Point(50+10, hoehe));
- delete(Point(100-10, hoehe));
-
- delete(Point(0,0));
- delete(Point(50,0));
-
-
- line(0, Point(radius, hoehe), Point(25 - mittelabstand_links, hoehe));
- line(0, Point(25 + mittelabstand_rechts, hoehe), Point(50 - radius, hoehe));
-
- line(0, Point(0,0), Point(25-slotwidth/2, 0));
- line(0, Point(50, 0), Point(25+slotwidth/2, 0));
-
- // reproduziere die abgerundeten ecken
- arc(0, Point(0, hoehe - radius), Point(radius, hoehe) , -90);
- arc(0, Point(50-radius, hoehe), Point(50, hoehe - radius), -90);
- str += "GRID last;\nDISPLAY ALL;\n";
- }
-
- // ergaenzt ein Bohrloch
- void hole(real drill, string point)
- {
- string temp = "";
- sprintf(temp, "HOLE %f %s;\n", drill, point);
- str += temp;
- }
-
- void placeJlcMark()
- {
- str += "LAYER 22;\nCHANGE FONT VECTOR;\nGRID mm;\nCHANGE SIZE 0.8;\nCHANGE ALIGN bottom-right;\nTEXT 'JLCJLCJLCJLC' MR0 (51 1);\n";
- }
-
- // prozessiert eine seite des PCBs
- void side(string name, real originX, real originY, real slot, real radius, real hoehe, real abstand_l, real abstand_r) {
- cut(originX, originY);
- edit(name);
- clearBrd();
-
- paste(0, 0, 0);
- closeBoundary(slot, radius, hoehe, abstand_l, abstand_r);
-
- // sie panele sollen seitensymmetrisch sein
- // damit die zerbrochen platine die trennungsartifakte
- // immer auf der rechten bzw. linken seite aufweist
- str += "GRID mm;\nGROUP ALL;\nCUT (0 0);\nPASTE R0 (50 0);\n";
-
- // reproduziere die seitenkanten
- line(0, Point( 0, hoehe - radius), "( 0 0)");
- line(0, Point(100, hoehe - radius), "(100 0)");
-
- // trennungshilfen setzten
- real holedrill = 0.5;
- real slotwidth = 0.5;
- int numholes = 4;
- for (int i = 0; i < numholes; ++i)
- {
- hole(holedrill, Point(50, i));
- hole(holedrill, Point(50, hoehe-radius-1-i));
- }
- str += "LAYER 20;\n";
- line(slotwidth, Point(50, hoehe-radius-1-numholes), Point(50, numholes));
-
- // alle dimensionsmarken loeschen
- str += "DISPLAY none;\ndisplay 47 48;\nGROUP all;\nDELETE (C> 0 0);\nDISPLAY all;\n";
- str += "GRID last;\n";
- // fuelle polygone
- //str += "rats;\n";
-
- // jlc markierung plazieren
- placeJlcMark();
- }
-
- // verhindert, dass das skript auf was anderes als boards angewendet wird
- if(board)
- board(B){
- real radius = 1.5; // radius der abrundungen an der unteren fusskante
- real hoehe = 21.2; // hoehe der unteren fusskante
-
- // man merke sich das master-design
- // um es spaeter wieder zu oeffnen
- string master = B.name;
-
- // save drc settings
- string drcfile = "";
- sprintf(drcfile, "%s/master_drc_settings", filedir(master));
- str += "SET CONFIRM YES; DRC SAVE '" + drcfile + "'; SET CONFIRM OFF;";
-
- // maskieren von Seite 1
- str += "DISPLAY all;\n";
- group(0, 110, 49.5, -10);
- side("SideA.brd", 0,0, 1.7, radius, hoehe, 6.9, 5.7);
-
- // drc einstellungen laden
- str += "DRC LOAD '" + drcfile + "';";
-
- // datei speichern
- write();
-
- // zurueck zum master fuer seite 2
- edit(master);
- str += "DISPLAY all;\n";
- // maskieren von Seite 2
- group(50.5, 110, 100, -10);
- side("SideB.brd", 50,0, 0, radius, hoehe, 7.3, 5.9);
-
- // DRC einstellungen laden
- str += "DRC LOAD '" + drcfile + "';";
-
- // datei speichern
- write();
-
- // master wieder oeffnen
- edit(master);
-
-
- // generierten code als skript zu eagle zurueckgeben
- exit(str);
- }
-
- dlgMessageBox(":Dies ist kein Board-context!\nBitte das ulp im Masterboard ausfuehren", "O&K");
-
|