この掲示板は AutoCADマクロ屋本舗 の掲示板です。

【 注意 】最初に必ず ↓↓ 下記内容 ↓↓ を参照ください。
① マクロが分からない方は、まず 【 マクロ講座 】 を参照ください。
② 質問の前に 【 マクロ使用前の注意事項 】 をお読みください。
③ 質問する時は、新規投稿フォーム下の【 新規投稿時のお願い 】を必ずお読みください。

特定の属性に連番を代入したい
環境:2019LT

いつも大変お世話になっております。

-ATTEDITによる属性の値の変更を用いて 複数あるダイナミックブロックの属性値の入力を簡易化させるものを作っております。


現在以下マクロで 属性NO「-----」 に 「接頭文字+中間文字+カウントアップ」が入るようにしました。
動作は最初に値を入力し、属性をクリックする末尾だけとカウントアップで入力されていきます。

*^C^C$M=setvar;USERI1;0;
$(nth,$(getvar,USERI1),;USERS2;接頭文字(1桁)^X\;USERS3;中間英数字(2桁)^X\;USERI2;カウント初期値^X\;USERI3;$M="""$(getvar,USERI2)""";;USERI1;1,,)$(nth,$(getvar,USERI1),,-ATTEDIT;Y;*;NO;*;\;V;R;$(getvar,users2)$(getvar,users3)$(nth,$(strlen,$(getvar,USERI3)),,,,,)$(getvar,USERI3);;setvar;USERI1;2,)$(nth,$(getvar,USERI1),,,;USERI3;$(+,$(getvar,USERI3),1);;USERI1;1)^M


【質問】
このコマンドだと「属性」自体をクリックしないと認識されずマクロが止まってしまいます。
ダイナミックブロック自体をクリックしても反応する用にはできないでしょうか。



【質問】
-ATTEDITにはもともと複数をまとめて編集する動作があります
範囲選択で順番にカウントアップさせることは難しいでしょうか。

ATTEDITの途中に「次(N)」というものが出てきます。それを使ってうまくできない物かと思ったのですが
上記マクロでやっているのは*を使用しマクロ全体を繰り返して処理している(何度も実行している)という処理なので
ATTEDITの中に出てくる次というものの中にカウントアップを含めることは不可能ですかね…?

複数選択、属性NO「-----」を一括でまず「0A#」等代入
その後「0とAには入力値を代入」「#だけカウントアップ」と分けての処理ならできるのでしょうか…


※-ATTEDITの次(N)はブロックが配置された順番に処理されてしまうようです。
※環境がLTな為、to=0などはUSERS、USERIに変更して使用しております。回答はtoなどでも大丈夫です。


よろしくお願いいたします。
  • のの
  • MAIL
  • 2021/08/04 (Wed) 18:55:35
Re: 特定の属性に連番を代入したい
>配置された順番に処理されてしまうようです
この意味が気になります

もし配置された順番がNGならば
まとめて選択した場合マクロではたぶん不可能
(Lisp等プログラムでも無理だと、変えたい順番の正解がわかるのはご自身の頭の中だけかも)

配置された順番通りでも
変更する属性が『不定数』だと難しいと思います
-ATTEDITの次(N)は選択した数だけ必要になります
マクロ内で選択数を判断できないだろうし
文字数制限で数が多いとダメだと思います
『定数』ならもしかしたら可能かもしれませんが
自分の思い付く方法で試した結果は2つしか選択できませんでした<m(__)m>

解決策でなくて申し訳ないですが参考まで
  • chibi-tom
  • 2021/08/05 (Thu) 11:23:38
Re: 特定の属性に連番を代入したい
>複数あるダイナミックブロックの属性値
これはダイナミックブロック1つに対して属性値が複数あるという意味でしょうか?
それとも属性値は1つだけのダイナミックブロックが複数あるという意味でしょうか?

後者ならば可能かもしれません

