X-Authentication-Warning: delorie.com: mail set sender to geda-user-bounces using -f X-Recipient: geda-user AT delorie DOT com X-Virus-Scanned: Debian amavisd-new at mail.linetec.nl Content-Type: multipart/mixed; boundary="------------YM2Il2nUVFfgxs6PHEj09sVc" Message-ID: Date: Mon, 2 Oct 2023 20:15:18 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.15.1 Subject: Re: [geda-user] PCB silk layer image script To: geda-user AT delorie DOT com References: <6877754c-dcb7-db34-dd39-419de060ad7a AT linetec DOT nl> <20231001223524 DOT 428ED8622949 AT turkos DOT aspodata DOT se> <33e767e8-c820-9b9c-513f-dc757d53e395 AT linetec DOT nl> <20231002154748 DOT BA848862295E AT turkos DOT aspodata DOT se> Content-Language: en-US From: "Richard Rasker (rasker AT linetec DOT nl) [via geda-user AT delorie DOT com]" In-Reply-To: <20231002154748.BA848862295E@turkos.aspodata.se> Reply-To: geda-user AT delorie DOT com Errors-To: nobody AT delorie DOT com X-Mailing-List: geda-user AT delorie DOT com X-Unsubscribes-To: listserv AT delorie DOT com Precedence: bulk This is a multi-part message in MIME format. --------------YM2Il2nUVFfgxs6PHEj09sVc Content-Type: multipart/alternative; boundary="------------cLqUDeq4d3uuV8jYmnR3fx4R" --------------cLqUDeq4d3uuV8jYmnR3fx4R Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hello Karl, Op 02-10-2023 om 17:47 schreef karl AT aspodata DOT se [via geda-user AT delorie DOT com]: > Richard Rasker: >> Op 02-10-2023 om 00:35 schreefkarl AT aspodata DOT se [viageda-user AT delorie DOT com]: > ... > Well I did use a very large width and the result > grow past the board size: > ./pcbsilk -W 1204mm TestLogo.jpg OK, that'll be the problem then, >> Anyway, I might give it >> a shot using grep, cut, sed and sort to manipulate the X and Y values -- >> even though I think it's going to be pretty inefficient. > You don't need to. Well, I already came up with this oneliner for the minimum y value from the pcb logo file: ymin=`egrep "\[[0-9]+\ [0-9]+\]" $silkname.pcb | cut -d " " -f2 | cut -d "]" -f1 | sort -n | head -1` > Below I made a 60mm wide logo, its minimum y extent was 220.4103mm. Yup, that seems right: echo $ymin -> *867757* yshift= echo 'scale=2;-$ymin*25.4/100000' | bc echo $yshift -> *-220.41* > Then I rerun pstoedit but told it to move the result > 220mm up: > > $ ./pcbsilk -W 60mm TestLogo.jpg > $ Pcb_test.pl polygon TestLogo.pcb > Layer 1, name poly: > 0.0000 220.4103mm 59.9996mm 279.0472mm > Layer 10, name silk: > $ pstoedit -q -f "pcb:-mm -tshifty -220" TestLogo.eps TestLogo.pcb And unfortunately, this is where things go wrong. It works just fine with the numerical value: $ pstoedit -q -f "pcb:-mm -tshifty -220.41" -ssp TestLogo.eps TestLogo.pcb But when I replace -220.41 with the variable $yshift calculated above, it no longer works; also see line 88 of the attached script version. It appears that $yshift is not expanded, even though double quote marks were used. > $ Pcb_test.pl polygon TestLogo.pcb > Layer 1, name poly: > 0.0000 0.4102mm 59.9996mm 59.0471mm > Layer 10, name silk: > $ > > The only thing remaining is to edit the file, removing the empty > layer and rename layer 1 to something like: Layer(5 "top silk" "silk"). Yes, I already fixed the layers, and I also created an extra command line switch to select the number of layers, with a default of 2, which causes top silk to end up on layer 6. The X size is now also correct, so all that still needs to be done is shift the logo to the top. Once everything works, the extra echo commands for $ymin and $yshift can be commented out, and removing the intermediate files can be restored. Best regards, Richard Rasker --------------cLqUDeq4d3uuV8jYmnR3fx4R Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 7bit

Hello Karl,

