안녕하세요.. 황성원 – 나르는 황소 – 입니다.
한선으로 꼬불꼬불 그려진 선의 길이를 알아야 하는데…
그럽으로 묶고 list 명령으로 보면 된다고 하기에 ….
토탈 값이 나오지를 않으니….
어찌 된 일인가요..
선배님들의 충고를 부탁 드립니다.
비밀번호를 잊으셨나요? 비밀번호를 재설정하려면 이메일 주소를 입력해주세요.
해당 질문을 신고하는 이유를 간단히 입력해주세요.
해당 답변을 신고하는 이유를 간단히 입력해주세요.
해당 유저를 신고하는 이유를 간단히 입력해주세요.
pedit에서 join하시고 list쳐보시면..length가 나옵니다.
;; Line,Polyline,LwPolyline의 길이를 계산..
(defun c:q()
(setq len 0
totlen 0
i 0
front 0
end 0
)
(princ “n 화면에서 Polyline,LWPolyline,Line을 선택하세요..”
)
(setq ssgetList (list
(cons 0 “POLYLINE”)
(cons 0 “LWPOLYLINE”)
(cons 0 “LINE”)
(cons -4 “
;(-4 . “OR>”)
;(-4 . “
;(-4 . “OR>”)
;(-4 . “
(cons -4 “OR>”)
)
)
(setq
ss (ssget ssgetList
)
)
(command “change” ss “” “p” “c” “blue” “”)
(setq sslen (sslength ss))
(setq i 0)
(repeat sslen
(setq ename (ssname ss i))
(setq i (1+ i))
(setq ents (entget ename))
(setq ent0 (cdr (assoc 0 ents)))
(cond
((= ent0 “LINE”)
(setq ent10 (cdr (assoc 10 ents)))
(setq ent11 (cdr (assoc 11 ents)))
(setq totlen (distance ent10 ent11))
)
((= ent0 “POLYLINE”)
(setq ename (entnext ename))
(setq ents (entget ename))
(setq ent0 (cdr (assoc 0 ents)))
(setq front (cdr (assoc 10 ents)))
(setq ename (entnext ename))
(setq ents (entget ename))
(setq ent0 (cdr (assoc 0 ents)))
(while (/= ent0 “SEQEND”)
(setq end (cdr (assoc 10 ents)))
(setq totlen (+ totlen (distance front end)))
(setq front end)
(setq ename (entnext ename))
(setq ents (entget ename))
(setq ent0 (cdr (assoc 0 ents)))
)
)
((= ent0 “LWPOLYLINE”)
;; 그룹 10을 뽑아서 리스트로만든다..
(setq list10 (list))
(setq ent-one (car ents))
(while (/= ents nil)
(if (= (car ent-one) 10)
(setq list10 (append list10 (list (cdr ent-one))))
)
(setq ents (cdr ents))
(setq ent-one (car ents))
)
(setq ii 0)
(repeat (1- (length list10))
(setq front (nth ii list10))
(setq end (nth (1+ ii) list10))
(setq totlen (+ totlen (distance front end)))
(setq ii (1+ ii))
)
)
(t
)
)
)
(princ ” nn *** 총 합계 ==> “)
(prin1 totlen)
(princ)
)
(princ “nn 선형데이타의 길이를 구함. ==> 명령: q “)