マクロ FAQ

Last Update:    2023/5/8

※ Advance CAD は UTF-8 に対応しておりません。サンプルマクロを保存する際は、Shift-JIS コードで保存してご利用ください。
質問 回答(サンプル)
マクロ名でマクロの動作を区別するには限界があるので、タイトルをつけたい タイトルは、マクロの先頭に次の形式でコメントとして記述する。
/* #TITLE# 説明文 */
#TITLE# はキーワード、説明分は1行とし、60文字程度とする。

以下、サンプルマクロ

/* #TITLE# マクロ選択時、タイトルを表示させるマクロ */
DLGMODE [0]
MACRO "*"
echo "<CE> で終了";
getany(1);
<CE>
      
マクロ内で通常使用しないフォントを使用し、マクロ実行後、元のフォントに戻しておきたい 組み込み関数 getprm を使用する事で可能。製図用定数などを一時的に変更し、後で変更前の値に戻すときなどに使用する。

以下、サンプルマクロ

/* #TITLE# 製図用定義をマクロ実行前に保存し、実行後に回復するマクロ */
s = getprm(1,1); /* save */

GNT "FONT" <0,0> <CE> /* 文字列処理を行う */
TEXT/FONT 2   /* マクロ内で使用するフォントに変更 */
GNT "FONT 2" <0,10> <CE> /* 文字列処理を行う */

TEXT/FONT [s] /* 回復 */
GNT "FONT" <0,20> <CE> /* 文字列処理を行う */
      
引数の詳細はマニュアル「10.3.10.17 製図用定義などの現在値を得る関数」参照
ダイアログを使用しているユーザーと使用していないユーザーが混在しているが、マクロ実行時はダイアログモードをオフにして、マクロ実行後元の状態に戻したい 組み込み関数 getprm を使用する事で可能。

以下、サンプルマクロ

/* #TITLE# ダイアログモードをオフにしてマクロ実行、実行後に回復するサンプルマクロ */
s = getprm(4,7); /* save */

DLGMODE [0]   /* ダイアログモードをオフにしてマクロ時、表示されないようにする */
            /* COLORGEN を使用して背景色を変更する */
            /* 1900 : 背景色指定 */
            /*    1 : 緑 */
            /*  120 : 緑の値 */
            /*    2 : 赤 */
            /*  110 : 赤の値 */
            /*    3 : 赤 */
            /*  100 : 赤の値 */
COLORGEN 1900 1 100 2 100 3 100 <CE>

DLGMODE [s] /* ダイアログモードをマクロ実行前のモードに回復する */
      
引数の詳細はマニュアル「10.3.10.17 製図用定義などの現在値を得る関数」参照
図面を印刷後、モデルを保存せずに Advance CAD を終了してしまったために、整合性が取れなくなってしまった。これを回避するためにモデル保存した状態でしか印刷できないようにしたい 組み込み関数 dbchgd を使用する事で可能。

以下、サンプルマクロ

/* #TITLE# モデル保存しないと印刷処理が行えないよう限定するマクロ */
if (dbchgd() == 1) {
  echo "モデルが変更されています。モデルを保存してください。\a";
} else {
  /* モデル保存後に図面印刷をする場合  */
  PLOT/PRINT OFF <CE>
}
引数の詳細はマニュアル「10.3.10.12 モデル変更の有無を調べる関数」参照
ソート関数の使用方法を知りたい データ型は、単一型(文字列型、数値型、あるいは座標型、デジタイズ点型のみ)でなければならず、文字列型と数値型の混在や、他の型の要素が混じっていると処理できない。 また、部分配列は使用不可。

以下、サンプルマクロ