Op 02-10-2023 om 17:47 schreef karl AT aspodata DOT se [via geda-user AT delorie DOT com]:
Richard Rasker:
Op 02-10-2023 om 00:35 schreef karl AT aspodata DOT se [via geda-user AT delorie DOT com]:
...
 Well I did use a very large width and the result
 grow past the board size:
./pcbsilk -W 1204mm TestLogo.jpg 
OK, that'll be the problem then,
Anyway, I might give it 
a shot using grep, cut, sed and sort to manipulate the X and Y values -- 
even though I think it's going to be pretty inefficient.
You don't need to. 

Well, I already came up with this oneliner for the minimum y value from the pcb logo file:

ymin=`egrep "\[[0-9]+\ [0-9]+\]" $silkname.pcb | cut -d " " -f2 | cut -d "]" -f1 | sort -n | head -1`

Below I made a 60mm wide logo, its minimum y extent was 220.4103mm.

Yup, that seems right:

echo $ymin -> 867757
yshift= echo 'scale=2;-$ymin*25.4/100000' | bc
echo $yshift -> -220.41

 Then I rerun pstoedit but told it to move the result
220mm up:

$ ./pcbsilk -W 60mm TestLogo.jpg 
$ Pcb_test.pl polygon  TestLogo.pcb 
Layer 1, name poly:
        0.0000 220.4103mm 59.9996mm 279.0472mm
Layer 10, name silk:
$ pstoedit -q -f "pcb:-mm -tshifty -220"  TestLogo.eps TestLogo.pcb 

And unfortunately, this is where things go wrong. It works just fine with the numerical value:

$ pstoedit -q -f "pcb:-mm -tshifty -220.41" -ssp TestLogo.eps TestLogo.pcb 

But when I replace -220.41 with the variable $yshift calculated above, it no longer works; also see line 88 of the attached script version. It appears that $yshift is not expanded, even though double quote marks were used.

$ Pcb_test.pl polygon  TestLogo.pcb 
Layer 1, name poly:
        0.0000 0.4102mm 59.9996mm 59.0471mm
Layer 10, name silk:
$

The only thing remaining is to edit the file, removing the empty
layer and rename layer 1 to something like: Layer(5 "top silk" "silk").

Yes, I already fixed the layers, and I also created an extra command line switch to select the number of layers, with a default of 2, which causes top silk to end up on layer 6. The X size is now also correct, so all that still needs to be done is shift the logo to the top. Once everything works, the extra echo commands for $ymin and $yshift can be commented out, and removing the intermediate files can be restored.

Best regards,

Richard Rasker

