この掲示板は、AutoCADマクロ屋本舗 の掲示板です。
AutoCADのマクロ に関する質問の前に 【 マクロ使用前の注意事項 】 を、必ずお読みください。

尚、新規投稿フォーム下の【 新規投稿時のお願い 】を確認の上、新規投稿をお願い致します。
全ブロック分解
モデル空間上に置かれているすべてのブロックを分解したいです。
寸法やポリラインは分解せずに
ブロックがなくなるまで分解し続けるマクロの作成をお願いできないでしょうか?

バージョンは2017のLTです。
よろしくお願いします。
  • びけっと
  • 2021/11/26 (Fri) 13:53:13
Re: 全ブロック分解
ちょっとだけ・・

ブロックだけってのは無理ですね。
モデル空間内全てのオブジェクトなら出来るかもです。
  • とってぃ
  • 2021/11/29 (Mon) 14:54:57
Re: 全ブロック分解
あまり自信は無いですが
出来たらラッキー程度でお試しください

LT2022の新規図面に数点のブロックと数点の矩形で試しています

*^C^C$M=setenv;to;0;$(nth,$(getenv,to),;bcm;$(getvar,BLOCKCREATEMODE);;ssm;$(getvar,SELECTSIMILARMODE);blockcreatemode;0;selectsimilarmode;0;setenv;to;1,,,,,,,)$(nth,$(getenv,to),,point;non;0<0;^R-block;tmpbk;non;0<0;l;;SelectSimilar;l;;select;;p;r;l;;copybase;non;0<0;p;;erase;p;;erase;l;;setenv;to;2,,,,,,)$(nth,$(getenv,to),,,-layout;d;tmplo1;;n;tmplo1;;s;tmplo1;point;0<0;erase;all;;pasteclip;non;0<0;zoom;e;setenv;to;3,,,,,)$(nth,$(getenv,to),,,,;to;7;select;l;;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;setenv;to;4,,,,)$(nth,$(getenv,to),,,,,-insert;tmpbk;non;0<0;;;;setenv;to;6;selectsimilarmode;0;SelectSimilar;l;;select;;p;r;l;;copybase;non;0<0;p;;erase;p;;;l;;pasteblock;non;0<0;setenv;to;5,,,)$(nth,$(getenv,to),,,,,,explode;l;^Rexplode;p;;setenv;to;4,,)$(nth,$(getenv,to),,,,,,,erase;l;;copybase;non;0<0;all;;model;pasteclip;non;0<0;-layout;s;tmplo1;setenv;to;3,)$(nth,$(getenv,to),,,,,,,,model;blockcreatemode;$(getenv,bcm);selectsimilarmode;$(getenv,ssm);-layout;d;tmplo1;;d;tmplo2;-purge;b;tmpbk;n;^Csetenv;to;0)^M

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

※、仮に『tmpbk』の名前でブロックを使用しています
※、仮に『tmplo1』と『tmplo2』の名前でレイアウトを使用しています
上記名前ですでに使用している場合にはマクロ内の同名称をすべて変更してください

また、数が多いとかなりの時間フリーズしたような状態が続きます
お試しの場合はブロックの数は少ないデータで
お試しになられることをお勧めします
  • chibi-tom
  • 2021/11/29 (Mon) 17:35:36
Re: 全ブロック分解
自分のバージョンだと
BLOCKCREATEMODEがないみたいです。
  • びけっと
  • 2021/11/30 (Tue) 18:23:24
Re: 全ブロック分解
失礼しました
BLOCKCREATEMODE <2022の新機能でした

修正してみました
※LT2021とLT2019では試しています
追記、別PCのLT2015でも試してみました

*^C^C$M=setenv;to;0;$(nth,$(getenv,to),;ssm;$(getvar,SELECTSIMILARMODE);selectsimilarmode;0;setenv;to;1,,,,,,,)$(nth,$(getenv,to),,point;non;0<0;^R-block;tmpbk;non;0<0;l;;-insert;tmpbk;non;0<0;;;;SelectSimilar;l;;select;;p;r;l;;copybase;non;0<0;p;;erase;p;;erase;l;;setenv;to;2,,,,,,)$(nth,$(getenv,to),,,-layout;d;tmplo1;;n;tmplo1;;s;tmplo1;point;0<0;erase;all;;pasteclip;non;0<0;zoom;e;setenv;to;3,,,,,)$(nth,$(getenv,to),,,,;to;7;select;l;;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;setenv;to;4,,,,)$(nth,$(getenv,to),,,,,-insert;tmpbk;non;0<0;;;;setenv;to;6;selectsimilarmode;0;SelectSimilar;l;;select;;p;r;l;;copybase;non;0<0;p;;erase;p;;;l;;pasteblock;non;0<0;setenv;to;5,,,)$(nth,$(getenv,to),,,,,,explode;l;^Rexplode;p;;setenv;to;4,,)$(nth,$(getenv,to),,,,,,,erase;l;;copybase;non;0<0;all;;model;pasteclip;non;0<0;-layout;s;tmplo1;setenv;to;3,)$(nth,$(getenv,to),,,,,,,,model;selectsimilarmode;$(getenv,ssm);-layout;d;tmplo1;;d;tmplo2;-purge;b;tmpbk;n;^Csetenv;to;0)^M
  • chibi-tom
  • 2021/12/01 (Wed) 08:34:41
Re: 全ブロック分解
省略化できました
早くなったと思います