*^C^C$M=USERI1;0;$(nth,$(getvar,USERI1),users2;接頭文字(1桁)^X\users3;中間英数字(2桁)^X\useri2;カウント初期値^X\useri3;0;useri1;1,,,,,)$(nth,$(getvar,USERI1),,select;\copybase;non;0<0;p;;erase;p;;-layout;d;tmplo1;;n;tmplo1;;s;tmplo1;point;0<0;erase;all;;pasteclip;non;0<0;zoom;e;useri1;2,,,,)$(nth,$(getvar,USERI1),,,useri1;5;copybase;non;0<0;l;;erase;l;;-layout;d;tmplo2;;n;tmplo2;;s;tmplo2;point;0<0;erase;all;;pasteclip;non;0<0;zoom;e;useri1;3,,,)$(nth,$(getvar,USERI1),,,,-attedit;Y;*;NO;*;non;$(getvar,EXTMIN);non;$(getvar,EXTMAX);;v;r;$(getvar,users2)$(getvar,users3)$(getvar,USERI2);N;useri1;4,,)$(nth,$(getvar,USERI1),,,,,copybase;non;0<0;l;;erase;l;;-layout;s;model;pasteclip;non;0<0;useri2;$(+,$(getvar,USERI2),1);-layout;s;tmplo1;useri1;2,)$(nth,$(getvar,USERI1),,,,,,-layout;s;model;;d;tmplo1;;d;tmplo2;useri1;0)^M

1.マクロ起動
2.接頭文字(1桁)の入力
3.中間英数字(2桁)の入力
4.カウント初期値の入力
5.属性値の含まれたダイナミックブロックを選択(複数可です)
6.2に戻って繰り返し

Escキーで終了

仮に『tmplo1』と『tmplo2』という名前でレイアウトを使用しています
同じ名前のレイアウトがあるとNGなので現状同じ名前のレイアウトがある場合はマクロ内の
『tmplo1』と『tmplo2』を変更してください
また、レイアウト2つとモデルをブロックの数だけ行ったり来たりするので少しフリーズしたような状態が続くと思います


自分はLTしか使用したことが無いので『setenv,getenv』使用しました
*^C^C$M=USERI1;0;$(nth,$(getvar,USERI1),setenv;users2;接頭文字(1桁)^X\;users3;中間英数字(2桁)^X\useri2;カウント初期値^X\useri3;0;useri1;1,,,,,)$(nth,$(getvar,USERI1),,select;\copybase;non;0<0;p;;erase;p;;-layout;d;tmplo1;;n;tmplo1;;s;tmplo1;point;0<0;erase;all;;pasteclip;non;0<0;zoom;e;useri1;2,,,,)$(nth,$(getvar,USERI1),,,useri1;5;copybase;non;0<0;l;;erase;l;;-layout;d;tmplo2;;n;tmplo2;;s;tmplo2;point;0<0;erase;all;;pasteclip;non;0<0;zoom;e;useri1;3,,,)$(nth,$(getvar,USERI1),,,,-attedit;Y;*;NO;*;non;$(getvar,EXTMIN);non;$(getvar,EXTMAX);;v;r;$(getenv,users2)$(getenv,users3)$(getvar,USERI2);N;useri1;4,,)$(nth,$(getvar,USERI1),,,,,copybase;non;0<0;l;;erase;l;;-layout;s;model;pasteclip;non;0<0;useri2;$(+,$(getvar,USERI2),1);-layout;s;tmplo1;useri1;2,)$(nth,$(getvar,USERI1),,,,,,-layout;s;model;;d;tmplo1;;d;tmplo2;useri1;0)^M

ただし
配置された順番がNG及びダイナミックブロック1つに対して属性値が複数の場合はこのマクロではNGです
  • chibi-tom
  • 2021/08/05 (Thu) 16:53:16
Re: 特定の属性に連番を代入したい
質問に対しての解答ですが
合っていると思います(苦笑)
というのも自分もこちらの『マクロ講座』で勉強させていただいたまま利用しておりますので
ただただ面白い仕様だなぁと思っております

また、AutoCAD特有の仕様の様です
互換CADではこのような動作はしないと聞いたことがあります(多分こっちが常識的?な仕様)
  • chibi-tom
  • 2021/08/16 (Mon) 09:29:17
Re: 特定の属性に連番を代入したい
>・選択した順番に処理をする という動作が可能か
に対応してみました