/* #TITLE# 座標値でソートする */
/* 点列をランダムに作成する */
PCE
<20,30> < 0, 0> < 0,20> < 0,30>
<10,30> <30,30> <20, 0> <40,30>
<40,20> < 0,10> <40,10> <40, 0>
<30, 0> <10,0>
<CE>
/* 作成した点列をアクティブリストに登録 */
ACT/REL
ACT/ALL <CE>
/* アクティブリストを配列として使用 */
alist = actlst();
pcnt = length(alist);
/* 上記アクティブリスト数は下記取得方法でも可能
pcnt = #CURACTCNT;
*/
/* アクティブリストに登録がなければ処理しない */
if( pcnt <= 0 ) { return; }
/* 座標値登録用としてアクトアイテム数分の配列を作成 */
plist=array(pcnt);
/* 配列に座標値登録 */
for(i=0;i<pcnt;i=i+1) {
  id = alist[i];
  VER [idptr(id)] <CE>
  plist[i]=pdg(#VERXS,#VERYS);
}
/* ソート方法を選択 */
echo "並べ替える方法を選択:0 ~ 4";
ans = getnum(1);
if(vtype(ans) != 3 ) { ans = 0; }
switch(ans) {
case 1:
  err = sort(plist,"x:descend;y:ascend");
  break;
case 2:
  err = sort(plist,"x:ascend;y:descend");
  break;
case 3:
  err = sort(plist,"y:descend;x:ascend");
  break;
case 4:
  err = sort(plist,"y:ascend;x:descend");
  break;
}

/* ソートされていることを確認するために、配列の先頭から付番する */
GNT
for(i=0;i<pcnt;i=i+1) {
  [sprint("No%d",i+1)]
  p=plist[i];
  [p]
}
<CE>

    

入力 = 1 の場合
入力 = 1

入力 = 2 の場合
入力 = 2

入力 = 3 の場合
入力 = 3

入力 = 4 の場合
入力 = 4

入力 = 0 またはその他の入力
入力 = 0
DXF/DWGなどでデータを取り込むと、 °φ ± □ ⌒ が全角文字になります。これらの文字を Advance CAD のメタキャラクタに変換したい 以下、サンプルマクロと、それを呼び出すテストマクロです。
ZTOMETA_TEST.MAC
ZTOMETA.MAC
全角英数字を半角英数字に変換するマクロ 以下、サンプルマクロと、それを呼び出すテストマクロです。
ALP_NUM_ZTOH_TEST.MAC
ALP_NUM_ZTOH.MAC
メッセージエリア操作サンプルマクロ MESAREA.MAC

下図入力1~9への値入力の処理サンプル
 ・ スペース、バックスペースで入力位置変更
 ・ メッセージエリアクリックで入力位置変更
 ・ 座標、数値、テキストで値入力
 ・ Enrerで終了

s = 0
マクロのメニューへの割付方法は、どのようにして行いますか? メニュー(USEROSM.MEN)をカスタマイズしてマクロを呼び出すことで実現可能です。
例)
メニュー
T <xx,xx> "マクロ1" !MACRO "MACRO1"!
T <xx,xx> "マクロ2" !MACRO "MACRO2"!
T <xx,xx> "マクロ3" !MACRO "MACRO3"!

マクロを呼び出す場合、先頭文字に "T" を記述します。
マクロ内でのDOSコマンドの処理方法について 1. フォアグランドでの実行
書式
 "!バッチ"
 "!OSのコマンド"

2. バックグランドでの実行
書式
 "!\"C:\\Program Files\\bin\\AAA.exe \"&"
 "!C:\\Windows\\System32\\notepad.exe&"

3.ウインドウを開かないフォアグランドプロセスの実行
書式
 "!\"C:\\Program Files\\bin\\AAA.exe \"#"
 "!C:\\Windows\\System32\\notepad.exe#"

 ※注 コマンドパス(フォルダやファイル)に空白文字がある場合は、\"で囲みます。これは囲むことにより、空白以降が引数と認識されることを回避するためです。

< & と # の違い >
 & の場合、コマンドの実行の終了を待たずに次のマクロステップへすすみます。
 # の場合、コマンドの実行が終了するまで次のマクロステップへはすすみません。

Copyright© ITOCHU Techno-Solutions Corporation.