Eagle 7.7 exporteren van solder mask

Ik ben op zoek naar informatie voor het programmeren van een Eagle ULP programma.

Ik heb vandaag een groot deel van de dag geprobeerd om een solder mask te exporteren naar een .png afbeelding. Dat lukt wel als je het naar gerber exporteert, ook als je er een postscript bestand van maakt, maar niet naar gewone afbeeldingen.
Niet alleen .png maar ook alle andere formaten tonen de arcering die je met Fillstyle aanzet.

Het uitvoeren van:

code:

DISPLAY NONE 29;
EXPORT IMAGE 'tStop.png' MONOCHROME 2400;
DISPLAY NONE 30;
EXPORT IMAGE 'bStop.png' MONOCHROME 2400;

genereert afbeeldingen met een zichtbare arcering.

Ik kan "Fillstyle" in de interface naar volledige vulling zetten en dat lost het probleem voor het moment op maar ik wil het liever aansturen vanuit een .ulp die na het exporteren de originele instellingen weer terug zet.

Iemand een idee hoe ik 'Fillstyle' vanuit een .ulp programma kan aanpassen?

reading can seriously damage your ignorance

Ik denk dat je die instellingen ook wel kan aanpassen in een ULP.

Of je "originele instelling" kan opslaan en restaureren weet ik niet. Ik heb met eagle alleen doe eerst dit doe dan dat scripts gemaakt.

Edit: Is het misschien een idee om eerst een gerber te maken en dan van de gerber een plaatje? Gewoon om jou probleem te omzeilen.

Ik vermoed dat je de plaatjes wilt hebben om in het "productie-proces" te gebruiken. Dat is waar Gerber voor is.

De "filosofie" achter de plaatjes in eagle is dat je daarmee mensen-leesbare documentatie-plaatjes aan het maken bent. Vandaar dat de "layer view" settings meegenomen worden.

