AutoCAD / 選択コマンドとSSGET関数にに関するメモ
・オフスクリーン選択はできても、SSGET関数は表示範囲しか機能しない
・2021バージョンで提供された、RTREGENAUTO (システム変数)は、再作図を自動的に行わないだけ、意図的に再作図しない限り画面はそれ以上ズームしない。
AutoCAD Forum での質問で、表示範囲外の座標を指定すると AutoLISP のSSGET関数で、C や W の窓選択ができないというのがあった。つまり、
(SETQ p1 (LIST 15000 80000 0))
(SETQ p2 (LIST 92000 65000 0))
(SETQ ss1 (SSGET "C" p1 p2))
p1, p2 は座標値で、この座標が表示範囲内に収まっていれば正しく結果を返すが、収まっていないと返さない。という状況で、これはSSGET関数の仕様と言われていた。
SSGET関数が画面に表示されている部分だけキャッシュされたオブジェクトを対象としているからだ、と説明された記憶がある。SSGET関数に限らず、SELECTコマンドで窓(W)や交差(C)を使うときも画面から外れる部分は選択できなかった。
これが、2018バージョンから、オフスクリーン選択と言って、表示部分から外れた部分も選択できるようになった。なので、SSGET関数も改良されているかと期待したが、残念な結果だった。
ただ、表示範囲の問題をクリアすればよいので、たとえば、こんな風にコードを追加すれば、ちゃんと動く。
(COMMAND "zoom" "W" p1 p2)
(SETQ ss1 (SSGET "C" pt1 pt2))
(COMMAND "zoom" "P")
SSGET関数の前後で、表示範囲の変更と元にもどす処理をいれているだけた。これで、ほとんどの場合はうまく動くが、pt1, pt2 の範囲が極端に広いと動かない。どうやら再作図が掛かるとダメみたいだ。
で、再作図に関して調べてみたら、RTREGENAUTOというシステム変数が2021バージョンで提供されているのを発見。RTREGENAUTO=0で再作図が抑制されるとの事なので、試してみたが期待した動きにはならなかった。自動再作図を抑制するだけだった。
このシステム変数は、超巨大な図面を操作している場合に、自動で再作図されると再表示されるまで待ちが発生するときのためのモノで、SSGET関数を便利にするものではないことが分かった。