毎日ちょっとずつしか進まないAutoCADのプログラムですが、今日はひとつの山を越えました。

これは図面を新規作成するときの初期設定画面です。
1社の図面だけを書くのであれば、その会社のレイヤー、線種、文字スタイルなどを定数としてプログラミングすればよいので、非常に話は単純なのですが、どこの会社の仕事をやるかわからない、あるいはどこの会社でも使用できるようなプログラムにするには、汎用性を持たせる必要があります。
たとえば、通り芯ひとつでも、ある会社ではA11というレイヤー名の黄色の1点鎖線を使い、ある会社ではGRIDというレイヤー名の赤い2点鎖線を使います。さらに印刷させる太さも各社ごとに細かい設定があります。
このような会社ごとの設定というのは、1:レイヤー 2:線種 3:印刷テーブル(PlotStyle) 4:文字スタイル 5:寸法スタイル の5つがあり、それぞれが絡み合っているため、すべてをきちんと設定しないとエラーになります。
これらの環境に対応させるには、会社ごとにプログラムを書き換えると大変な手間がかかるので、各社ごとの設定ファイルを用意し、それを起動時に読み込む、という方法をとらなくてはなりません。
レイヤー設定を読み込むだけなら簡単なのですが、問題は、たとえば、通り芯を書くプログラムであれば、A社仕様で動かしているときはA11、B社仕様のときはGRIDというレイヤーに書くように、自動的に切り替わるようにしなくてはならないという点です。
さらに、文字の引き出しなどでも、会社によって60度の線で引き出したり45度の線で引き出したり、矢印が開いていたり、塗りつぶしだったり、まさにいろいろ。これらになるべくフレキシブルに対応させる必要があります。(下図)
建築図面は、非常に面倒くさいのです。

今日はこれらのルーチンが、一応できたので、ちょっとほっとしているところです。
そのほかに、私が考えた、便利機能の中に「レイヤージャンプ」というものがあります。
通常、AutoCADで現在層を変更するには、レイヤーのプルダウンリストからレイヤーを毎回選んでクリックするか、自分専用のマクロを作るしかありません。
プルダウンからレイヤーを選ぶのは、AutoCAD上級者には非常にかったるい作業です。
マクロを作る方法は、いつも同じレイヤーで作業するならよいのですが、新しいレイヤーを追加すると、もう対応できません。
なんとか、コマンドラインにレイヤー名を打ち込むだけでそのレイヤーが現在層になるようなコマンドはできないか。
たとえば”GRID”と打つだけで、GRIDというレイヤーが現在層になり、しかもどこの会社のどんなレイヤー名にも対応できるものはできないか。
最初はリアクターという機能を使ったのですが、どうしてもうまくいかない。リアクターというのは、何か特定のイベントが発生するたびに特定のプログラムを動かすという機能です。これを利用し、「AutoCADが知らないコマンドが打ち込まれたら、それがレイヤー名のひとつであるかどうかを調べ、そうであればそのレイヤーを現在層にする」という方法を試みたのですが、だめでした。
その後、3日間考えたり、調べたりしました。
そしたらできたんです。しかもかなり単純な話でした。
おまけ機能として、オブジェクトが選択されている状態で、”GRID”とレイヤー名を打ち込むとそのオブジェクトとのレイヤーが”GRID”になるようにしました。
いずれ公開したいと思っているのですが、いろいろ整備しなければならないこともあるので、まだ時間がかかりそうです。
どなたかAutoLISPに取り組んでいる方いましたら、メールをください。結構孤独なんですよ、、わからないことがあっても聞く人がいないので。
コメント (6)
|
あまり内容はわかりませんが、とにかく進んでいて
よかったですね。
孤独な作業がんばってください。
ところでやはりメニューは日本語と英語版両方選べるように
tom in manila {58} 2007 年 3 月 22 日 @ 6:28 PMなっているんですよね。