2013年7月26日金曜日

DIESEL式のマクロ(寸法記入 / 線分系作図)

今回は、「寸法記入 / 線分系作図マクロを作る」で作成した部分メニューの構文について説明しましょう。

◆ 「寸法記入」 のマクロ

最初に、「水平・垂直 長さ寸法直列記入」のマクロをみてみましょう。
水平または垂直の長さ寸法を連続して直列に作成するマクロです。作成する画層は「DIM」です。

^C^C$M=$(if,$(eq,$(getvar,clayer),DIM),,-layer;M;DIM;C;1;;;)_dimlinear;\\\_dimcontinue;

このマクロでは、寸法オブジェクトを「DIM」画層に作成します。そのため、現在の画層が「DIM」であるかないかによる処理に対してDIESEL式を用いています。

^C^C これはキャンセルを意味します。
何か実行中のコマンドがあっても終了させます。
$M=$(if,$(eq,$(getvar,clayer),DIM),,
-layer;M;DIM;C;1;;;)
もし現在の画層が DIM であればスルー、そうでなければ画層 DIM を規定色=1(赤)として作成。
_dimlinear;\\\_dimcontinue; dimlinearコマンドを実行し、始点、終点、寸法位置を指示。その直後にdimcontinue(直列寸法記入)を実行。


次は、「平行寸法直列記入」のマクロです。

最初の2点で指示された角度の平行寸法を連続して直列に作成するマクロです。作成する画層は「DIM」です。

^C^C$M=$(if,$(eq,$(getvar,clayer),DIM),,-layer;M;DIM;C;1;;;)_dimaligned;\\\_dimcontinue;


^C^C これはキャンセルを意味します。
何か実行中のコマンドがあっても終了させます。
$M=$(if,$(eq,$(getvar,clayer),DIM),,
-layer;M;DIM;C;1;;;)
もし現在の画層が DIM であればスルー、そうでなければ画層 DIM を規定色=1(赤)として作成。
_dimaligned;\\\_dimcontinue; dimlinearコマンドを実行し、始点、終点、寸法位置を指示。その直後にdimcontinue(直列寸法記入)を実行。
 

◆ 「線分系」 のマクロ

次に、「振分線分」のマクロを検証してみましょう。

振分幅を入力し、選択した既存線分をその両サイドに振分て複写するマクロです。作成された振分線分の画層は現在の画層となります。

^C^C_setvar;ucsicon;0;_offsetdist;\select;single;\dist;_none;@;_per;@;ucs;3;_none;$M=$(getvar,lastpoint);_per;@;;_pickbox;1;_offset;;$(getvar,distance),0;_none;0,0;;_chprop;L;;la;$M=$(getvar,clayer);;_erase;_l;;_offset;;$(getvar,distance),0;_none;$(*,2,$(getvar,distance)),0;;_chprop;L;;la;$M=$(getvar,clayer);;_oops;_pickbox;$(getvar,pickbox);_ucs;_p;

かなり複雑なマクロのように見えますが、割合簡単な部分の集合体であることが理解できるでしょう。

^C^C これはキャンセルを意味します。
何か実行中のコマンドがあっても終了させます。
_setvar;ucsicon;0; システム変数の ucsicon の値を0に設定。(UCSアイコン非表示)
_offsetdist;\ offsetdist (オフセット距離)の値を入力。
select;single;\ 単独のオブジェクトを選択。(線分の選択)
 dist;_none;@;_per;@;ucs;3;_none;
$M=$(getvar,lastpoint);_per;@;;
UCSの原点とY方向を線分選択点および線分方向に設定。
_pickbox;1; pickboxの値を1ピクセルに設定。
_offset;;$(getvar,distance),0;
_none;0,0;;
UCSのX方向に事前に指定された距離でオフセットを実行。
_chprop;L;;la;$M=$(getvar,clayer);; 最後のオブジェクト(オフセット線分)の画層を現在の画層に更新。
_erase;_l;; 最後のオブジェクト(オフセット線分)を一旦削除。(最後に復活)
_offset;;$(getvar,distance),0
;_none;$(*,2,$(getvar,distance)),
0;;
UCSのX方向に事前に指定された距離の2倍でオフセットを実行。
_oops; 最後に削除したオブジェクト(オフセット線分)を復活
_pickbox;$(getvar,pickbox); pickboxの値を元に戻す。
_ucs;_p; UCSの設定を元に戻す。
 
