안녕하세요.. 황성원 – 나르는 황소 – 입니다.
한선으로 꼬불꼬불 그려진 선의 길이를 알아야 하는데…
그럽으로 묶고 list 명령으로 보면 된다고 하기에 ….
토탈 값이 나오지를 않으니….
어찌 된 일인가요..
선배님들의 충고를 부탁 드립니다.
비밀번호를 잊으셨나요? 비밀번호를 재설정하려면 이메일 주소를 입력해주세요.
해당 질문을 신고하는 이유를 간단히 입력해주세요.
해당 답변을 신고하는 이유를 간단히 입력해주세요.
해당 유저를 신고하는 이유를 간단히 입력해주세요.
;; 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 “)
pedit에서 join하시고 list쳐보시면..length가 나옵니다.