Jw_cad、外部変形とは何か
Jw_cadは根強いシェアを誇るフリーのCADソフトウェアで、ホビー用途からプロまで幅広く支持されている。ちなみに僕の実家は造園設計屋なのだが、DOS版までさかのぼると15年近く商売道具として利用しているようだ。多くの他のソフトウェアと同じく、機能拡張のために様々なプラグインを利用することができる。Jw_cadではプラグインは「外部変形」という名前で呼ばれている。
Jw_cad単体でも直感的で優れた操作性を備えたすばらしいソフトだが、外部変形を利用することで図形の描画や処理の自動化など、ユーザーごとの細かい要求に手が届くようになっている。外部変形の開発に必要なSDKは公開されていて、既に数多くの秀逸なプログラムが無償で公開されている。
外部変形を作る意義
Jw_cadを掃除機に例えるのはひょっとしたら僕が人類初かもしれないのだが、もし先をゆく者がいたらメールをください。人類初を泣く泣く譲らねばならないので。話をもどそう。Jw_cadが掃除機だとしたら外部変形はノズルであり、自分の部屋の隅にフィットしたノズルは自分で作ろうと思えば不可能ではない。テキストファイルをプログラムで操作するスキルさえあれば、RubyでもCでもVBでも、プログラムの種類関係なく開発可能である。
外部変形で何が出来るのか。さすがに自分の代わりに仕事をしてもらい、空いた時間を腹筋の強化に当てるというのは難しいかもしれない。がしかし、いちおう無限の可能性を秘めており、例えば特定の長さの線分のみを選択状態にしたり、位置を指定するだけでマンホールの絵を自動で描いてくれたりする。外部変形を自作できれば、CADオペレータである親戚のおじさん(もしそういう人がいれば)にそれをプレゼントし、見返りとして5万円くらいの小遣いをゲットできるかもしれない。おっと、執筆者の汚い一面が見えてしまったので金の話はこのくらいにしておこう。
C++で作る
先にも触れた通り、外部変形はテキスト操作ができればプログラムの種類は問われない。これはどういう仕組みなのか。実は、外部変形が実行されるとJw_cadがテキストファイルを出力すると同時に、それを処理する実行ファイルを実行するのである。そのテキストには図形データが含まれていて、実行ファイルは必要に応じてそれを編集し、あるいは新しいデータを追加し、上書きをする。そのタイミングでJw_cadがテキストを改めて読み、外部変形の処理内容を反映してくれる、という仕組みである。プラグインの実装方法は他にDLLなどがあるが、外部変形のようにテキストファイルを介したものは、柔軟性があって仕組みとしてユニークである。
今回はC++で外部変形の最小のプログラムを作成することにした。C++を選んだしっかりとした理由は無いけれど、あえてメリットを挙げるとすれば、OSとの親和性が良くて処理も速い。では、具体的な手順を・・。
コンパイラはVisual Studio .NETを使用する。新しいプロジェクトを作成し、 Win32プロジェクトを選択。次に、プロジェクトを作成するディレクトリを指定する(ディレクトリの場所は任意)。アプリケーションの設定でコンソールアプリケーション、空のプロジェクトを選択する。ここまでが下ごしらえ。
肝心のソースコードを書く
プロジェクトにソースファイルを追加し、それにコードを書いていきます。ファイル名は「helloworld.cpp」としておきます。
1: 2: 3: 4: 5: 6: 7: 8: |
#include <stdio.h> int main(){ if(FILE *fp = fopen("JWC_TEMP.TXT","w")){
} fputs("ch 0.0 0.0 100 0 \" hello world!\n",fp);
}fclose(fp); |
全部で8行と短いコードになりました。4行目でオープンしているJWC_TEMP.TXTというテキストファイルが、Jw_cadが吐き出した図形情報です。5行目で、座標(0,0)に文字「hello world!」を追加するための記述をしています。文字列冒頭の「ch」は横文字の文字列、という意味です。
テキストファイルの書式については、
Daisy Daisy「jwc_temp.txtの解説」
にて詳しい説明がされています。
実行ファイルをビルドし、それをJw_cadをインストールしたフォルダにコピーします。
外部変形の実行には、他にバッチファイルが必要で、今回は以下のような記述です。
1: 2: 3: 4: 5: 6: |
@REM 外部変形のハローワールド @echo off REM #jww REM #h0 REM #e helloworld.exe |
次回は図形を選択し、それを元に何らかの線を描画する外部変形を作る予定です。
ダウンロードページ最後までお読みいただきありがとうございました <(_ _)>