;;**************************************************************************************;; ;;サブルーチン MS_hw3 で表示画層のリストを作成し、各画層ごとの線のトータル長さを求める。;; ;; 作成 2001 6 宿題 ;; ;;**************************************************************************************;; (defun c:MS_HW4 (/ SM i AE NA DI filter GA A1) (MS_hw3) ;オブジェクト選択 (if filter (progn (while filter ; (setq GA (list (car filter))) ;画層リスト内の最初の画層名 (setq A1 (append GA '((0 . "LINE")))) ;画層名と線の選択セットリストを作成 (setq AE (ssget "x" A1)) ;選択オブジェクト内の GA 画層にある線を選択 (if AE (progn (setq SM 0 i 0) (while (< i (sslength AE)) ;選択オブジェクトの数だけ繰り返す (setq NA (ssname AE i) DI (distance (asen 10 NA) (asen 11 NA)) ;始点−終点の距離 SM (+ SM DI) ;距離 DI を SM にプラスする i (1+ i) ;カウンターを上げる );setq );while (prnn) ;プリント );progn (princ (strcat "\n" "\n 画層名:" (cdr (car GA)) ": に線はありません") ) );if (setq filter (cdr filter)) );while (princ) );progn (princ "\n オブジェクトがありません") );if (princ) );defun ;;;;; サブルーチン by あつひろ校長 ;;;;; (defun asen (n sn) (cdr (assoc n (entget sn))) ;オブジェクト sn のグループコード n の値取得。 );defun asen (defun prnn () (princ (strcat "\n" "\n 画層名:" (cdr (car GA)) ": の線は ")) ;改行して 画層名を表示 (princ i)(princ "本 / ") ;iを表示 (princ "トータル線長 / ") (princ (rtos SM)) ;SM を表示 (textscr) );defun prnn ;;;;; サブルーチン by hanahusaさん ;;;;; (defun MS_hw3 ( / layer-list is_disp ss ) (defun layer-list ( / ent rval ) ; 図面内の画層リストを作成する (setq ent (tblnext "layer" T)) ;最初の画層名を呼び出し ent に代入。 (while ent (setq rval (append rval (list (cdr (assoc 2 ent)))) ; 画層名を rvalに代入。       ent (tblnext "layer")) ; 次の画層名を呼び出し ent を上書き代入。 );while rval  ) ;defun layer-list (defun is_disp (lay / ent) ; 画層の表示確認 (setq ent (entget (tblobjname "layer" lay))) ; 引数 lay 画層のエンティティを ent に代入。 (and (not (minusp (cdr (assoc 62 ent)))) ; ent のコード62がプラス(画層が表示されている) (/= (logand (cdr (assoc 70 ent)) 1) 1) ; ent の画層がフリーズされていない (/= (logand (cdr (assoc 70 ent)) 4) 4) ; ent の画層がロックされていない ) ; and ) ; defun is_disp (foreach x (layer-list) (if (is_disp x) (setq filter (append filter (list (cons 8 x)))))) ; (layer-list)を x に代入しながら (is_disp)の条件を調べ 満たしている場合は   ; その画層名を filter に代入してゆく。 ) ; defun MS_hw3 (princ "\n コマンド名は MS_HW4 です") (princ)