[Bericht gewijzigd door rew op vrijdag 11 september 2020 19:11:45 (51%)

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

Iemand schreef op het element14 forum: "Where is the syntax manual for ULP?"
Iemand anders schreef heel netjes: "perhapse under: "User Language - Object Types" in the online help?"
En zo zie je maar weer: RTFM!

code:

/* LIST_LAYERS.ULP */
string line, collect_lines="";
if( board ) board(B) {
    B.layers(L) {
        sprintf( line,"Nr: %3d\tLayer: %-20s\tFillstyle: %d\n", L.number, L.name, L.fill );
        collect_lines += line;
        /*
        if( L.number == 29 ) {
            L.fill = 1;
        }                
        if( L.number == 30 ) {
            L.fill = 1;
        }
        */
    }
    dlgMessageBox( collect_lines, "+OK" );
} else {
    dlgMessageBox("Start this ULP in a Board!", "+OK");
}
exit(0);

Ik kan ze al zichtbaar maken. Bij wijzigen (het uitgecommentarieerde stuk code) krijg ik een syntax error.

Bedankt voor het meedenken rew. Ik wil inderdaad het productieproces zoveel mogelijk automatiseren.

EDIT: Dit staat ook in de manual:
The members of array elements of object types can't be accessed directly:
UL_LAYER is een object type. dammit!

EDIT2:
Toch nog voor elkaar gekregen:

code:

/* MASK2PNG.ULP */
string buf, cmd="", visible_layers="";
string fillstyle29, fillstyle30;

void save_layers( void ) {
    board(B) {
        B.layers(L) {
            if( L.visible ) {
                sprintf( buf, " %d", L.number ); 
                visible_layers += buf;
            } 
        }
    }
}

void save_fillstyle( void ) {
    board(B) {
        B.layers(L) {
            if( L.number == 29 ) {                        
                sprintf( fillstyle29, "%d ", L.fill ); 
            }                
            if( L.number == 30 ) {
                sprintf( fillstyle30, "%d ", L.fill ); 
            }
        }
    }
}

if( board ) board(B) {
    save_layers();
    save_fillstyle();
    cmd += "DISPLAY NONE 29;\n";
    cmd += "SET FILL_LAYER 29 1;\n";
    cmd += "EXPORT IMAGE 'tStop.png' MONOCHROME 2400;\n";
    cmd += "SET FILL_LAYER 29 "+ fillstyle29 +";\n";
    cmd += "SET FILL_LAYER 30 1;\n";
    cmd += "DISPLAY NONE 30;\n";
    cmd += "EXPORT IMAGE 'bStop.png' MONOCHROME 2400;\n";
    cmd += "SET FILL_LAYER 30 "+ fillstyle30 +";\n";
    cmd += "DISPLAY NONE" + visible_layers + ";\n";
    dlgMessageBox( cmd, "+OK" );
    exit (cmd);
} else {
    dlgMessageBox("Start this ULP in a Board!", "+OK");
    exit(0);
}

[Bericht gewijzigd door hennep op vrijdag 11 september 2020 21:35:10 (37%)

reading can seriously damage your ignorance
fatbeard

Honourable Member

Een ULP kan het board niet wijzigen, dat levert een syntax error op (alle objects zijn read-only).
Met een script (door een ULP gegenereerd en gestart) kan het wel, dat script kan ook de export regelen en de boel weer terugzetten.

Een goed begin is geen excuus voor half werk; goed gereedschap trouwens ook niet. Niets is ooit onmogelijk voor hen die het niet hoeven te doen.

Het bovenstaande ulp script werkt wel en laat ook de situatie achter zoals die bij opstarten wordt aangetroffen.
Ik had nog niet eerder zelf een ulp geschreven, alleen bestaande aangepast. Ik heb weer een boel geleerd.

reading can seriously damage your ignorance
fatbeard

Honourable Member

Je hebt dus precies gedaan wat ik zei: een ULP een script laten genereren en uitvoeren wat de gevraagde wijzigingen aanbrengt, de uitvoer doet en de wijzigingen weer terugzet naar de originele toestand.

Een goed begin is geen excuus voor half werk; goed gereedschap trouwens ook niet. Niets is ooit onmogelijk voor hen die het niet hoeven te doen.

Ik heb m'n schema zojuist ge-renumberd. Ook dat is een operatie die objecten (de componenten) verandert (de naam).

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

Ik ben nu de veranderingen in cam2image.ulp aan het aanbrengen.
Wat ik nog mis is een mogelijkheid om een .png afbeelding te inverteren. Moet ik toch nog een handmatige bewerking doen.

@ fatbeard, Dat had ik inderdaad al gedaan, toen jij het schreef, behalve dat ik uit jouw tekst begreep dat er een script wordt gegenereerd als in een script-bestand aanmaken.
Een bijzondere constructie die ik nog niet eerder ben tegengekomen. Eagle verwerkt de string die door het ulp script wordt geretourneerd als een reeks commando's.

@ rew, wordt dat ook gedaan door een script te genereren?
Gebruik je daar een standaard ulp voor?

reading can seriously damage your ignorance

Ik wist dat er een ULP voor was. Ik wilde het eigenlijk in het board doen, maar kon de ULP daarvoor niet vinden. Even gegoogled en... suffe oplossingen als: "renumberd je board, maar niet je gekoppelde schema" kan je downloaden van github. Dat wil ik natuurlijk niet, dus niet de moeite waard om te downloaden. De het andere antwoord dat ik vond zei: "Het staat ook in het menu 'tools'". Nu ben ik bekend met "run ULP: bom.ulp", maar m'n stagiaire bleek hem in file->export->bom te vinden. Blijkt gewoon kwa look-and-feel precies dezelfde ULP te zijn. Ik denk dat het dezelfde IS. En hier ook. Tools->renumber zal gewoon die ULP aanroepen. Volgens mij is dat NIET via een script: daar waar dat soort dingen wel via een script gebeurt, dan krijg ik een popup: "weet je zeker dat je dit script wil uitvoeren?"

Ik heb uiteindelijk m'n schema een heel klein beetje netter gemaakt en dan is de nummering die ik krijg op het board ook voldoende regelmatig. (het is te vol voor de bijschriften dus bij een serie weerstanden heb ik R8 en R15 en je moet maar bedenken dat daartussen in R9, R10, R11, R12, R13 en R14 zitten).

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/