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

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

同一色全選択
クイック選択やフィルターなどのダイアログを使用せずに
色が赤になっているオブジェクトをすべて選択する
といったことは可能でしょうか。

バージョンは2017のLTです。
よろしくお願いいたします。
  • びけっと
  • 2021/12/07 (Tue) 19:46:23
Re: 同一色全選択
色だけで複数のオブジェクトタイプをダイアログ無しで選択することは
基本的には無理だと思います

赤色オブジェクトのオブジェクトタイプがわかっていて
そんなに種類が無ければ下記マクロで考え方の参考になればと思います

仮に赤色の『線分』『円』『矩形』を作図して類似オブジェクトの色選択をしています
また、選択だけで終わると結果が良くわからないのでとりあえず赤色の『線分』『円』『ポリライン』を
赤色 → BYBLOCKに変更して終了します

*^C^C$M=setenv;to;0;$(nth,$(getenv,to),line;non;0<0;@10<0;;select;l;;circle;non;0<0;10;select;p;l;;rectang;non;0<0;@10<45;select;p;l;;setenv;to;1,,)$(nth,$(getenv,to),,chprop;p;;c;1;;setenv;ssm;$(getvar,SELECTSIMILARMODE);selectsimilarmode;1;setenv;to;2,)$(nth,$(getenv,to),,,SelectSimilar;p;;chprop;c;byblock;;selectsimilarmode;$(getenv,ssm);erase;l;;;l;;;l;;^Csetenv;to;0)^M

操作はマクロの登録ボタンを押すだけです

ちなみに選択状態を保持してマクロを終了することはできないです
  • chibi-tom
  • 2021/12/08 (Wed) 09:30:31
Re: 同一色全選択
↑これぐらいなら構文分けする必要なかったな
オブジェクトタイプが増えたら構文分けすればできるかなという感じですね

^C^C$M=line;non;0<0;@10<0;;select;l;;circle;non;0<0;10;select;p;l;;rectang;non;0<0;@10<45;select;p;l;;chprop;p;;c;1;;selectsimilarmode;1;SelectSimilar;p;;chprop;c;byblock;;selectsimilarmode;$(getvar,SELECTSIMILARMODE);erase;l;;;l;;;l;;^Z
  • chibi-tom
  • 2021/12/08 (Wed) 09:56:18
Re: 同一色全選択
オブジェクトタイプを追加したら
動かなかった(長くて?)のでnthの方を参考にさせて頂きました。

ちなみに長さの上限ってどれだけかご存知でしたら
教えて頂けないでしょうか。
  • びけっと
  • 2021/12/09 (Thu) 19:33:18
Re: 同一色全選択
>nthの方を参考にさせて頂きました。
出来たのなら良かったです

文字数については
自分は動かなければ長い
動いたらラッキー程度で作っていますので
深く考えたことは無いです(笑)

下記にてzukki-さんが検証してくれているので
ご参考にしてください
https://totthi.bbs.fc2.com/?act=reply&tid=15640511
  • chibi-tom
  • 2021/12/10 (Fri) 08:20:59
Re: 同一色全選択
↑の文字数検証は、単純な文字列でやってますけど、関数の場合は違ってきます。

例えば、$(getvar,lastpoint) とある場合、その文字数の19文字でカウントするのではないんです。
その命令により代入される値が、0.00,0.00,0.00 なら、14文字とカウントし、
123456.12345678,123456.12345678,0.00000000 なら、42文字としてカウントされます。

同じマクロなのに、原点近くでは正常に動くのに、
遠い場所(座標値の桁数が多いデータ)では、エラーが出る事が時々あります。
それは、代入された値の文字数が大きすぎた事が原因です。


※上記は、文字数制限が厳しかった昔に私が検証した話で、今も同じかは判りません。
  • Lon
  • 2021/12/10 (Fri) 10:51:39
Re: 同一色全選択
>出力文字数で235文字まで見たいです。

を信用して「0」を235個並べたこんな構文を書いてみました。
*^C^C$M=$(nth,0,0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000)^M

総文字数254文字。
はい。理系の人が好きな数値[256](の近似)になっちゃいますね。

余談はさておき、
マクロの制限文字数がマクロ自体の文字数ではなく、代入後の文字数であると考えられる別の要因を書きます。

上のchibi-tomさんのマクロでもやってますが、
長いマクロをnthで段落分けすると、どうして文字数制限(マクロ全体の総文字数)以上の物ができるのか。

それが、「代入した後の文字数でカウント」だからだと思っています。

*^C^C$M=setenv;to;0;$(nth,$(getenv,to),〇〇〇setenv;to;1,,,,)
          $(nth,$(getenv,to),,×××setenv;to;2,,,)
          $(nth,$(getenv,to),,,▽▽▽setenv;to;3,,)
          $(nth,$(getenv,to),,,,◇◇◇setenv;to;4,)
          $(nth,$(getenv,to),,,,,☆☆☆setenv;to;0)^M

これで考えます。
先頭に「*」が有るとややこしくなるので、消します。

^C^C$M=setenv;to;0;$(nth,$(getenv,to),〇〇〇setenv;to;1,,,,)
          $(nth,$(getenv,to),,×××setenv;to;2,,,)
          $(nth,$(getenv,to),,,▽▽▽setenv;to;3,,)
          $(nth,$(getenv,to),,,,◇◇◇setenv;to;4,)
          $(nth,$(getenv,to),,,,,☆☆☆setenv;to;0)^M

to=0の時、それを代入すると
^C^C$M=setenv;to;0;$(nth,0,〇〇〇setenv;to;1,,,,)$(nth,0,,,,,)$(nth,0,,,,,)$(nth,0,,,,,)$(nth,0,,,,,)^M
なんです。(2~5行目の中身は無い物となるんです。)

同じく、to=3の時は
^C^C$M=setenv;to;0;$(nth,3,,,,,)$(nth,3,,,,,)$(nth,3,,,,,)$(nth,3,,,,◇◇◇setenv;to;4,)$(nth3,,,,,,)^M

つまり、nthで段落分けして、文字数制限値が増えたんじゃない。
代入した時に、他の段落の中身を切り落としてるから、マクロ全体で見ても256文字を超えていない。

こんな感じで判るかな?
  • Lon
  • 2021/12/10 (Fri) 11:32:06
Re: 同一色全選択
なんとなくですが、
ほぼほぼわかった気がします。

とても勉強になりました。
ありがとうございます。
  • びけっと
  • 2021/12/10 (Fri) 21:14:06

返信フォーム






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