ブレッドボードの絵を描くコマンドを作る

旧画像

電子工作記事も書くようになり、ブレッドボードの絵を使うことが増えてきましたが、未だ絵は手描きです(libreoffice)。手描きはとても面倒です。ネットで良く見かけるブレッドボードの絵って何か特別なツール使ってるのでしょうけど、それを調べることすら面倒なので、次回からコマンドラインで作れるように、SVG絵画してみます。

まずは、30 x 10=300個の穴から。

~$ bread.sh
     1	a=`perl -e '
     2	foreach $n (0..299){
     3		$x = int($n / 30) * 20 + 85;
     4		$y = int($n % 30) * 20 + 25;
     5		print qq#<rect x="$x" y="$y" width="9" height="9" fill="glay"></rect>#;
     6	}
     7	'`
     8	
     9	cat <<EOL > /tmp/tmp.svg
    10	<svg width="384" height="650">
    11	<rect x="0" y="0" width="384" height="650" fill="white"></rect>
    12	$a
    13	</svg>
    14	EOL
    15	inkscape -z -e out.png /tmp/tmp.svg

bread-001
左右5列ずつで分かれているので、3行目を以下のように修正します。

     3		$x = int($n / 30) * 20 + 85 + ($n >= 150)*25;

bread-002
電源ラインの穴も作ります。

   7  foreach $n (0..99){
     8          $x = int($n / 25) * 20 + 15 + ($n >= 50)*285;
     9          $y = int($n % 25) * 20 + 30 + int(($n % 25) /5) * 20;
    10          print qq#<rect x="$x" y="$y" width="9" height="9" fill="glay"></
    11  }

bread-003
まあこれで十分な気もしますが、さらにいろいろ飾り付けます。

~$ cat -n bread.sh
     1	a=`perl -e '
     2	foreach(split / /, "0,60 62,125 197,125 324,60"){
     3		my($x,$w) = split /,/,$_;
     4		print qq#<rect x="$x" y="0" width="$w" height="650" stroke="black" fill="none"></rect>#;
     5	}
     6	foreach(split / /, "8:red 50:blue 334:red 376:blue"){
     7		my($x,$c) = split /:/,$_;
     8		print qq#<line x1="$x" y1="20" x2="$x" y2="620" stroke="$c" stroke-width="2"/>#;
     9	}
    10	foreach $n (0..99){
    11		$x = int($n / 25) * 20 + 15 + ($n >= 50)*285;
    12		$y = int($n % 25) * 20 + 30 + int(($n % 25) /5) * 20;
    13		print qq#<rect x="$x" y="$y" width="9" height="9" fill="glay"></rect>#;
    14	}
    15	foreach $n (0..59){
    16		$num=($n%30)+1;
    17		$x = int($n / 30) * 20 + 75 + ($n >= 30)*215;
    18		$y = int($n % 30) * 20 + 35;
    19		print qq#<text x="$x" y="$y" font-size="15" text-anchor="middle">$num</text>#;
    20	}
    21	$x=90;
    22	foreach $ch (split //,"abcdefghij"){
    23		print qq#<text x="$x" y="15" font-size="15" text-anchor="middle">$ch</text>#;
    24		print qq#<text x="$x" y="635" font-size="15" text-anchor="middle">$ch</text>#;
    25		$x += 20;
    26		$x += 25 if($ch eq "e");
    27	}
    28	foreach $n (0..299){
    29		$x = int($n / 30) * 20 + 85 + ($n >= 150)*25;
    30		$y = int($n % 30) * 20 + 25;
    31		print qq#<rect x="$x" y="$y" width="9" height="9" fill="glay"></rect>#;
    32	}
    33	'`
    34	
    35	cat <<EOL > /tmp/tmp.svg
    36	<svg width="384" height="650">
    37	<rect x="0" y="0" width="384" height="650" fill="white"></rect>
    38	$a
    39	</svg>
    40	EOL
    41	inkscape -z -e out.png /tmp/tmp.svg

bread-004
後は、これに部品が載せられるようにすれば良いですね。

コメント

タイトルとURLをコピーしました