次は、「中間点通過線分」のマクロです。
線分を選択しもう一方の線分までの中間点を通過する位置に、最初に選択した線分を複写するマクロです。

^C^C_snapbase;\_line;$M=$(getvar,snapbase);_per;\;_osmode;640;__dist;$M=$(getvar,snapbase);"$M=$(getvar,lastpoint)";_erase;L;;_offset;"""""""$M=$(/,$(getvar,distance),2.0)""""""";"""$M=$(getvar,snapbase)""";"""""$M=$(getvar,lastpoint)""""";;_osmode;$(getvar,osmode);

ここでは、実行を遅らせるテクニックを学びましょう。

事前の入力値を反映させるために後で評価するDIESEL式を遅らせる必要が生じます。
ダブルクォーテーションで囲むと、その部分の実行を遅らせることができます。
更に遅らせるにはダブルクォーテーションを2つ追加し計3個とします。
更にさらに遅らせる場合は4個追加して合計7個のダブルクォーテーションとします。
更に8個追加の合計15も成立します。

^C^C これはキャンセルを意味します。
何か実行中のコマンドがあっても終了させます。
_snapbase;\ スナップの基点を設定。(最初の線分の端点指示)
_line;$M=$(getvar,snapbase);_per;\; スナップ基点を始点とする線分の終点指示。(もう一方の線分の端点)
_osmode;640; オブジェクトスナップの値を垂線,近接点に設定。
__dist;$M=$(getvar,snapbase);"
$M=$(getvar,lastpoint)";
スナップ基点と最後の点間の距離を取得。直前に実行された線分の終点取得時の値を反映させる為に最後の点部分を1回遅らせる。
_erase;L;; 最後のオブジェクト(線分)を削除。
_offset;"""""""$M=$(/,$(getvar,
distance),2.0)""""""";"""$M=
$(getvar,snapbase)""";"""""
$M=$(getvar,lastpoint)""""";;
オフセットを実行します。

オフセットの距離は事前に取得した距離の半分ですが、1回遅らせて取得した距離を反映させるために2回遅らせなければなりません。

オフセットする元のオブジェクトはスナップ基点で選択されるオブジェクトですが、最初に指示されたスナップ基点を反映させるために1回遅らせなければなりません。

オフセットする方向は線分の終点として指示された点ですが、1回遅らせて取得した点を反映させるために2回遅らせなければなりません。

結果として、最初の点で選択された線分が、線分の終点として指示された点との中間点に複写されることになります。
_osmode;$(getvar,osmode); オブジェクトスナップの値を元に戻します。
これは遅らせる処理をさせない為に、640に設定される以前の値が採用されます。
 

次は、「矢印線分」のマクロです。

指示する2点間に線分を作成し、その始点に矢印のブロックを挿入するマクロです。

^C^C_snapbase;\_line;$M=$(getvar,snapbase);\;-insert;ARROWHED;"$M=$(getvar,snapbase)";"$M=$(getvar,userr1)";;"$M=$(getvar,lastpoint)";

条件として、縮尺の値がシステム変数の userr1 に設定されていなければなりません。
更に、矢印のブロックが、ARROWHED という名前で登録されていることが条件です。

^C^C これはキャンセルを意味します。
何か実行中のコマンドがあっても終了させます。
_snapbase;\ スナップの基点を設定。(線分の始点指示)
_line;$M=$(getvar,snapbase);\; スナップの基点を始点とする線分の作成、(終点が最後の点)
-insert;ARROWHED;"$M=$(getvar,
snapbase)";"$M=$(getvar,userr1)
";;"$M=$(getvar,lastpoint)";
ブロックARROWHEDを挿入。挿入基点はスナップの基点(線分の始点)で、倍率はシステム変数userr1値(縮尺)、挿入角度は最後の点(線分の終点)の方向。


次回は再び実際のコマンド作成に戻ります。
次回更新は8月2日(金)を予定しています。


* * * * * * * * *

メニューカスタマイズのノウハウを駆使して開発した「AutoCAD LT」 対応の建築・設備設計支援ツール『CustomARCH LT』シリーズを発売中です。

製品詳細については下記でご紹介しています。
    
CustomARCH LT 建築
    
CustomARCH LT 電気設備

0 件のコメント:

コメントを投稿