Sponsored links

【AutoLISP リスト】全レイアウトで同じ処理 関数 layoutlist と foreach

Sponsored links
AutoLISP
Sponsored links

関数layoutlist では、全てのレイアウト名のリストを得ることができます。foreach と組み合わせると、全レイアウトで何かを繰り返しするときに便利です。

Sponsored links

予備知識

この記事では関数foreach を使います。

関数 layoutlist

関数 layoutlist は、レイアウト名のリストが戻り値です。

例えばこのようにレイアウトが3つある場合は、

(layoutlist)とコマンドラインに入力すると、

("レイアウト1" "レイアウト2" "レイアウト3")

レイアウト名のリストが戻り値です。

全てのレイアウトにブロックを挿入したい、印刷したい、画面全体ズームしたい…などなど、各レイアウトで同じ処理をするコマンドを作りたい時に、このレイアウト名のリストを使うことができます。

使用例 すべてのレイアウトを全体ズーム

foreach は値だけを変更して同じ処理を繰り返すときに使う関数です。
今回は、レイアウト名リストを使って、
”現在のレイアウトを変更して、全体ズームをする”
を繰り返します。

(defun c:test ()

  (foreach n (layoutlist)
    (setvar "CLAYOUT" n)
    (command-s "._ZOOM" "_E")
  )

(princ))

foreach の引数のリストとして、(layoutlist)を渡し、現在のレイアウトのシステム変数CLAYOUTを使って、レイアウトを変えて、ズーム [オブジェクト範囲(E)]を実行します。

今回は関数 layoutlist を使う一例として紹介しました。

これを実際にコマンドとして使う際には、コマンドを実行すると、レイアウトリストの最後のレイアウトで終わるので、コマンド実行時のレイアウトに戻る処理を加えた方がいいと思います。

foreach が入ったサンプルコマンドです。
作業後、全レイアウトを全体表示、座標系はワールドにしておく、現在画層は0にしてから保存するというものです。

まとめ

  • layoutlist は、その図面ファイルのレイアウト名のリストが戻り値。
  • foreach と組み合わせると、全てのレイアウトで同じ処理を繰り返したい時に便利。