*^C^C$M=useri1;0;$(nth,$(getvar,USERI1),users2;接頭文字(1桁)^X\users3;中間英数字(2桁)^X\useri2;カウント初期値^X\useri1;1,,,,)$(nth,$(getvar,USERI1),,offset;;ダイナミックブロックを選択(R-Clickで再設定)^X\$M="""$(if,$(getvar,CMDACTIVE),;useri1;1;select;non;@;non;@;;pickstyle;0;useri1;2,useri1;0)""",,,)$(nth,$(getvar,USERI1),,,users4;$(getvar,LASTPOINT);copybase;non;0<0;non;$M="""$(getvar,USERS4)""";;erase;p;;-layout;d;tmplo;;n;tmplo;;s;tmplo;point;0<0;erase;all;;pasteclip;non;0<0;zoom;e;useri1;3,,)$(nth,$(getvar,USERI1),,,,-attedit;Y;*;NO;*;w;non;$(getvar,EXTMIN);non;$(getvar,EXTMAX);v;r;$(getvar,USERS2)$(getvar,USERS3)$(getvar,USERI2);N;useri1;4,)$(nth,$(getvar,USERI1),,,,,copybase;non;0<0;l;;erase;l;;-layout;s;model;;d;tmplo;pasteclip;non;0<0;useri2;$(+,$(getvar,USERI2),1);pickstyle;1;useri1;1)^M

1.マクロ起動
2.接頭文字(1桁)の入力
3.中間英数字(2桁)の入力
4.カウント初期値の入力
5.属性値の含まれたダイナミックブロックを選択(R-Clickで再設定)
6.5に戻って繰り返し

Escキーで終了

仮に『tmplo』という名前でレイアウトを使用しています
同じ名前のレイアウトがあるとNGなので現状同じ名前のレイアウトがある場合はマクロ内の
『tmplo』を変更してください
pickstyleは適当に入れましたが、グループについてはよくわかっていないためたぶん対応できていません<m(__)m>

一応、LTバージョンも
*^C^C$M=useri1;0;$(nth,$(getvar,USERI1),setenv;users2;接頭文字(1桁)^X\;users3;中間英数字(2桁)^X\useri2;カウント初期値^X\useri1;1,,,,)$(nth,$(getvar,USERI1),,offset;;ダイナミックブロックを選択(R-Clickで再設定)^X\$M="""$(if,$(getvar,CMDACTIVE),;useri1;1;select;non;@;non;@;;pickstyle;0;useri1;2,useri1;0)""",,,)$(nth,$(getvar,USERI1),,,setenv;users4;$(getvar,LASTPOINT);copybase;non;0<0;non;$M="""$(getenv,users4)""";;erase;p;;-layout;d;tmplo;;n;tmplo;;s;tmplo;point;0<0;erase;all;;pasteclip;non;0<0;zoom;e;useri1;3,,)$(nth,$(getvar,USERI1),,,,-attedit;Y;*;NO;*;w;non;$(getvar,EXTMIN);non;$(getvar,EXTMAX);v;r;$(getenv,users2)$(getenv,users3)$(getvar,USERI2);N;useri1;4,)$(nth,$(getvar,USERI1),,,,,copybase;non;0<0;l;;erase;l;;-layout;s;model;;d;tmplo;pasteclip;non;0<0;useri2;$(+,$(getvar,USERI2),1);pickstyle;1;useri1;1)^M
  • chibi-tom
  • 2021/08/17 (Tue) 16:36:51
Re: 特定の属性に連番を代入したい
>配置順と逆にカウントアップされました
問題ないとのことですが自己満足で配置順にしてみました

