久しぶりにマクロ講座を書いてみます♪
最近マクロを作る内容も
難しい物が多かったりするのですが
その中でも
まれに使うやり方で
自分でも覚えきれて無いやり方なもので
メモ書き代わりです(^-^;
それは何かと言うと
モデル空間で描かれた
特定のオブジェクトを選択し
マクロで処理させる場合
他のオブジェクトが邪魔をして選択ミスする場合があります。
それを極力無くす為に
何もオブジェクトが無い
新規レイアウトを作成することで
マクロ処理をします。
このやり方も
他の先生が考えたやり方ですが
正直自分も衝撃的でした♪
まず
新規レイアウトを作成する時
オプション⇒表示タブ⇒レイアウトの要素 に
新規レイアウトにビューポートを作成
チェックボックスがあります。
これのシステム変数が
CreateViewports
です。
ただし
コマンドラインに直接この変数を打っても
表示されません。
setenvコマンドで呼び出す必要があるので
注意しましょう。
なぜこの操作が必要かと言うと
新規レイアウトに複数のオブジェクトを貼り付け
1つずつ処理する場合
最後のオブジェクトを選択するのですが
新規レイアウトにビューポートを作成してしまうと
ビューポートが邪魔になってしまう為です。
てことで
マクロ作成の流れは以下の様になります。
1)現状の設定値を保存します。
setenv;cv;$(getenv,CreateViewports); |
2)マクロで処理したいオブジェクトを複数選択し
3)コマンドで基点コピーします。
copybase;non;0<0;p;; |
※基点は(0,0)でOK
4)新規レイアウトにビューポートを作成しない状態にします。
setenv;CreateViewports;0; |
5)新規レイアウトを作成し、新規レイアウト画面へ移動
-layout;n;「新規レイアウト名」;;s;「新規レイアウト名」; |
6)ブロックとして貼り付け⇒オブジェクト全体にズームし、分解します。
pasteblock;non;0<0;zoom;a;explode;l; |
※その後の選択で、最後(Last)のオブジェクトを選択する為。
7)新規レイアウト内の、最後のオブジェクトをマクロで処理し、基点コピー後削除
copybase;non;0<0;p;;erase;p;; |
8)新規レイアウト画面からモデル画面へ移動し、貼り付け
-layout;s;Model;pasteclip;non;0<0; |
9)再度繰り返すために新規レイアウト画面へ
-layout;s;「新規レイアウト名」; |
10)選択オブジェクトが有るか無いか判断させるマクロを忘れずに
select;l;; |
11)選択オブジェクトが無くなった場合は
モデル画面へ戻り、新規レイアウトを削除し、CreateViewportsの値を戻す
-layout;s;Model;;d;T-S;setenv;CreateViewports;$(getenv,cv); |
上記の流れをある程度まとめたものが
下記のマクロです。
【マクロ 作成テンプレート】
*^C^C$M=setenv;to;0;$(nth,$(getenv,to),;cv;$(getenv,CreateViewports);select;\zoom;e;copybase;non;0<0;p;;erase;p;;setenv;to;1,,,,)$(nth,$(getenv,to),,;to;2;;CreateViewports;0;-layout;n;「新規レイアウト名」;;s;「新規レイアウト名」;pasteblock;non;0<0;zoom;a;explode;l,,,)$(nth,$(getenv,to),,,;to;4;select;l;;≪*** この間マクロ処理 ***≫setenv;to;3,,)$(nth,$(getenv,to),,,,;to;2;≪*** この間マクロ処理 ***≫copybase;non;0<0;p;;erase;p;;-layout;s;Model;pasteclip;non;0<0;-layout;s;「新規レイアウト名」,)$(nth,$(getenv,to),,,,,-layout;s;Model;;d;「新規レイアウト名」;setenv;CreateViewports;$(getenv,cv))^M |
※上記マクロで何かが処理されるわけではありません。
これを元に作成したのが
マクロ集
142.文字基点自動整列
138.一発合計長さ計測
です。
新規レイアウトを使うことで
自分もマクロの幅が広がったように思います。
覚えておきましょう。
AutoCADを200%使いこなす本 (エクスナレッジムック)/阿部 秀之

¥3,672
Amazon.co.jp