/* INSPICKS (GED) -- Define Insertion Pick Texts on Library Symbols */ /* INSPICKS (GED) -- Bestueckpicks auf Layoutsymbolen erzeugen */ /* // Copyright (c) 1996-2006 Oliver Bartels F+E, Erding // Author: Manfred Baumeister // Changes History: // mb (980911) ADAPTED TO BAE V4.2. // mb (980713) ENHANCEMENT: Pulldown menu delimiters. // mb (980713) ENHANCEMENT: Dynamic multi-language support. // mb (971211) ADAPTED TO BAE V4.0. // mb (960619) ORIGINAL CODING. // // DESCRIPTION // // The inspicks User Language program may be used to define insertion // pick texts on layout part symbols of a selectable library in order // to prepare for insertion data output. inspicks automatically places // the insertion pick texts onto a selectable insertion data documentary // layer at either part origin, pin gravity point, or pin '1' coordinate. // An option for replacing existing insertion pick texts is also provided. */ // Includes #include "pop.ulh" // User Language popup utilities // Messages string UPRABORT = M_UPRABORT(); string UPRLIB = M("Layout-Bibliothek ? ","Layout Library ? "); string UPRINSLAY = M("Dok.-Lage (Seite 2) fuer Bestueckdaten selektieren!", "Select Doc. Layer (Side 2) for Insertion Data!"); string UPRREPTEXT = M("Texte auf Bestueckdatenlage ersetzen ? ", "Replace Texts on Insertion Data Layer ? "); string UPRPICKCOORD = M("Bestueckpick-Koordinate waehlen!", "Select Insertion Pick Point Coordinate!"); string UPRPICKNONE = M("%&Kein Best.-Pick","%&No Insertion Pick"); string UPRPICKORIG = M("Bauteil&nullpunkt","Part &Origin"); string UPRPICKGRPT = M("Pin-&Schwerpunkt","Pin &Gravity Point"); string UPRPICKPIN1 = M("Pin '&1'","Pin '&1'"); string ERRTEXT = M("Text konnte nicht erzeugt werden!", "Error placing text!"); string ERRLOAD = M("Fehler beim Laden von '%s'!", "Error loading element '%s'!"); string ERRSTORE = M("Fehler beim Speichern von '%s'!", "Error storing element '%s'!"); // Globals #define INSPICKCOL 14 // Color for insertion pick layer #define INSPICKTXT "$" // Insertion pick text #define INSPICKTXTS 0.00254 // Insertion pick text size #define PIN1NAME "1" // Pin '1' name // Main program main() { index L_NREF nref; // Named reference index string libname; // Library file name int inspicklayer; // Insertion pick layer int replace; // Replace option string ename = ""; // Element name double pickx,picky; // Insertion pick point coords. double pingx,pingy; // Pin gravity point coordinates double pin1x,pin1y; // Pin '1' coordinates int pincount; // Pin count int menucount; // Menu item count // Save current element with verification on request verifysave(); // Ask for library file name if ((libname=askddbfile(UPRLIB,DDBCLLPAD))=="") { error_abort(); } // Select insertion pick layer if (perror(UPRINSLAY),ged_asklayer(inspicklayer,3)) { error_abort(); } // Set color for insertion pick layer bae_setcolor(inspicklayer,14); // Get replace option replace=verify(UPRREPTEXT,1); // Iterate layout library parts while (scanddbenames(libname,DDBCLLPRT,ename)==1) { // Load part symbol if (bae_loadelem(libname,ename,DDBCLLPRT)==(-1)) { errormsg(ERRLOAD,ename); } // Test if insertion data layer contains text already if (istextonlayer(inspicklayer)) { // Text on insertion layer; verify replace if (!replace) { // Continue continue; } // Delete text from layer dellayertext(inspicklayer); } // Init menu item count menucount=3; // Init pin count pincount=0; // Init pin gravity point coordinates pingx=pingy=0.0; // Scan pin list forall (nref) { // Increment pin count pincount++; // Update pin gravity coordinates sum pingx+=nref.X; pingy+=nref.Y; // Update menu item count if (menucount<4) { menucount=4; } // Check on pin '1' match if (nref.NAME==PIN1NAME) { // Get pin '1' coordinates pin1x=nref.X; pin1y=nref.Y; // Update menu item count menucount=5; } } // Select origin type perror(UPRPICKCOORD); switch (bae_askmenu(menucount, UPRABORT,UPRPICKNONE,UPRPICKORIG, UPRPICKGRPT,UPRPICKPIN1)) { // Abort case 0 : error_abort(); // No insertion pick case 1 : continue; // Insertion pick at part origin case 2 : pickx=bae_planwsnx(); picky=bae_planwsny(); break; // Insertion pick at pin gravity point case 3 : pickx=pingx/pincount; picky=pingy/pincount; break; // Insertion pick point at pin '1' case 4 : pickx=pin1x; picky=pin1y; break; } // Store insertion pick text if (ged_storetext( INSPICKTXT,pickx,picky,0.0,INSPICKTXTS,inspicklayer,0)) { // Error placing text error(ERRTEXT); } // Store part symbol if (bae_storeelem(libname,ename)) { errormsg(ERRSTORE,ename); } } // Done perror("\n"); } int istextonlayer(int layer) // Test if text placed on specified layer // Returns: // zero if no text placed on layer or non-zero else // Parameters: // int layer : Layer to test for placed text { index L_TEXT txt; // Text index // Test if given layer contains text forall (txt where txt.LAYER==layer) { // Text placed on layer return(1); } // Return the no text placed code return(0); } void dellayertext(int layer) // Delete all text from specified layer // Parameters: // int layer : Layer to test for placed text { index L_FIGURE fig; // Figure list index // Test if given layer contains text forall (fig where fig.TYP==L_FIGTEXT && fig.LAYER==layer) { // Delete this text ged_delelem(fig); } } // User Language program end