*^C^C$M=USERI1;0;$(nth,$(getvar,USERI1),users2;接頭文字(1桁)^X\users3;中間英数字(2桁)^X\useri2;カウント初期値^X\_PICKSTYLE;0;useri1;1,,,,,,,)$(nth,$(getvar,USERI1),,select;\copybase;non;0<0;p;;erase;p;;-layout;d;tmplo1;;n;tmplo1;;s;tmplo1;point;0<0;erase;all;;pasteclip;non;0<0;zoom;e;useri1;2,,,,,,)$(nth,$(getvar,USERI1),,,useri1;3;select;l;;erase;l;;useri2;$(+,$(getvar,USERI2),1);useri1;2,,,,,)$(nth,$(getvar,USERI1),,,,pasteclip;non;0<0;zoom;e;useri2;$(-,$(getvar,USERI2),1);useri1;4,,,,)$(nth,$(getvar,USERI1),,,,,useri1;7;copybase;non;0<0;l;;erase;l;;-layout;d;tmplo2;;n;tmplo2;;s;tmplo2;point;0<0;erase;all;;pasteclip;non;0<0;zoom;e;useri1;5,,,)$(nth,$(getvar,USERI1),,,,,,-attedit;Y;*;NO;*;w;non;$(getvar,EXTMIN);non;$(getvar,EXTMAX);v;r;$(getvar,USERS2)$(getvar,USERS3)$(getvar,USERI2);N;useri1;6,,)$(nth,$(getvar,USERI1),,,,,,,copybase;non;0<0;l;;erase;l;;-layout;s;model;pasteclip;non;0<0;useri2;$(-,$(getvar,USERI2),1);-layout;s;tmplo1;useri1;4,)$(nth,$(getvar,USERI1),,,,,,,,-layout;s;model;;d;tmplo1;;d;tmplo2;useri1;0;_PICKSTYLE;1)^M

1.マクロ起動
2.接頭文字(1桁)の入力
3.中間英数字(2桁)の入力
4.カウント初期値の入力
5.属性値の含まれたダイナミックブロックを選択(複数可です)
6.2に戻って繰り返し

Escキーで終了

仮に『tmplo1』と『tmplo2』という名前でレイアウトを使用しています
同じ名前のレイアウトがあるとNGなので現状同じ名前のレイアウトがある場合はマクロ内の
『tmplo1』と『tmplo2』を変更してください
また、レイアウト2つとモデルをブロックの数だけ行ったり来たりするので少しフリーズしたような状態が続くと思います

一応、LTバージョンも
*^C^C$M=USERI1;0;$(nth,$(getvar,USERI1),setenv;users2;接頭文字(1桁)^X\;users3;中間英数字(2桁)^X\useri2;カウント初期値^X\_PICKSTYLE;0;useri1;1,,,,,,,)$(nth,$(getvar,USERI1),,select;\copybase;non;0<0;p;;erase;p;;-layout;d;tmplo1;;n;tmplo1;;s;tmplo1;point;0<0;erase;all;;pasteclip;non;0<0;zoom;e;useri1;2,,,,,,)$(nth,$(getvar,USERI1),,,useri1;3;select;l;;erase;l;;useri2;$(+,$(getvar,USERI2),1);useri1;2,,,,,)$(nth,$(getvar,USERI1),,,,pasteclip;non;0<0;zoom;e;useri2;$(-,$(getvar,USERI2),1);useri1;4,,,,)$(nth,$(getvar,USERI1),,,,,useri1;7;copybase;non;0<0;l;;erase;l;;-layout;d;tmplo2;;n;tmplo2;;s;tmplo2;point;0<0;erase;all;;pasteclip;non;0<0;zoom;e;useri1;5,,,)$(nth,$(getvar,USERI1),,,,,,-attedit;Y;*;NO;*;w;non;$(getvar,EXTMIN);non;$(getvar,EXTMAX);v;r;$(getenv,users2)$(getenv,users3)$(getvar,USERI2);N;useri1;6,,)$(nth,$(getvar,USERI1),,,,,,,copybase;non;0<0;l;;erase;l;;-layout;s;model;pasteclip;non;0<0;useri2;$(-,$(getvar,USERI2),1);-layout;s;tmplo1;useri1;4,)$(nth,$(getvar,USERI1),,,,,,,,-layout;s;model;;d;tmplo1;;d;tmplo2;useri1;0;_PICKSTYLE;1)^M
  • chibi-tom
  • 2021/08/18 (Wed) 08:42:00
Re: 特定の属性に連番を代入したい
>選択した順番に処理
仮レイアウトを不使用にしてみました
ほんの少し、本当に微妙な違いですが早くなったかと思います

