・ 画層の状態(表示、非表示、フリーズ、ロック)を変更する
画層の状態は、(entmake) (entmod) で処理できないので (command
"-LAYER" ) を使います。
(command "-LAYER" )
は、現在層への処理ができなかったり、確認の"Y"の入力が必要になるので注意が必要です。
1,現在層はフリーズできない
(defun Jos_lay_f ()
(setq lay (cdr (assoc 8 (entget (car (entsel "\nフリーズする画層のオブジェクト選択"))))))
(setq clay (getvar "CLAYER"))
(if (= lay clay)
(princ "\n選択したオブジェクトの画層は現在層です\nフリーズできません")
(command "._-LAYER" "F" lay "")
)
(princ)
)
2,現在層を非表示にするには、"Y"入力が必要
(defun Jos_lay_off ()
(setq lay (cdr (assoc 8 (entget (car (entsel "\n非表示にする画層のオブジェクト選択"))))))
(setq clay (getvar "CLAYER"))
(if (= lay clay)
(progn
(command "._-LAYER" "OF" lay "Y" "")
(princ "\n現在層を非表示にしました")
)
(command "._-LAYER" "OF" lay "")
)
(princ)
)
3.フリーズ画層は表示できない
(command "._LAYER" ) に引数としてわたす画層名は、","で区切って複数の画層名を一度にわたすことが可能です。
ただし、その文字列が長すぎるとエラーになるので注意が必要です。(255文字までは可能であることは確認しましたが、MAXはわかりません)
そのため、文字列の長さをチェックするか、下記のようにリストでわたして処理したほうが安全です。
(setq lay (cdr (assoc 2 (tblnext "LAYER" T)))) ;テーブルの最初の画層 ;
(setq td (tblsearch "LAYER" lay))
(setq list_lay (list lay))
(setq td (tblnext "LAYER"))
(while td ;画層のリスト作成 ;
(setq list_lay (append list_lay (list (cdr (assoc 2 td)))))
(setq td (tblnext "LAYER"))
)
(command "._-LAYER")
(foreach n list_lay (command "T" n))
(foreach n list_lay (command "ON" n))
(command "")