아래 내용은
교차산 두 선에서
처음 선택한 선이 두번째 선택한 선 기준으로 Break 되는 리습입니다.
처음 입력한 값을 기억 하여 다음에 명령어를 사용하면
이전 값이 계속 이어갈수 있게 변경하고 싶습니다…
dim 값을 if로 이용해서 변경하면 될것 같은데..
이렇게 저렇게해도 값이 저장이 안되네요..
혹시 방법을 알고 계신 고수님들 수정 부탁드립니다.
;===== Q2 – Break Angle Direction ***
(defun c:Q2()
(setvar “cmdecho” 0)
(setq os (getvar “osmode”))
(setvar “OSMODE” 0)
(setq dims (getreal (strcat “n 라인 간격:”)))
(setq n 0)
(setq entn 0)
;;;;;;;;;
(defun st_end (l_list n / ent)
(setq ent (entget (ssname l_list n)))
(setq start_p (cdr (assoc 10 ent))
end_p (cdr (assoc 11 ent))
)
)
;;;;;;;;;
(prompt “n 아래 라인:”)
(setq bls (ssget))
;;;;;;;;;
(prompt “n 위 라인:”)
(setq bl2 (ssget))
(setq bn (sslength bl2))
;;;;;;;;;
;;;;;;;;;
(repeat bn
(st_end bl2 n)
(setq bp3 start_p bp4 end_p)
;;;;;;;;;
(setq nn 0)
(while (<= nn entn)
(if (<= nn entn)
(progn
(st_end bls nn)
(setq bp1 start_p bp2 end_p)
(setq ang1 (angle bp1 bp2))
(if (> ang1 pi)
(setq ang1 (- ang1 pi))
)
)
)
(if (setq cross (inters bp1 bp2 bp3 bp4))
(progn
(setq ang2 (angle bp3 bp4))
(if (> ang2 pi)
(setq ang2 (- ang2 pi))
)
(setq theta (abs (- ang1 ang2)))
(setq dist (/ 0.5 (sin theta))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; break 간격
(setq ps1 (polar cross ang1 (* dist dims)))
(setq ps2 (polar cross (+ ang1 pi) (* dist dims)))
;(command “OSMODE” “0”)
(command “break” (ssname bls nn) ps1 ps2 )
(ssadd (entlast) bls)
(setq entn (1+ entn))
)
)
(setq nn (1+ nn))
)
(setq n (1+ n))
)
(princ)
(command “osmode” os)
)
Specter_MoonLv.0
값 기억 후 다음 입력에 나오게 변경 부탁드립니다.
공유
메론님 빠른 답변 감사합니다
매번 도움 받네요 ^^
그리고 한가지 해석질문있습니다!
(if (= dims nil)(setq dims 0))
– ~경우 (dim이 빈경우)(dims 는 0 이다)
(setq dimss (getreal (strcat “n> 라인간격 : <” (rtos dims 2 0) “> : ” )))
– dimss 는 (키보드 입력 (“라인간격 (?? dim) : “))
(if (numberp dimss)(setq dims dimss))
– ~경우(dimss 숫자일경우)(dims 는 dimss이다)
위에 내용으로 해석 하면 될까요??
책 없이 독학으로 하나한 검색해서 알아보니
힘드네요 ㅎㅎ ^^;;;
1번 비슷한 뜻이며, nil = 거짓 입니다.
2번 비슷한 뜻이며 getreal = 실수만 받는다는 뜻입니다.
예) (setq a (getreal “nasdfasdfsdfasd”))
-> a = 실수만 입력됩니다. “~” 는 보여주기 위한 출력물 입니다.
3번은 맞네요..
빠른 답변 감사합니다 ^^
LISP에 대해 많은 공부 되네요 ^^
감사합니다!!!