*^C^C$M=useri1;0;$(nth,$(getvar,USERI1),users2;接頭文字(1桁)^X\users3;中間英数字(2桁)^X\useri2;カウント初期値^X\useri1;1,,,)$(nth,$(getvar,USERI1),,offset;;ダイナミックブロックを選択(R-Clickで再設定)^X\$M="""$(if,$(getvar,CMDACTIVE),;useri1;1;select;non;@;non;@;;pickstyle;0;useri1;2,useri1;0)""",,)$(nth,$(getvar,USERI1),,,users4;$(getvar,LASTPOINT);undo;be;erase;all;r;non;@;;zoom;e;-attedit;Y;*;NO;*;w;non;$M="""$(getvar,EXTMIN)""";non;$M="""$(getvar,EXTMAX)""";v;r;$(getvar,USERS2)$(getvar,USERS3)$(getvar,USERI2);N;useri1;3,)$(nth,$(getvar,USERI1),,,,copybase;non;0<0;l;;undo;e;u;erase;non;$(getvar,USERS4);;pasteclip;non;0<0;useri2;$(+,$(getvar,USERI2),1);pickstyle;1;useri1;1)^M

LTバージョン
*^C^C$M=useri1;0;$(nth,$(getvar,USERI1),setenv;users2;接頭文字(1桁)^X\;users3;中間英数字(2桁)^X\useri2;カウント初期値^X\useri1;1,,,)$(nth,$(getvar,USERI1),,offset;;ダイナミックブロックを選択(R-Clickで再設定)^X\$M="""$(if,$(getvar,CMDACTIVE),;useri1;1;select;non;@;non;@;;pickstyle;0;useri1;2,useri1;0)""",,)$(nth,$(getvar,USERI1),,,setenv;users4;$(getvar,LASTPOINT);undo;be;erase;all;r;non;@;;zoom;e;-attedit;Y;*;NO;*;w;non;$M="""$(getvar,EXTMIN)""";non;$M="""$(getvar,EXTMAX)""";v;r;$(getenv,users2)$(getenv,users3)$(getvar,USERI2);N;useri1;3,)$(nth,$(getvar,USERI1),,,,copybase;non;0<0;l;;undo;e;u;erase;non;$(getenv,users4);;pasteclip;non;0<0;useri2;$(+,$(getvar,USERI2),1);pickstyle;1;useri1;1)^M
  • chibi-tom
  • 2021/08/18 (Wed) 10:07:06
Re: 特定の属性に連番を代入したい
修正してみました

USERIのユーザー変数は整数しか登録できないので付加した『0』は省略されます(AUTOCAD特有の仕様かも)
なのでUSERS5に登録しました

*^C^C$M=useri1;0;$(nth,$(getvar,USERI1),users2;接頭文字(1桁)^X\users3;中間英数字(2桁)^X\useri2;カウント初期値^X\useri1;1,,,,)$(nth,$(getvar,USERI1),,offset;;ダイナミックブロックを選択(R-Clickで再設定)^X\$M="""$(if,$(getvar,CMDACTIVE),;useri1;1;select;non;@;non;@;;pickstyle;0;useri1;2,useri1;0)""",,,)$(nth,$(getvar,USERI1),,,users5;$(if,$(<,$(getvar,USERI2),10),0$(getvar,USERI2),$(getvar,USERI2));useri1;3,,)$(nth,$(getvar,USERI1),,,,users4;$(getvar,LASTPOINT);undo;be;erase;all;r;non;@;;zoom;e;-attedit;Y;*;TAG;*;w;non;$M="""$(getvar,EXTMIN)""";non;$M="""$(getvar,EXTMAX)""";v;r;$(getvar,USERS2)-$(getvar,USERS3)-$(getvar,USERS5);N;useri1;4,)$(nth,$(getvar,USERI1),,,,,copybase;non;0<0;l;;undo;e;u;erase;non;$(getvar,USERS4);;pasteclip;non;0<0;useri2;$(+,$(getvar,USERI2),1);pickstyle;1;useri1;1)^M

