7MHzDSB・CWトランシーバーの回路も固まってきたのでそろそろケース入れを検討しようと思います。
ケースレイアウトは現物合わせで適当に穴を開けるのですが、少しは正確に穴あけをしようと思い、ケースをレイアウトするツールを作ってみました。
お絵かきツールは色々あるのですが、操作が複雑だったり、原寸印刷ができなかったりするので、作ってみることにしました。
このツールはお絵かきした画面をBMPファイルに出力して、既存の画像編集ソフトの印刷機能を使って印刷するという仕組みで、BMPファイルを出力するところまでがこのツールの機能範囲です。
プリンタに合わせて用紙はA4横向きとします。
A4サイズは297mm x 210mmなので、上下左右の余白を10mmとすると277mm x 190mmとなります。
解像度は大きい方がいいのですが、あまり大きいとBMPファイルサイズが大きくなりすぎるので、とりあえず300DPIとします。
計算してみると300DPIといえども巨大なサイズとなり、到底画面に表示することはできません。
277mm x 300DPI / 25.4mm = 3272 dot
190mm x 300DPI / 25.4mm = 2245 dot
プログラムはHSPで開発していますが、大きな画面をスクロールバー付きで表示する機能が無いようなので、大きな仮想画面に描画して、結果を縮小表示して確認することにしました。
さてお絵かきの方法ですが、パワーポイントなどのようにGUIで線を引いたり、オブジェクトを移動させたりするのが一般的ですが、微妙な位置合わせや一括変更をGUIで操作するのは至難の技なので、昔ながらのline命令、box命令、circle命令などで描画するプログラムを書く方式にしました。
描画プログラムの例です。
ケースのレイアウトでは、SWの穴を直径6mmで開けて、同じ高さで20mm右に移動したところにVRの穴を7mmで開けて、・・・、やっぱり20mmじゃ狭いので25mmにして、・・・など、基準点から移動しながらレイアウトする場合が多いので、基準点のX・Y座標を元に移動すようにしました。
左列の例では、画面横幅一杯の基準線をY座標のみ変えながら3本引いています。
line命令なのですが、HSPにline命令が既にあるのでlin命令にしています。
ここでXMMは横幅の277mmなので
y=35: lin 0,y,XMM,y は (0mm,35mm)-(277mm,35mm)の線を引くことになります。
BMPファイルでは3272 dotの線になりますが、lin命令が変換してくれるので、mm単位で指定すれば良いので簡単です。
次に「y=17」でY座標の基準を17mmに設定して穴あけサブルーチンを呼んでいます。
ここで「y=16」に変更すれば、一括して1mm上に穴を開けられます。
中央列の例ではX座標を右に移動させながら穴を開けています。
x=10: ana x,y,5 は ana 10,17,5 となり、(10mm,17mm)を中心に直径5mmの穴を開けます。
ps x,y: mes "Led" で 穴の下の適当な位置にコメントとして"Led"の文字を描画します。
x+=20: ana x,y,6 で Ledの穴から右に20mm移動したところに電源SW(Pow)の穴を開けています。
右列の例ではラベル用の文字列をやはり右に20mmずつ移動しながら適当な大きさで書いています。
これを切り貼りすれば、手書きラベルよりは格好がいいです。
txt命令内でフォントを指定できるので、任意のフォントを使用できます。
全ての描画が終わると、確認用の画面が縮小表示されます。
まだ確定していませんが、7MHzDSB・CWトランシーバのレイアウトです。
同時にBMPファイルが300DPIの解像度で出力されていますので、後は既存の画像編集ソフトを使用して印刷します。
下の例はBMPファイルの一部を切り出したものですが、補助線のグリッドが10mm x 10mmです。
画像編集ソフトとして「
Photoscape」を使用しました。
上のプログラム例で使用しましたが、画像の合成機能が便利です。
印刷機能が充実していて、DPI指定で印刷ができるので、例えば300DPIを想定して作ったファイルを300DPIの設定で印刷すると原寸で印刷できます。
実際に印刷してみると0.5%弱の誤差がありますので補正が必要です。
300DPIの場合変換値は11.811dot/mmなのですが、印刷してから定規で測って変換値を補正しました。
また、プリンターによってはX方向とY方向の補正値が異なりますので、下のlin命令のように軸別に補正をする必要があります。
#define DPMX 11.767439 ;dot/mm
#define DPMY 11.903606 ;dot/mm
line lin_x1 * DPMX, lin_y1 * DPMY, lin_x2 * DPMX, lin_y2 * DPMY