;; writen by liki ;; JW_CADのように表示のみ画層をグレー表示したくて作りました。 ;; グレー表示の図形は選択できませんが,スナップは可能です。 ;; ブロック等に対応してません。 ;; ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ;; EBA's Icad 2000.12.20(暫定)版で動作確認済み ;; -------------------------------------------------------------- ;; APPID の登録 ;; アプリ名を"___LIKI____"に設定していますが, ;; 他のアプリとぶつからないように設定してください。 (if (not (tblsearch "APPID" "___LIKI___")) (regapp "___LIKI___")) ;;; 選択図形の属する画層をグレー表示する。 (defun C:half_visible( / en ed ss cnt n ly) (while (setq en (entsel)) ; 図形選択 (setq ed (entget (car en))) ; 図形データ取得 (setq ly (cdr (assoc 8 ed))) ; レイヤー名取得 (setq ss (ssget "X" (list (assoc 8 ed)))) ; 同一レイヤー図形全取得 (setq cnt (sslength ss) n 0) (while (> cnt n) (setq ed (entget (ssname ss n))) ; 選択セットから図形を取出す ;; 現在の図形の色を拡張データに保存 (if (null (assoc 62 ed)) (progn ; 色番号が登録されていない場合(ByLayer) (setq ed (append ed (list (cons 62 252)))) ; グレーに設定 (setq ed (append ed (list (cons -3 (list (cons "___LIKI___" (list (cons 1070 256)))))))) ) (progn (setq ed (append ed (list (cons -3 (list (cons "___LIKI___" (list (cons 1070 (cdr (assoc 62 ed)))))))))) (setq ed (subst (cons 62 252) (assoc 62 ed) ed)) ) ) (entmod ed) ; 図形の更新 (setq n (1+ n)) ; 次の図形 ) ;; レイヤーをロック (setq ed (entget (tblobjname "LAYER" ly))) (setq ed (append ed '((-3 ("___LIKI___" (1000 . "Locked!")))))) (setq ed (subst (cons 70 (logior (cdr (assoc 70 ed)) 4)) (assoc 70 ed) ed)) ; ? (entmod ed) ) (princ) ) ;;; すべて元に戻す。 (defun C:full_visible( / );lay ly ss cnt n en cl $visible) (defun $visible() (setq ly (append (entget lay) '((-3 ("___LIKI___"))))) ; 拡張データの削除 (setq n (logand (cdr (assoc 70 ly)) 65531)) (setq ly (subst (cons 70 n) (assoc 70 ly) ly)) (entmod ly) (setq ss (ssget "X" (list (cons 8 (cdr (assoc 2 ly))) '(-3 ("___LIKI___"))))) ; 拡張データフィルタリング (setq cnt (sslength ss) n 0) (while (> cnt n) (setq en (entget (ssname ss n) '("___LIKI___"))) (setq cl (cdr (cadadr (assoc -3 en)))) (setq en (entget (ssname ss n))) (entmod (append (subst (cons 62 cl) '(62 . 252) en) '((-3 ("___LIKI___"))))) (setq n (1+ n)) ) ) ; (tblnext "LAYER" T) 最初の画層を取得 ; (cdr (assoc 2 (tblnext "LAYER" T))) 画層名を取得 (setq lay (tblobjname "LAYER" (cdr (assoc 2 (tblnext "LAYER" T))))) ; 画層エンティティ名の取得 (setq ly (entget lay '("___LIKI___"))) (if (= (caadr (assoc -3 ly)) "___LIKI___") ($visible)) ; 拡張データに"___LIKI___"が登録されているかチェック (while (setq ly (cdr (assoc 2 (tblnext "LAYER")))) ; すべての画層をチェック (setq lay (tblobjname "LAYER" ly)) (setq ly (entget lay '("___LIKI___"))) (if (= (caadr (assoc -3 ly)) "___LIKI___") ($visible)) ) (princ) ) (princ)