위그림과 같은 화살표와 U를 표현하기 위한 라인타입은 어케 만들어야 하나요?
리습을 요청 해보았는데.. 고수님들의 어려움이 있다고 하셔서…
라인타입을 만드는게 빠르다고 조언해주셨는데…
어떡해 만들어야 하는지 몰라서요..
고캐드 고수님이 만들어주신 리습도 같이 올려볼께요..
응용이 가능한 리습이 되는지 몰겠습니다.
리습 실행은 포인트1 에서 포인트2로 클릭을 했을때 그림과 같이 결과물이 나오는건데요..
아래 리습을 응용할수 있을가요?
;담장, 옹벽, 휀스 명령어
(defun c:bd (/ old1 sp ep);;;담장그리기
(setq old1 nil)
(setq sp (getpoint “n 시작점 : “))
(if sp
(progn
(if (tblsearch “layer” “담장”)
(command “layer” “s” “담장” “color” 33 “담장” “”)
(command “layer” “m” “담장” “color” 33 “담장” “”)
)
(while (setq ep (getpoint sp “n 끝점 : “))
(setq old1 (addwallmain sp ep 0.2 “solid” old1))
(setq sp ep)
)
)
)
(princ)
)
(defun c:ob (/ old1 sp ep);;;옹벽그리기
(setq old1 nil)
(setq sp (getpoint “n 시작점 : “))
(if sp
(progn
(if (tblsearch “layer” “옹벽”)
(command “layer” “s” “옹벽” “color” 7 “옹벽” “”)
(command “layer” “m” “옹벽” “color” 7 “옹벽” “”)
)
(while (setq ep (getpoint sp “n 끝점 : “))
(setq old1 (addwallmain sp ep 0.3 “donut” old1))
(setq sp ep)
)
)
)
(princ)
)
(defun c:hs (/ old1 sp ep);;;휀스그리기
(setq old1 nil)
(setq sp (getpoint “n 시작점 : “))
(if sp
(progn
(if (tblsearch “layer” “휀스”)
(command “layer” “s” “휀스” “color” 6 “휀스” “”)
(command “layer” “m” “휀스” “color” 6 “휀스” “”)
)
(while (setq ep (getpoint sp “n 끝점 : “))
(setq old1 (addwallmain sp ep 0.0 “fance” old1))
(setq sp ep)
)
)
)
(princ)
)
(defun addwallmain (sp ep width types old1 / l2 os dist ang sp2 ep2 typesnum space index tp1 tp2 tp3 tp4)
(cond;;;심볼사이의 거리
((= (strcase types) “SOLID”) (setq typelens 2.3))
((= (strcase types) “DONUT”) (setq typelens 2.0))
((= (strcase types) “FANCE”) (setq typelens 5.0))
)
(setq os (getvar “osmode”))
(setvar “osmode” 0)
(setq dist (distance sp ep))
(setq ang (angle sp ep))
(setq sp2 (polar sp (+ ang (dtr 90.0)) width))
(setq ep2 (polar ep (+ ang (dtr 90.0)) width))
(setq typesnum (fix (/ dist typelens)));;;심볼갯수 구하기
(command “line” sp ep “”)
(if (/= (strcase types) “FANCE”) (command “line” sp2 ep2 “”))
(setq l2 (entlast))
(setq index 0)
(cond
((= (strcase types) “SOLID”)
(setq space (/ (- dist (- (* typesnum typelens) 0.8)) 2.0));;;담장의 간격 0.8을 제외
(repeat typesnum
(setq tp1 (polar sp ang (+ space (* index typelens))))
(setq tp2 (polar tp1 (+ ang (dtr 90.0)) width))
(setq tp3 (polar sp ang (+ space (- (* (+ index 1) typelens) 0.8))))
(setq tp4 (polar tp3 (+ ang (dtr 90.0)) width))
(command “solid” tp1 tp2 tp3 tp4 “”)
(setq index (1+ index))
)
)
((= (strcase types) “DONUT”)
(setq space (/ (- dist (* (- typesnum 1) typelens)) 2.0));;;donut이므로 심볼 하나 추가
(repeat typesnum
(setq tp1 (polar sp ang (+ space (* index typelens))))
(setq tp2 (polar tp1 (+ ang (dtr 90.0)) (/ width 2.0)))
(command “donut” 0.0 width tp2 “”)
(setq index (1+ index))
)
)
((= (strcase types) “FANCE”)
(setq space (/ (- dist (* (- typesnum 1) typelens)) 2.0));;;마지막 심볼 하나 추가
(repeat typesnum
(setq tp2 (polar sp ang (+ space (* index typelens))))
(command “line” (polar tp2 (dtr 125.0) 0.5) (polar tp2 (dtr -45) 0.5) “”)
(command “line” (polar (polar tp2 (dtr 125.0) 0.1) (dtr 45.0) 0.5) (polar (polar tp2 (dtr 125.0) 0.1) (dtr 225.0) 0.5) “”)
(command “line” (polar (polar tp2 (dtr -45.0) 0.1) (dtr 45.0) 0.5) (polar (polar tp2 (dtr -45.0) 0.1) (dtr 225.0) 0.5) “”)
(setq index (1+ index))
)
)
)
(if old1
(if (/= (strcase types) “FANCE”)(command “fillet” old1 l2))
)
(setvar “osmode” os)
l2
)
(defun dtr (a) (* pi (/ a 180.0)))
(defun rtd (a) (/ (* a 180.0) pi))