お品書き
書き直し中…
とりあえず、中へどうぞ
↓↓↓
スポンサーリンク

【AutoCAD】画層状態保存でビューポートでフリーズが保存されない(補助線一括削除コマンド改良)

便利ツール/ソフトウェア
補助線(構築線ですね)を一括で削除したい、と考えて

補助線を常に特定の画層で描くコマンド作成 → 特定の画層をバサッと削除

という方式を取っていたところ、フリーズする現象に遭遇し。結局原因は掴めず、対処方も発見できず。

やむを得ず、画層削除を諦めて、ERASEコマンドで対処する方式に変更したのが前回のお話でしたが。

⇒ LEYDELコマンドで構築線のレイヤーを削除しようとするとフリーズする

新たな問題が発覚!

画層状態を保存しておいてから、全ての画層をロック → 目標の画層のロック解除 → 全削除(ERASE ALL)とやるわけですが

その後、保存した画層状態に復元してみると、ビューポートごとに設定したフリーズが、すべてモデル空間でのフリーズに変更されて再現されてしまう!!

これでは、ビューポートごとに表示状態を細かく設定したものがすべて無に帰してしまいます。

後で非表示したはずの画層が表示されていて、修正が大変でした。

実験してみたところ、どうやらビューポート内(任意のビューポートの中のモデル空間を編集)する状態から画層保存 → 復元を行うと、こうなるみたいで。

VPでの表示状態は保存されないのかと検索してみたのですが、色々条件はあるようですが、よく分からん・・・

⇒ 概要 - 画層状態と設定を保存、復元する

とりあえず、応急処置として、「MODEL」コマンドを使うとモデル空間タブに切り替えられる事が分かったので、それをマクロの冒頭に突っ込んでおきました。

前回の↓

画層状態保存 → 全画層ロック → 補助線画層ロック解除 → イレースALL → 画層状態復元 → 画層状態削除
^C^C-layer;a;s;TempList;;;;_graphscr;-layer;s;hojo;LO;*;U;hojo;;_erase;all;;-layer;a;r;TempList;d;TempList;;^C
MODEL追加↓
^C^C_MODEL;-layer;a;s;TempList;;;;_graphscr;-layer;s;hojo;LO;*;U;hojo;;_erase;all;;-layer;a;r;TempList;d;TempList;;^C ただ、レイアウト(ビューポート)に戻るコマンドが発見できないので、戻るときは手動になりますが。。。 レイアウトにコマンドで移動するには LAYOUT → S(設定) で可能でした! あとは、現在のレイアウトを取得する方法が分かれば、マクロで戻れそうですが。 それ以前に、画層削除でフリーズしなくなるとか、画層状態保存でVPの状態をちゃんと復元してくれるようになれば良いのですけどね。。。
私は「画層ロック状態」をほぼ100%使わないので、だったら画層状態保存を使わずに、シンプルに

画層全ロック → 特定の画層ロック解除 → 全消去 → 全ロック解除

でいいんじゃないかと気づき採用!

シンプルになった!
^C^C-layer;LO;*;U;hojo;;_erase;all;;-layer;U;*;;
フリーズや画層の削除だと、現在画層には適用できないので、画層を移動してやる必要がありましたが、画層ロックでは現在画層もロックできてしまうのでその必要がないのですね。

ただ、私は画層ロックはほぼ使わないので良いのですが、画層ロック状態を普段から使っている人だとこの方式は使えないですね。。。

上記のマクロ式だと、イレースの際に消すものがなかった場合に、何故か処理がそこで止まってしまい、その後のロック解除が実行されず画層がロックされたままになってしまう事が判明。(原因はよくわかりませんでした。)

そこで、現象を回避する方法を検討・・・

ERASEコマンドで何も消すものがないと止まってしまうのだから、なにか消すものを用意しておけばよいわけで。

補助線の画層に点を打つ(笑)

さらに、補助線画層が存在しないときにエラーが出てしまうので、補助線の画層を予め作っておく。(補助線の画層を「hojo」とします。)

