AutoCADLT2002 Tips−06




  コマンドの研究
 AoutoCADLT2002で作図コマンドを徹底研究。マクロの基礎固めをしよう。 何が出来て、何ができないの?

 
ARRAY
 

 回転コピーは、よく使う。きっと複雑なマクロだろうと思い 覗いて見た。
メニューマクロには、こう書いてあった。
***POP9
**MODIFY
.
.
ID_Array       [配列複写(&A)...]^C^C_array
.
 array [配列複写]はマウスボタン用でダイアログが表示する。-arrayがコマンドライン処理用だ。RとPのオプションで矩形状と円形状が両方できる。
正式にヘルプを読んでみた。回転複写角度は(反時計回り(+)/時計回り(-))だった。

キーボードから入力して見る。
コマンド: -array[Enter]
オブジェクトを選択: [click] 認識された数: 1
オブジェクトを選択:[Enter]
配列複写のタイプを入力 [矩形状(R)/円形状(P)] : p[Enter]
円形状配列複写の中心点を指定 または [基点(B)]: [click] [Enter]
複写の回数を入力: 8[Enter]
全体の複写角度を入力 <360>: 360[Enter]
複写するオブジェクトを回転? [はい(Y)/いいえ(N)] :[Enter]

マクロにすればこうなのだろう。
^C^C_-array;\;p;\\\;

杭の鉄筋断面用にツールバーに登録。


 
select  と copy と rotate
 

 回転複写は、選択、回転、コピーのコマンドを組み合わせマクロ処理はできないのだろうか。

回転のコマンドはrotate。
コマンド: rotate[Enter]
オブジェクトを選択:[click]  認識された数: 1
オブジェクトを選択:[Enter]

基点を指定:[click]
回転角度を指定 または [参照(R)]: 45[Enter]
これでは移動してしまう。copyと組み合わせる。

一旦その位置にコピーし2重にする。そのどちらかを回転する。
コマンド: copy[Enter]
オブジェクトを選択:[click]
オブジェクトを選択:[Enter]

コマンド: rotate[Enter]
オブジェクトを選択:[click] 
オブジェクトを選択:[Enter]
基点を指定:[click]
回転角度を指定 または [参照(R)]: 45[Enter]
これではオブジェクト選択を2回もしなければならない。

select で前選択としpオプションを使う。
コマンド: select[Enter]
オブジェクトを選択:[click]
オブジェクトを選択:[Enter]

コマンド: copy[Enter]
オブジェクトを選択:p[Enter]
オブジェクトを選択:[Enter]
基点 または 移動距離を指定:[Enter]
目的点を指定:[Enter]

コマンド: rotate[Enter]
オブジェクトを選択:p[Enter]
オブジェクトを選択:[Enter]
基点を指定:[click]
回転角度を指定 または [参照(R)]: 45[Enter]

マクロはこうだろう。
^C^C_select;_si;\_copy;_p;;@;@;_rotate;_p;;\\;

 selectはsingleモードで選択して直ぐ次のステップに移らせる。@ は、@0,0 ということ。相対座標0、0.つまりその場所ということ。
前半の部分で図形を拾い、同じ場所にコピーする。 そして _rotate(回転)コマンドを実行、p オプションで再度最初のオブジェクトを拾う。

360度をn分割ということで、角度計算なしにするには。分割数を最初に問合わせ。 内部計算。DIESEL式の登場。

^C^C_setenv;_N;\_select;_si;\_copy;_p;;@;@;_rotate;_p;;\$M=$(/,360,$(getenv,_N));

 文頭に*で繰り返しだそうだ。文の途中からは駄目なのか?
マクロコマンドはMSDOSのバッチファイルに相当するのだろう。 環境変数も10個使える。回転角を足して行って360度で終了。 if間数はあるので出来そうなのだが、1行プログラムの中で はジャンプ先が設定できない。ボタンに割り付けるマクロ としては限界が見える。やはりARRAYというコマンドが 独立してあることが、それを証明しているのだろう。


 
TRIM
 

鉄筋の箱抜きにはTrimをよく使う。コンクリートにマンホールの穴あけ をする時といった場合だ。
^C^C_trim 
 これはボタンに割り付けられたTrimのマクロ。

ヘルプを読んでもチョット分り辛い。貴方のせいではない、日本語として推敲がされてないと思う。実例で説明しよう。
例えば、鉄筋の上端を揃えたいというケースを考えよう。
白い線をまず[click]。選択終了の合図で[Enter]
後は、消したい側を[click]で切り揃えられて行く。

右側に延長したい部分が残る。ここはSHIFT+[click]で延長される。
extendというコマンドもあるが、trimでも延長ができる。



 トリムは切断線(エッジ)のどちら側を消すか指示しなければ なりません。だから、消す側をマウスで指示する仕様です。
線が多い場合、一発でトリムする機能はないのでしょうか。
前選択としてselectコマンドのfence(選択時Fと入力)を使うと トリム対象図形だけ選択できます。この後をマクロを使えば何とかなりそう ですが。ロジックとしては、対象図形のある端点のY座標と エッジのY座標を比較して大きいなら切る、小さいなら反対側を切る。 これを全対象図形行えばいいでしょう。 また繰り返しの条件判断がでてきます。コマンドマクロの限界 を越えているのでしょうか。
これが出来れば配筋図専用CADになってしまいます。少し研究 課題としておきます。ブロック、グループ、リージョンなどを使えば うまくゆかないか、2、3トライしましたが簡単には行かないようです。


 配筋図でトリムが一番必要なのは、この場合です。エッジである○の中 をクリックすると切りぬかれます。breakでは2点をヒットする必要 があります。Trimは1回で済みます。しかも線の近くをヒットすればよく、 交点ヒットのように神経を使いません。便利です。
でも、○の中をヒットで一括トリムが欲しい所です。これも研究 課題としておきます。


2003.10.5
by Kon