(defun c:ufl00005m ( / ents enna outm ) (setq ents (entsel "\n図形を選択:")) (if (/= ents nil) (progn (setq enna (nth 0 ents)) (if (/= enna nil) (setq outm (ufl00005 enna)) ) (print outm) ) ) (princ) ) (defun ufl00005 ( u_entn ;エンティティ名 / kdfg ;0:最適化ポリライン、1:ポリライン npfg ;最適化ポリラインの場合 ; ポリラインフラグ ; 0:既定値 ; 1:閉じたポリライン ; 128:PLINEGEN[頂点で線種をリセット] ;ポリラインの場合 ; ポリラインフラグ ; 0:既定値 ; 1:閉じたポリライン ; 他:AutoCADカスタムガイド参照 npsu ;最適化ポリラインまたはポリラインの頂点数 ppnt ;最適化ポリラインまたはポリラインの構成点 ; 出力リスト構造 ; (setq ppot (list kdfg npfg npsu (list ppnt ppnt ...)) ; ppot が nil:最適化ポリラインまたはポリラインではない enls nknd ppnl pstl nc lppnt ppot ) ;最適化ポリライン(LWPOLYLINE)及びポリライン(POLYLINE)の情報を得る (setq ppot nil) (if (/= u_entn nil) (progn (setq enls (entget u_entn)) (if (/= enls nil) (progn (setq nknd (cdr (assoc 0 enls))) (if (= nknd "LWPOLYLINE") (progn (setq kdfg 0) (setq npfg (cdr (assoc 70 enls))) (setq npsu (cdr (assoc 90 enls))) (setq npsu (fix (+ (float npsu) 0.1))) ;IntelliCAD用 実数+誤差 (setq pstl enls) (setq nc 0) (repeat npsu (setq ppnt (cdr (assoc 10 pstl))) (setq ppnl (assoc 10 pstl)) (setq pstl (member ppnl pstl)) (setq pstl (cdr pstl)) (if (= nc 0) (setq lppnt (list ppnt)) (setq lppnt (append lppnt (list ppnt))) ) (setq nc (+ nc 1)) ) (setq ppot (list kdfg npfg npsu lppnt)) ) ) (if (= nknd "POLYLINE") (progn (setq kdfg 1) (setq npfg (cdr (assoc 70 enls))) (setq pstl (entget (entnext (cdr (assoc -1 enls))))) (setq nc 0) (while (= "VERTEX" (cdr (assoc 0 pstl))) (setq ppnt (cdr (assoc 10 pstl))) (setq pstl (entget (entnext (cdr (assoc -1 pstl))))) (if (= nc 0) (setq lppnt (list ppnt)) (setq lppnt (append lppnt (list ppnt))) ) (setq nc (+ nc 1)) ) (setq npsu nc) (setq ppot (list kdfg npfg npsu lppnt)) ) ) ) ) ) ) ppot )