LTしかないので確認用
*^C^C$M=useri1;0;$(nth,$(getvar,USERI1),setenv;users2;接頭文字(1桁)^X\;users3;中間英数字(2桁)^X\useri2;カウント初期値^X\useri1;1,,,,)$(nth,$(getvar,USERI1),,offset;;ダイナミックブロックを選択(R-Clickで再設定)^X\$M="""$(if,$(getvar,CMDACTIVE),;useri1;1;select;non;@;non;@;;pickstyle;0;useri1;2,useri1;0)""",,,)$(nth,$(getvar,USERI1),,,setenv;users5;$(if,$(<,$(getvar,USERI2),10),0$(getvar,USERI2),$(getvar,USERI2));useri1;3,,)$(nth,$(getvar,USERI1),,,,setenv;users4;$(getvar,LASTPOINT);undo;be;erase;all;r;non;@;;zoom;e;-attedit;Y;*;TAG;*;w;non;$M="""$(getvar,EXTMIN)""";non;$M="""$(getvar,EXTMAX)""";v;r;$(getenv,users2)-$(getenv,users3)-$(getenv,users5);N;useri1;4,)$(nth,$(getvar,USERI1),,,,,copybase;non;0<0;l;;undo;e;u;erase;non;$(getenv,users4);;pasteclip;non;0<0;useri2;$(+,$(getvar,USERI2),1);pickstyle;1;useri1;1)^M

以下ののさんのマクロ解説です
1.IF文最後の『)』が抜けているので括弧の数が合っていません
2.『getvar』が『getver』となっています
3.『;』が『,』となっています

× $(nth,$(getvar,USERI1),,,$(if,$(<,$(getver,USERI2),10),useri3;0$(getvar,USERI2),useri1;3,useri3;$(getvar,USERI2),useri1;3,,)
〇 $(nth,$(getvar,USERI1),,,$(if,$(<,$(getv『a』r,USERI2),10),useri3;0$(getvar,USERI2)『;』useri1;3,useri3;$(getvar,USERI2)『;』useri1;3『)』,,)
さらにこうするとすっきりです
◎ $(nth,$(getvar,USERI1),,,useri3;$(if,$(<,$(getvar,USERI2),10),0$(getvar,USERI2),$(getvar,USERI2));useri1;3,,)

あと、コピーミスかもしれませんがuseri1;0の前に全角スペースがあったので削除しました
× $(nth,$(getvar,USERI1),,offset;;ダイナミックブロックを選択(R-Clickで再設定)^X\$M="""$(if,$(getvar,CMDACTIVE),;useri1;1;select;non;@;non;@;;pickstyle;0;useri1;2, useri1;0)""",,,)
〇 $(nth,$(getvar,USERI1),,offset;;ダイナミックブロックを選択(R-Clickで再設定)^X\$M="""$(if,$(getvar,CMDACTIVE),;useri1;1;select;non;@;non;@;;pickstyle;0;useri1;2,useri1;0)""",,,)
  • chibi-tom
  • 2021/08/20 (Fri) 11:05:52
Re: 特定の属性に連番を代入したい
これでもOKです
参考まで

*^C^C$M=useri1;0;$(nth,$(getvar,USERI1),users2;接頭文字(1桁)^X\users3;中間英数字(2桁)^X\useri2;カウント初期値^X\useri1;1,,,,)$(nth,$(getvar,USERI1),,offset;;ダイナミックブロックを選択(R-Clickで再設定)^X\$M="""$(if,$(getvar,CMDACTIVE),;useri1;1;select;non;@;non;@;;pickstyle;0;useri1;2,useri1;0)""",,,)$(nth,$(getvar,USERI1),,,users4;$(getvar,LASTPOINT);undo;be;erase;all;r;non;@;;zoom;e;useri1;3,,)$(nth,$(getvar,USERI1),,,,-attedit;Y;*;TAG;*;w;non;$(getvar,EXTMIN);non;$(getvar,EXTMAX);v;r;$(getvar,USERS2)-$(getvar,USERS3)-$(if,$(<,$(getvar,USERI2),10),0$(getvar,USERI2),$(getvar,USERI2));N;useri1;4,)$(nth,$(getvar,USERI1),,,,,copybase;non;0<0;l;;undo;e;u;erase;non;$(getvar,USERS4);;pasteclip;non;0<0;useri2;$(+,$(getvar,USERI2),1);pickstyle;1;useri1;1)^M
  • chibi-tom
  • 2021/08/20 (Fri) 11:12:20
Re: 特定の属性に連番を代入したい
できました!修正ありがとうございます!!
  • のの
  • MAIL
  • 2021/08/20 (Fri) 13:27:42

返信フォーム






プレビュー (投稿前に内容を確認)