■中級 5.基点コピー[COPYBASE] | AutoCADマクロ屋本舗
"OFFSET"[オフセット]コマンドを実行してみると
オフセットされたオブジェクトのプロパティは
オフセット元のオブジェクトのプロパティと同じです。

その為、オフセットされたオブジェクトのプロパティを変更するには
"CHANGE"または"CHPROP"コマンドで変更しなければなりません。


【マクロ作成】■初級
6. オブジェクトプロパティ変更
9. 現在の設定を変更して作図


これらを応用し、マクロを作成してみましょう。


それでは
オフセットしたオブジェクトを現在の画層に変更するマクロを
作成してみましょう。


■その1
1)"OFFSET"[オフセット]コマンドを実行
^C^C_offset;

2)オフセット間隔を記入するする為、\を記入
^C^C_offset;\

3)オフセットするオブジェクト選択/オフセットする側の点を指定
^C^C_offset;\\\;

4)"CHPROP"コマンド実行
^C^C_offset;\\\;_chprop;

5)オフセットされたオブジェクトを"LAST(L)"で選択
^C^C_offset;\\\;_chprop;L;;

6)画層を変更する為、"CHPROP"オプション[画層(LA)]記入
^C^C_offset;\\\;_chprop;L;;LA;

7)DIESEL開始"$M="記入
^C^C_offset;\\\;_chprop;L;;LA;$M=

8)現在の画層を示すシステム変数"CLAYER"をDIESEL関数で記入
^C^C_offset;\\\;_chprop;L;;LA;$M=$(getvar,clayer);;


これで、オフセットされたオブジェクトを、現在画層に変更出来ますが
ここで、注意しなければならないのが、選択オプション"LAST[最後(L)]"です。

この"最後"と言う意味は、現在開いている図面ファイルにおいて
あくまでも、現在表示中の画面内
最後に描かれたオブジェクトを指します。

その為、今回のマクロで、"オフセット間隔"を記入する際
画面から外れてしまう程の大きな数値を記入してしまうと
"CHPROP"コマンド実行後の、選択オプション"LAST[最後(L)]"で
オフセットされたオブジェクトが選択されず
表示中の画面内で、1番最後に描かれたオブジェクトを選択してしまいます。


これを回避するには、"ZOOM"[ズーム]コマンドを使用すると良いでしょう。
コマンド: zoom

窓のコーナーを指定, 表示倍率を入力(nX または nXP) または
[図面全体(A)/中心点(C)/ダイナミック(D)/オブジェクト範囲(E)/前画面(P)/倍率(S)/窓(W)]


※コマンド内容に関してはヘルプ参照下さい。
"ZOOM"[ズーム]コマンドにもオプションがあります。
このオプションを使用すれば、一発で図面全体を表示できる為
今回の様なマクロで、使用すると良いでしょう。

^C^C_offset;\\\;_zoom;a;_chprop;L;;LA;$M=$(getvar,clayer);;


また、途中"ZOOM"[ズーム]コマンドを使用し
マクロで画面表示状態を変更した場合
最後に画面状態を元に戻しておくと、作業上便利だと思います。

^C^C_offset;\\\;_zoom;a;_chprop;L;;LA;$M=$(getvar,clayer);;_zoom;p;



ただし、"ZOOM"[ズーム]コマンドを使用すると
見た目高速で画面が切り替わるので、回避したい場合は
"COPYBASE"[基点コピー]コマンド もしくは "COPYCLIP"[コピー]コマンド
を使用し"PASTECLIP"[貼り付け]コマンドにて可能です。


■その2 「基点コピー(COPYBASE)」
1)"OFFSET"[オフセット]コマンドを実行
^C^C_offset;

2)オフセット間隔を記入後、オブジェクトを選択
^C^C_offset;\\

3)ここで1度"OFFSET"[オフセット]コマンドをエンターで終了させます
^C^C_offset;\\;

4)"SELECT"コマンド実行
^C^C_offset;\\;_select;

※ここで、"SELECT"コマンドにて、一旦"@"で選択しておかなければ
 "COPYBASE"[基点コピー]コマンドでの、オブジェクト選択時に不都合


5)選択したオブジェクトを"@"で指定
^C^C_offset;\\;_select;non;@;;

6)"COPYBASE"[基点コピー]コマンド実行
^C^C_offset;\\;_select;non;@;;_copybase;

7)基点コピーの基点を、"@"で指定
^C^C_offset;\\;_select;non;@;;_copybase;non;@;

8)"SELECT"コマンドで指定したオブジェクトを[直前(P)]で選択
^C^C_offset;\\;_select;non;@;;_copybase;non;@;p;;

9)"CHPRO"コマンド実行し[直前(P)]で選択
^C^C_offset;\\;_select;non;@;;_copybase;non;@;p;;_chprop;p;;

10)"CHPRO"コマンドのオプション[画層(LA)]を記入
^C^C_offset;\\;_select;non;@;;_copybase;non;@;p;;_chprop;P;;LA;

11)DIESEL関数にて、現在画層のシステム変数"CLAYER"を呼出し
^C^C_offset;\\;_select;non;@;;_copybase;non;@;p;;_chprop;P;;LA;$M=$(getvar,clayer);;

12)再度"OFFSET"[オフセット]コマンドを実行
^C^C_offset;\\;_select;non;@;;_copybase;non;@;p;;_chprop;p;;LA;$M=$(getvar,clayer);;_offset;

13)オフセット間隔は最初に記入したのでエンター
^C^C_offset;\\;_select;non;@;;_copybase;non;@;p;;_chprop;p;;LA;$M=$(getvar,clayer);;_offset;;

14)オフセットするオブジェクトは、最初に指定した点を"@"で指定
^C^C_offset;\\;_select;non;@;;_copybase;non;@;p;;_chprop;p;;LA;$M=$(getvar,clayer);;_offset;;non;@;

15)ユーザ入力"\"にて、オフセットする側を指定
^C^C_offset;\\;_select;non;@;;_copybase;non;@;p;;_chprop;p;;LA;$M=$(getvar,clayer);;_offset;;non;@;\;

16)オフセット元のオブジェクトを"ERASE"[削除]コマンドにて削除
^C^C_offset;\\;_select;non;@;;_copybase;non;@;p;;_chprop;p;;LA;$M=$(getvar,clayer);;_offset;;non;@;\;_erase;p;;

17)"PASTECLIP"[貼り付け]コマンド実行
^C^C_offset;\\;_select;non;@;;_copybase;non;@;p;;_chprop;p;;LA;$M=$(getvar,clayer);;_offset;;non;@;\;_erase;p;;_pasteclip;

18)貼り付け位置を、システム変数"LASTPOINT"で指定
^C^C_offset;\\;_select;non;@;;_copybase;non;@;p;;_chprop;p;;LA;$M=$(getvar,clayer);;_offset;;non;@;\;_erase;p;;_pasteclip;non;$(getvar,lastpoint);

※"$M="直前の座標値が"LASTPOINT"に格納されています。

この様に、"ZOOM"コマンドを使用せず
"オフセットしたオブジェクトの画層を変更するマクロ"を作成することも出来ます。


"ZOOM"コマンドにて作成することも、覚えておくと便利ですが
作業を効率良くする為にも、1つの作り方に執着せず
色々なコマンドを使用し、別の方法でマクロを作成することも大事です。



AutoCAD Mechanical 基礎ハンドブック 図面の作成・修正作業を大幅に向上させる.../オートデスク株式会社

¥4,410
Amazon.co.jp