현재 제가 짜고 있는 리습은 건축 법규중 건축선에 대한 내용중 일부입니다. 그럼 내용을 전부 올립니다.
(defun dtr (a) (* pi (/a 180.0)))
(defun C:DIST (/ os ent1 ent2 ent3 Alist Blist sp1 ep1 sp2 ep2 ang1 temp_p1 temp_p2 per_p1 per)p2 dist river offp1 offp2 offp3 half1 half2) (setvar "cmdecho" 0)
(command "layer" "m" "site" "")
(command "color" "red" "")
(command "linetype" "s" "center" "")
(if
(setq ent1 (entsel "\n>> 대지선을 선택하세요"))
(if
(setq ent2 (entset "\n>> 반대편 길을 선택하세요: "))
(progn
(setq Alist (entget (car ent1))
Blist (entget (car ent2))
sp1 (cdr (assoc 10 Alist))
ep1 (cdr (assoc 11 Alist))
sp2 (cdr (assoc 10 Blist))
ep2 (cdr (assoc 11 Blist))
ang1 (angle sp1 ep1)
temp_p1 (polar sp1 (+ ang1 (dtr 90)) 10.0)
temp_p2 (polar ep1 (+ ang1 (dtr 90)) 10.0)
per_p1 (inters sp2 ep2 sp1 temp_p1 nill)
per_p2 (inters sp2 ep2 ep1 temp_p2 nill)
dist (distance sp1 per_p1)
)
;여기까지는 지난번 알려주신대로 그대로...
(if
(>= dist 4000)
(command "line" sp1 ep1 "")
(progn
(setq river (getstring "\n>> 도로의 끝에 강이나 철도등이 있습니까? "))
(if
(= river "Y")
(progn
(setq offp1 (polar sp2 (+ ang1 (dtr 90)) 4000))
(command "offset" 4000 ent2 offp1 "")
(setq ent3 (entlast))
(command "change" ent3 "" "p" "la (getvar "site") "")
(command "color" ent3 "red "")
)
(progn
(setq half1 (polar sp2 (+ ang1 (dtr 90)) (/dist 2)))
(setq half2 (polar ep2 (+ ang1(dtr 90)) (/dist 2)))
(setq offp2 (polar half1 (+ ang1 (dtr 90)) 2000))
(setq offp3 (polar half2(+ ang1 (dtr 90)) 2000))
(command "line" offp2 offp3 "")
)
)
)
)
)
(princ "\n>>길이 선택되지 않았습니다.")
)
(princ "\n>>길이 선택되지 않았습니다..")
)
(princ)
)
이렇게 짜다 보니 위의 (+ ang1 (dtr 90)) 때문에 첫번째 선이 두번째 선보다 위쪽과 왼쪽에 위치해 있을때만 성립하더군요... 저 참 멍청하죠? 그래서 (+ ang1 (dtr 90))대신 첫번째 선의 방향을 선택하는 다른 방법이 있는지 알고 싶습니다.
그래서 제가 offset에 대한 리습을 찾아보니 (setq (upoint 1 "Which side" nil (cadr ent))란 부분이 이해가 되지 않는군요.upoint나 udist는 무엇을 나타내는 함수인가요?
또한 리습을 공부하다보니 엔티티 정보에 대한 내용의 중요성을 깨닫게 되는군요. 엔티티 정보에서 추출해 쓰는 경우가 많더라구요. 따라서 엔티티 정보에 대해서도 좀 더 상세한 설명(특히 dxf code)을 해주셨으면 감사! 감사!
|