--------------cLqUDeq4d3uuV8jYmnR3fx4R-- --------------YM2Il2nUVFfgxs6PHEj09sVc Content-Type: text/plain; charset=UTF-8; name="pcbsilk" Content-Disposition: attachment; filename="pcbsilk" Content-Transfer-Encoding: base64 IyEvYmluL2Jhc2gKCmlmIFsgIiQxIiA9ICItPyIgXSB8fCBbICIkMSIgPSAiLWgiIF0gfHwg WyAiJDEiID0gIi0taGVscCIgXQp0aGVuCiAgIGVjaG8gIlVzYWdlOiAgJDAgWy1XIHdpZHRo XSBbLUwgbGF5ZXJzXSBpbWFnZSIKICAgZWNobyAtZSAiXHRJbWFnZSBpcyBhbnkgaW1hZ2Ug ZmlsZSBvciBFUFMgZmlsZSIKICAgZWNobyAtZSAiXHRVc2UgLVcgc3dpdGNoIHRvIHNwZWNp Znkgd2lkdGgiCiAgIGVjaG8gLWUgIlx0V2lkdGggaXMgc3BlY2lmaWVkIGluIGluY2hlcyAo c3VmZml4Om5vbmUgb3IgaW4pIG9yIG1pbGxpbWV0ZXJzIChzdWZmaXg6IG1tKSIKICAgZWNo byAtZSAiXHREZWZhdWx0IHdpZHRoIGlzIDQwIG1tIgogICBlY2hvIC1lICJcdE51bWJlciBv ZiBsYXllcnMgc2hvdWxkIG1hdGNoIHRhcmdldCBwY2IiCiAgIGVjaG8gLWUgIlx0RGVmYXVs dCBudW1iZXIgb2YgbGF5ZXJzIGlzIDIiCiAgIGV4aXQgMApmaQoKIyBIYW5kbGUgY29tbWFu ZCBsaW5lIHN3aXRjaGVzCgpjYXNlICIkMSIgaW4KICAgICItTCIpCiAgICAgICAgbGF5ZXJz PSQyCiAgICAgICAgaWYgWyAiJDMiID0gIi1XIiBdCiAgICAgICAgdGhlbgogICAgICAgICAg ICB3aWR0aD0kNAogICAgICAgICAgICBpbWFnZWZpbGU9JDUKICAgICAgICBlbHNlCiAgICAg ICAgICAgIGltYWdlZmlsZT0kMwogICAgICAgICAgICB3aWR0aD00MG1tCiAgICAgICAgZmkK ICAgICAgICA7OwogICAgIi1XIikKICAgICAgICB3aWR0aD0kMgogICAgICAgIGlmIFsgIiQz IiA9ICItTCIgXQogICAgICAgIHRoZW4KICAgICAgICAgICAgbGF5ZXJzPSQ0CiAgICAgICAg ICAgIGltYWdlZmlsZT0kNQogICAgICAgIGVsc2UKICAgICAgICAgICAgaW1hZ2VmaWxlPSQz CiAgICAgICAgICAgIGxheWVycz0yCiAgICAgICAgZmkKICAgICAgICA7OwogICAgKikKICAg ICAgICBpbWFnZWZpbGU9JDEKICAgICAgICBsYXllcnM9MgogICAgICAgIHdpZHRoPTQwbW0K ICAgICAgICA7Owplc2FjCgojIFRvcCBzaWxrc2NyZWVuIGxheWVyIGlzIGZvdW5kIGF0IE4r NApzaWxrbGF5ZXI9JCgobGF5ZXJzICsgNCkpCgojIGVjaG8gIldpZHRoOiAgJHdpZHRoIgoj IGVjaG8gIkxheWVyczogJGxheWVycyIKIyBlY2hvICJTaWxrOiAgIExheWVyICRzaWxrbGF5 ZXIiCiMgZWNobyAiSW1hZ2U6ICAkaW1hZ2VmaWxlIgoKIyBDaGVjayBpZiBpbnB1dCBmaWxl IGV4aXN0cywgZXhpdCBpZiBpdCBkb2Vzbid0CmlmICEgWyAtZiAkaW1hZ2VmaWxlIF0KdGhl bgogICAgZWNobyAiRmlsZSBub3QgZm91bmQsIGV4aXRpbmciCiAgICBleGl0IDEKZmkKCmV4 dGVuc2lvbj0iJHtpbWFnZWZpbGUjIyoufSIKCiMgQ2hlY2sgaWYgaW5wdXQgaXMgRVBTIGZp bGUKZXBzdGVzdD1gZmlsZSAkaW1hZ2VmaWxlIHwgZ3JlcCBFUFNgCmlmIFsgIiRlcHN0ZXN0 IiA9ICIiIF0KIyBJbWFnZSBmaWxlIGlzIG5vdCBhbiBFUFMgZmlsZT8KIyBUaGVuIGNvbnZl cnQgaXQgdG8gRVBTIGZpcnN0CnRoZW4KICAgIHNpbGtuYW1lPWBiYXNlbmFtZSAkaW1hZ2Vm aWxlIC4kZXh0ZW5zaW9uYAogICAgY29udmVydCAkaW1hZ2VmaWxlIC10aHJlc2hvbGQgODUl ICRzaWxrbmFtZS5wYm0KICAgIHBvdHJhY2UgLW8gJHNpbGtuYW1lLmVwcyAtVyAkd2lkdGgg JHNpbGtuYW1lLnBibQogICAgIyByZW1vdmUgaW50ZXJuZWRpYXRlIGZpbGUKIyAgICBybSAk c2lsa25hbWUucGJtCmVsc2UKICAgICMgQW5kIGlmIHdlIGhhdmUgYW4gRVBTIGZpbGUgdG8g YmVnaW4gd2l0aCwgbWFrZSBzdXJlIHRoYXQgdGhlIHBzdG9lZGl0IGNvbW1hbmQgZmluZHMg aXQKICAgIHNpbGtuYW1lPWBiYXNlbmFtZSAkaW1hZ2VmaWxlIC5lcHNgCmZpCgpwc3RvZWRp dCAtcSAtZiAicGNiIiAtc3NwICRzaWxrbmFtZS5lcHMgJHNpbGtuYW1lLnBjYgoKIyBHZXQg bG93ZXN0IFkgY28tb3JkaW5hdGUgdmFsdWUKeW1pbj1gZWdyZXAgIlxbWzAtOV0rXCBbMC05 XStcXSIgJHNpbGtuYW1lLnBjYiB8IGN1dCAtZCAiICIgLWYyIHwgY3V0IC1kICJdIiAtZjEg fCBzb3J0IC1uIHwgaGVhZCAtMWAKZWNobyAkeW1pbgp5c2hpZnQ9IGVjaG8gInNjYWxlPTI7 LSR5bWluKjI1LjQvMTAwMDAwIiB8IGJjCmVjaG8gJHlzaGlmdAojIFJlcGVhdCBwc3RvZWRp dCwgbm93IHdpdGggc2hpZnQKcHN0b2VkaXQgLXEgLWYgInBjYjotbW0gLXRzaGlmdHkgJHlz aGlmdCIgLXNzcCAkc2lsa25hbWUuZXBzICRzaWxrbmFtZS5wY2IKCiMgSWYgaW5wdXQgZmls ZSBpcyBub3QgYW4gRVBTIGZpbGUsIHJlbW92ZSBpbnRlcm1lZGlhdGUgLmVwcyBmaWxlIHRv bwojIGlmIFsgIiRlcHN0ZXN0IiA9ICIiIF0KIyB0aGVuCiMgICAgIHJtICRzaWxrbmFtZS5l cHMKIyBmaQoKIyBNb3ZlIHRoZSBzaWxrIHNjcmVlbiBlbGVtZW50IHRvIHRoZSBjb3JyZWN0 IGxheWVyCnNlZCAtaSAicy9MYXllcigxIFwicG9seVwiKS9MYXllcigkc2lsa2xheWVyIFwi dG9wIHNpbGtcIikvZyIgJHNpbGtuYW1lLnBjYgoKIyBGaXggdGhlIGJvYXJkIGRpbWVuc2lv bnMKIyBGaXJzdCBnZXQgdGhlIGhpZ2hlc3QgWCBjby1vcmRpbmF0ZSB2YWx1ZQp4bWF4PWBl Z3JlcCAiXFtbMC05XStcIFswLTldK1xdIiAkc2lsa25hbWUucGNiIHwgY3V0IC1kICIgIiAt ZjEgfCBjdXQgLWQgIlsiIC1mMiB8IHNvcnQgLXJuIHwgaGVhZCAtMWAKCiMgVGhlbiBnZXQg dGhlIGhpZ2hlc3QgWSBjby1vcmRpbmF0ZSB2YWx1ZQp5bWF4PWBlZ3JlcCAiXFtbMC05XStc IFswLTldK1xdIiAkc2lsa25hbWUucGNiIHwgY3V0IC1kICIgIiAtZjIgfCBjdXQgLWQgIl0i IC1mMSB8IHNvcnQgLXJuIHwgaGVhZCAtMWAKCnltYXg9MTEwMDAwMAoKIyBDcmVhdGUgYSBu ZXcgZmlyc3QgbGluZSB3aXRoIHNpemUgZGVmaW5pdGlvbgpuZXdmaXJzdGxpbmU9IlBDQltc IlwiICR4bWF4ICR5bWF4XSIKCnNlZCAtaSAiMXMvLiovJG5ld2ZpcnN0bGluZS8iICRzaWxr bmFtZS5wY2IKCiMgUmVtb3ZlIHRoZSBsYXN0IDMgbGluZXMgd2hpY2ggZGVmaW5lIExheWVy IDEwCmhlYWQgLW4gLTMgJHNpbGtuYW1lLnBjYiA+IHRlbXBzaWxrLnBjYiAmJiBtdiB0ZW1w c2lsay5wY2IgJHNpbGtuYW1lLnBjYgoKCg== --------------YM2Il2nUVFfgxs6PHEj09sVc--