지난번 offset에 대한 친절한 답장 감사드립니다.
그런데... 문제가 생겼어요!!!
지난번 12월 9일자 답장에서 써주신
(setq angk (angle (cadr pntA) (cadr pntB)))
로 했더니, 첫번째 선의 클릭 위치와 두번째 선의 클릭 위치에 따라 offset선의 위치 또한 달라지더군요...
아, 이럴수가...
저는 두 평행한 선 사이의 절대값으로의 offset을 원합니다...
흑흑...
다시 제가 지난번 고쳐주신대로 짠 것을 올릴테니 도와주세요...
; 도로에 면한 대지선 결정
(defun dtr (a) (* pi (/ a 180.0)))
(defun C:SITE (/ os ent1 ent2 ent3 Alist Blist sp1 ep1 sp2 ep2 ang1 angk temp_p1 temp_p2 per_p1 per_p2 dist river offp1 half1 half2 offp2 offp3 q:layer q:color q:ltype)
(setvar "CMDECHO" 0)
(setq q:layer (getvar "clayer"))
(setq q:color (getvar "cecolor"))
(setq q:ltype (getvar "celtype"))
(if
(tblsearch "layer" "site")
(setvar "clayer" "site")
(command ".layer" "m" "site" "")
)
(setvar "cecolor" "red") ;시스템 변수를 사용해 색깔을 빨간색으로
(setvar "celtype" "center") ;시스템 변수를 사용해 라인 타입을 center로
(if
(setq ent1 (entsel "\n>> 대지선을 선택하세요: "))
(if
(setq ent2 (entsel "\n>> 반대편 길을 선택하세요: "))
(progn
(setq Alist (entget (car ent1))
Blist (entget (car ent2))
angk (angle (cadr ent1) (cadr ent2)) ;이것은 ent1과 ent2의 엔티티 리스트중 두번째 요소인 엔티티 타입인 "line"을 나타내는 것인가요?
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 nil)
per_p2 (inters sp2 ep2 ep1 temp_p2 nil)
dist (distance sp1 per_p1)
)
(if
(>= dist 4000)
(command "line" sp1 ep1 "") ;4m이상이면 대지선이 건축선
(progn
(setq river (getstring "\n>>도로의 끝에 강이나 철도등이 있습니까? :"))
(if
(or (= river "Y") (= river "y"))
(progn
(setq offp1 (polar sp2 (+ angk (dtr 180)) 4000))
(command "offset" 4000 ent2 offp1 "")
(setq ent3 (entlast)) ; offset으로 생긴 선을 ent3
(command "change" ent3 "" "p" "la" "site" "") ;ent3의 레이어 site로 변경
(command "chprop" ent3 "" "c" "red" "") ; ent3의 색깔을 빨간색으로 변경
) ; 강이나 철도가 존재할 경우
(progn
(setq half1 (polar sp2 (+ angk (dtr 180)) (/ dist 2))) ; 두선사이의 중앙점 half1
(setq half2 (polar ep2 (+ angk (dtr 180)) (/ dist 2))) ; 두선사이의 중앙점 half2
(setq offp2 (polar half1 (+ angk (dtr 180)) 2000)) ; half1에서 ent1 방향으로 2m만큼 떨어진 점 offp2
(setq offp3 (polar half2 (+ angk (dtr 180)) 2000)) ; half2에서 ent2 방향으로 2m만큼 떨어진 점 offp3
(command "line" offp2 offp3 "") ; offp2와 offp3를 연결하는 선 그리기.
) ; 강이나 철도가 존재하지 않을 경우
) ; if에 관련된 괄호
) ; progn에 관련된 괄호
) ; if에 관련된 괄호
) ;progn에 관련된 괄호
(princ "\n.. 길이 선택되지 않았습니다.") ; 반대편 길을 선택하지 않았을 경우
) ; if에 관련된 괄호
(princ "\n.. 대지선이 선택되지 않았습니다.") ; 대지선을 선택하지 않았을 경우
) ; if에 관련된 괄호
(setvar "cecolor" q:color) ; 원래의 색깔로...
(setvar "clayer" q:layer) ; 원래의 레이어로...
(setvar "celtype" q:ltype) ; 원래의 라인 타입으로...
(princ)
) ; defun에 관련된 괄호
(defun c:s(/ os ent1 ent2 ent3 Alist Blist sp1 ep1 sp2 ep2 ang1 angk temp_p1 temp_p2 per_p1 per_p2 dist river offp1 half1 half2 offp2 offp3 q:layer q:color q:ltype) (c:site))
(princ "\n\tC:SITE loaded. Start command with SITE or S")
|