-layer;m;hojo;

LAYERコマンドの画層新規作成はNですが、Mだと作成と同時に現在画層になるようです。

(※既にある場合に同じ名前で画層を作成してもエラーは出ないんですねぇ・・・どこでエラーが出るのか、出ないのかの動作が、どうも釈然としないですが。。。)

さらに、補助線画層がなかった場合に、新たに画層を作成すると印刷設定やら色やら太さやらの設定がデフォルトのままになるので、そこも設定しておきたい。

P;N;hojo;C;CYAN;hojo;LW;0;hojo;

補助線画層が空にならないように、補助線画層に点を打つ・・・ために、補助線画層に移動する、けれど、後で現在画層に戻ってきたいので、冒頭に$M=を入れて割り込み処理、後で現在画層に戻るGETVAR,CLAYERを使う。

点を打つには・・・

_point;0,0;

全画層ロック

-layer;LO;*;

補助線画層ロック解除

U;hojo;;

全消去

_erase;all;;

画層ロック解除

-layer;U;*;

もとの画層に戻る

-layer;U;*;s;$(getvar,clayer);;^Z

全部繋げて(レイヤーコマンドを解除するのに途中にキャンセル(^C)を入れてます。)
^C^C$M=-layer;M;hojo;P;N;hojo;C;CYAN;hojo;LW;0;hojo;;-point;0,0;-layer;LO;*;U;hojo;^C_erase;all;;-layer;U;*;^C-layer;U;*;s;$(getvar,clayer);;^Z
んー長いし重いな・・・

てかこれ、こちらで紹介されてる旧バージョンのマクロと同じですね。。。

使ってみて、やっぱり補助線画層の作成・設定の部分は自分は不要という結論になりましたが。補助線を消したい時は、必ず補助線がある時なので、補助線を描画するときに補助線の画層作るコマンドを入れていますので。
^C^C$M=_point;0,0;-layer;LO;*;U;hojo;^C_erase;all;;-layer;U;*;^C-layer;U;*;s;$(getvar,clayer);;^Z
しかし、そろそろ、いい加減、補助線機能、ちゃんと用意してもらえませんかね、AutoDesk様?

(AutoCAD Mechanicalでは下書き線という機能があるようですが。。。)

あるいは、画層削除でフリーズしないようになってくれないかなぁ・・・

と、色々考えましたが、結局現在は一番シンプルな奴に戻っています。 ^C^C-layer;LO;*;U;hojo;;_erase;all;;-layer;U;*;;
時々、補助線ないのに補助線削除して全画層ロック状態になってしまいますが、全画層ロック解除ボタン作ってあったので、それを押せばいいかと。。。

またまた問題発生

何も選択されていない状態では正常に動作するのですが、何かを選択したままの状態で上記マクロを使うと、画層が全てロックされたまま解除されずに終わってしまいます。

ERASEを使うと、選択されたものが即削除されてしまうので、エンターでもう一度ERASEコマンドが発令されてしまい、マクロがそこでオブジェクト選択待ち(入力待ち)状態になってしまうのですね。

「^C」でキャンセルすればいいのかと思ったのですが、どうもうまく選択したオブジェクトが解除されてくれないようで。

仕方なく、マクロの中に「PICKFIRST;0;」を打ち込んで解決しました。

※コマンド発令時に、先に選択してあったオブジェクトを使うか、もう一度選択し直すかのシステム変数ですね。

「0」だとコマンド実行時に選択がすべて解除されてもう一度オブジェクトを選択する事が必要になります。これを利用して、選択を解除させました。(そのままだと後で面倒なので、終了後に「PICKFIRST;1;」に戻しておきます。)
^C^C-layer;LO;*;U;hojo;;PICKFIRST;0;_erase;all;;-layer;U;*;;PICKFIRST;1;^Z
まぁこうしなくても、ロック全解除ボタンがあるのだから、全ロック状態になったら解除すればいいだけという説もあるのですが。

コメント