Lt2021で試しています

*^C^C$M=setenv;to;0;$(nth,$(getenv,to),;ssm;$(getvar,SELECTSIMILARMODE);selectsimilarmode;0;setenv;to;1,,,,,)$(nth,$(getenv,to),,point;non;0<0;^R-block;tmpbk;non;0<0;l;;-insert;tmpbk;non;0<0;;;;SelectSimilar;l;;select;;p;r;l;;copybase;non;0<0;p;;erase;p;;erase;l;;setenv;to;2,,,,)$(nth,$(getenv,to),,,-layout;d;tmplo;;n;tmplo;;s;tmplo;point;0<0;erase;all;;pasteblock;non;0<0;zoom;e;setenv;to;3,,,)$(nth,$(getenv,to),,,,explode;l;^Rexplode;p;;-purge;b;*$(substr,$(getvar,insname),4);n;setenv;to;4,,)$(nth,$(getenv,to),,,,,-insert;tmpbk;non;0<0;;;;setenv;to;5;selectsimilarmode;0;SelectSimilar;l;;select;;p;r;l;;copybase;non;0<0;p;;erase;p;;;l;;pasteblock;non;0<0;setenv;to;3,)$(nth,$(getenv,to),,,,,,erase;l;;copybase;non;0<0;all;;model;pasteclip;non;0<0;selectsimilarmode;$(getenv,ssm);-layout;d;tmplo;-purge;b;tmpbk;n;^Csetenv;to;0)^M

※、仮に『tmpbk』の名前でブロックを使用しています
※、仮に『tmplo』の名前でレイアウトを使用しています
上記名前ですでに使用している場合にはマクロ内の同名称をすべて変更してください

10:45ちょっと修正、途中の任意ブロック名の削除を追加しました
  • chibi-tom
  • 2021/12/02 (Thu) 09:54:38
Re: 全ブロック分解
また余計な事してたみたいです
仮レイアウト必要なかったです

さらに省略できました

*^C^C$M=setenv;to;0;$(nth,$(getenv,to),;ssm;$(getvar,SELECTSIMILARMODE);selectsimilarmode;0;point;non;0<0;^R-block;tmpbk;non;0<0;l;;setenv;to;1,,,)$(nth,$(getenv,to),,-insert;tmpbk;non;0<0;;;;setenv;to;3;SelectSimilar;l;;select;;p;r;l;;copybase;non;0<0;p;;erase;p;;erase;l;;pasteblock;non;0<0;setenv;to;2,,)$(nth,$(getenv,to),,,explode;l;^Rexplode;p;;-purge;b;*$(substr,$(getvar,insname),4);n;setenv;to;1,)$(nth,$(getenv,to),,,,erase;l;;selectsimilarmode;$(getenv,ssm);-purge;b;tmpbk;n;^Csetenv;to;0)^M

※、仮に『tmpbk』の名前でブロックを使用しています
上記名前ですでに使用している場合にはマクロ内の同名称をすべて変更してください
  • chibi-tom
  • 2021/12/02 (Thu) 11:29:56
Re: 全ブロック分解
ありがとうございます。
理想通りのものでした。
動作も一瞬で最高です。

ちなみに、参考までに教えて頂きたいのですが、
なぜ一度コピペしてから分解するのでしょうか?
  • びけっと
  • 2021/12/03 (Fri) 09:29:18
Re: 全ブロック分解
>コピペしてから分解
作っている過程で仮のレイアウトを使っていた名残です

試していませんが
もしかしたらなくてもできるかもです
もしできるようなら参考にでもアップしておきます
  • chibi-tom
  • 2021/12/03 (Fri) 10:34:39
Re: 全ブロック分解
無理みたいですね

仮ブロックの類似オブジェクト選択として図面内のブロックを選択しています

選択した図面内のブロックを分解する為に選択オプションの『P』が必要です
ここで仮に挿入した仮ブロックを一緒に分解するわけにはいかないので
分解前に仮ブロックを削除する必要があります

仮ブロック挿入

仮ブロックと類似オブジェクトとして図面内のブロックを選択

仮ブロックを削除

図面内のブロックを分解

と繰り返しているので
仮ブロックを削除した段階で
選択オプションの『P』が無くなってしまい
その後の分解でP選択ができなくなります

よって
コピーで一旦図面から削除してからペーストする必要があります

あくまで自分が考えたこのマクロではコピペは必須です
  • chibi-tom
  • 2021/12/03 (Fri) 10:54:47
Re: 全ブロック分解
なるほど!
そういうことだったのですね。

あとto;3;のところは
select;;p;r;l;;で選択総数が0だと
以降はスキップされる。
という認識であっていますでしょうか?
  • びけっと
  • 2021/12/03 (Fri) 19:52:57
Re: 全ブロック分解
>認識であっていますでしょうか?
合っていると思います(苦笑)
というのも自分もこちらの『マクロ講座』で勉強させていただいたまま利用しておりますので
ただただ面白い仕様だなぁと思っております

また、AutoCAD特有の仕様の様です
互換CADではこのような動作はしないと聞いたことがあります(多分こっちが常識的?な仕様)
  • chibi-tom
  • 2021/12/06 (Mon) 07:59:46
Re: 全ブロック分解
ありがとうございました。
勉強になりました。
  • びけっと
  • 2021/12/07 (Tue) 14:06:20 New

返信フォーム






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