ブレッドボードの絵を描くコマンドを作る(ピンヘッダー編)

その他の部品として、Raspberry PI2のピンヘッダーを描いていきます。

ピンヘッダーは左側に配置しますが、座標ルールを合わせるため、get_board_xxyyを改造しました。
14行目〜が、ピンヘッダー用の座標決めのソースです。
7行目〜13行目までに$〜offsetとあるのは、ブレッドボードを横にずらすために入れています。

     1	sub get_board_xxyy{
     2	        my($x,$y) = @_;
     3	        $x-=1;
     4	        $y-=1;
     5	        if($x < 4){
     6	                my $w = 20;
     7	                $xx = $x * $w + 15 + ($x >= 2)*285 + $xx_offset;
     8	                $y = 0 if($y >= 25);
     9	                $yy = $y * 20 + 35 + int($y /5) * 20 + $yy_offset;
    10	        }elsif($x < 20){
    11	                my $w = 19;
    12	                $xx = $x * $w + 10 + ($x >= 9)*32 + $xx_offset;
    13	                $yy = $y * 20 + 30 + $yy_offset;
    14	        }else{
    15	                my $w = 20;
    16	                $xx = ($x-20) * $w + 60;
    17	                $yy = $y   * 20 + 60;
    18	        }
    19	        return ($xx,$yy);
    20	}

ピンヘッダの描画は、put_pinheaderです。
考えるのが面倒になると、どんどんソースが荒れてきますね。廃墟のようなソースになると、リファクタリングするのが楽しくなります。
今は何も考えずに、ブログを書くのを楽するために、使えるようにするのが目標です。

     1	sub put_pinheader{
     2	        my($x1,$y1,$x2,$y2) = @_;
     3	        my($xx1,$yy1,$xx2,$yy2) = get_board_xxyy(@_);
     4	
     5	        my($p_xx1,$p_yy1) = ($xx1 - 7, $yy - 7);
     6	        print qq#<rect x="$p_xx1" y="$p_yy1" width="40" height="400" stroke="bla
     7	
     8	        for($i=$x1;$i<=$x2;$i++){
     9	                for($j=$y1;$j<=$y2;$j++){
    10	                        $p_xx = $p_xx1 + ($i-21)*20+1;
    11	                        $p_yy = $p_yy1 + ($j-1)*20+1;
    12	                        $c_xx = $p_xx + 9;
    13	                        $c_yy = $p_yy + 9;
    14	        print qq#<rect x="$p_xx" y="$p_yy" width="18" height="18" stroke="white"
    15	        print qq#<circle cx="$c_xx" cy="$c_yy" r="3" fill="gold" />#;
    16	                }
    17	        }
    18	}

今回は、サンプルコマンド(sample.sh)もコミットしました。

使ってみます。

~$ git clone https://github.com/takkete/bread.git
~$ cd bread
~$ . sample.sh

bread5-001

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA