;;;図形(円またはブロック)をユ−ザ−にクリックしてもらい、 ;;;その円と同じ半径の円を(ブロックのときは同一ブロック名のブロックを) ;;;(チェック 要素、線種、画層、色、空間 を含む) ;;;ユ−ザ−が指示する範囲内から捜し出してその個数を求める ;;; AutoCAD2000対応 (defun c:ken (/ ; OBJ ;選択オブジェクト Roop_F ;選択チェック用 ERR_SEL ;選択ミス対応 Filter_list ;選択フィルター ENTS ;カウント要素 ) ;;error処理 (defun ken_err (msg) (setq *error* old_err old_err nil ) ;errorを元に戻す (setvar "CMDECHO" OLD_CMDE) ;エコーバックを元に戻す (princ) ) (setq old_err *error* *error* ken_err) (setq OLD_CMDE (getvar "CMDECHO")) (setvar "CMDECHO" 0) ; プロンプトをエコーバックしない (setq OBJ nil) (setq Roop_F T) (while Roop_F (setq OBJ (entsel "\n図形を選択:")) (setq ERR_SEL (getvar "ERRNO")) ;エラーを検出 (if OBJ (progn ;図形を選択した場合 (setq Filter_list (F_list OBJ)) ;選択フィルター作成 (if Filter_list (progn ;;(setq ENTS (ssget "X" Filter_list)) ;要素の選択 (setq ENTS (ssget Filter_list)) ;要素の選択 (if ENTS (kaku ENTS) ;書き出し (princ "\n選択要素がありませんでした。 ") ) ;end if ) ;end progn ) ;end if (setq Roop_F nil) ;終了Roop off ) ;end progn (progn ;図形を選択しなかった場合 (if (/= ERR_SEL 7) ;選択ミス以外nil (setq Roop_F nil) ) ;end if ) ;end progn ) ;end if ) ;end while (setvar "CMDECHO" OLD_CMDE) ;エコーバックを元に戻す (setq *error* old_err old_err nil) ;errorを元に戻す (princ) );end defun ;;; ssget のフィルター作成 (defun F_list ( ; obj ; / EL ; EL_TYPE ; Filter_list ; ) (setq EL (entget (car OBJ))) (setq EL_TYPE (MF-dxf 0 EL)) (setq Filter_List nil) (if (member EL_TYPE '("CIRCLE" "INSERT")) (progn (setq Filter_list (list (assoc 0 EL))) ;図形タイプ (if (member EL_TYPE '("INSERT")) ;ブロック名 (setq Filter_list (append Filter_list (list (assoc 2 EL)))) );;end if (if (assoc 6 EL) ;線種名 (setq Filter_list (append Filter_list (list (assoc 6 EL)))) (setq Filter_list (append Filter_list (list (cons 6 "BYLAYER"))) ) );;end if (setq Filter_list (append Filter_list (list (assoc 8 EL)))) ;画層名 (if (assoc 62 EL) ;色番号 (setq Filter_list (append Filter_list (list (assoc 62 EL)))) (setq Filter_list (append Filter_list (list (cons 62 256)))) );;end if (if (assoc 67 EL) ;空間 0:モデル空間 1:レイアウト空間 (setq Filter_list (append Filter_list (list (assoc 67 EL)))) (setq Filter_list (append Filter_list (list (cons 67 0)))) );;end if (if (member EL_TYPE '("CIRCLE" "ARC")) ;半径 (setq Filter_list (append Filter_list (list (assoc 40 EL)))) );;end if );;end progn (progn (princ (strcat "\n選択した要素 " EL_TYPE " は数えられない図形です。")) );;end progn );;end if Filter_list );;end defun ;;;コマンドラインへの書き出し (defun kaku (ENTS ;選択要素 / ; n ;選択した要素数 n1 ;whileカウント XYZ_list ;位置リスト EL ; EL_XYZ ;位置 suu ;集計カウント数 ) (setq n (sslength ENTS)) ;選択した要素数 (princ (strcat "\n選択要素数:" (rtos n))) (setq suu 0) (setq n1 1) (setq XYZ_list nil) (while (>= n n1) (setq EL (entget (ssname ENTS (- n1 1)))) (setq EL_XYZ (MF-dxf 10 EL)) (if (not (member EL_XYZ XYZ_list)) (progn (setq suu (+ suu 1)) (princ (strcat "\n" (rtos suu) ":" " X=" (rtos (car EL_XYZ)) " Y=" (rtos (cadr EL_XYZ)) " Z=" (rtos (caddr EL_XYZ)) ) );;end princ (setq XYZ_list (append XYZ_list (list EL_XYZ))) );;end progn ) ;end if (setq n1 (+ n1 1)) ) ;;end while (princ (strcat "\n\n " (rtos suu) " 個有りました。 ")) );;end defun (defun MF-DXF (code elist) (cdr (assoc code elist)) ) ;;defun (princ "\nコマンド:KEN")