|
지난번 답변 정말 감사합니다.
list기입도 잘 못하던 제가 이번에는 한번 꺾이는
3차원 계단을 그려보려합니다.
지난번 그렸던 직선계단을 이용해서지만
이번엔 ucs 변경이라는 어마어마한 난관에 봉착했습니다.
나름대로 며칠 고민했지만 계속 기형계단만 그려지고 있습니다. 도저히 원인을 알수없는 부분도 있어서 염치없이 또 제가 작성한 리습 두개를 그대로 올리겠습니다.
r24는 처음에 bp를 입력받고 그것을 이용해
나중 ucs를 바꾸려는 거고
r25는 bp입력을 호출함수 r1안으로 미루고 ucs를 사용자가 직접 입력하는 형태로 하려했지만 뜻대로 되지 않지는 둘다 마찬가지입니다.
캐드에서 한번 띄워보면 아시겠지만 정말 기형계단들입니다. 바쁘시겠지만 꼭 도와주세요.
감사합니다.
(defun c:r24()
;처음에 필요한 치수들을 입력받는다.
(setq bp (getpoint "\n 계단 시작점? "))
(setq width (getdist bp "\n 계단 가로폭? "))
(setq tread (getdist bp "\n tread 치수? "))
(setq riser (getdist bp "\n riser 치수? "))
(setq thck (getdist bp "\n 계단판 두께? "))
(setq s (getdist bp "\n 계단참 길이?" ))
;한번 꺾인 계단을 그리기 위해 직선계단 그리기 r1함수를 두번 호출하는 형식을 취한다.
(command "ucs" "w" "")
(r1); 주의! r1함수는 부르기 전에 먼저 ucs와 bp를 설정해 주어야 한다.
;계단참그리기
(setq sp (list (- (car fp) (* 0.8 tread)) (+ (cadr fp) riser)))
(command "box" sp (list (- (car sp) s) (+ (cadr sp) thck)) (- (* 2 width)) "")
;다음 계단그리기를 위한 ucs설정
;일일이 점을 잡아주는것 말고 좀더 괜찮은 방법이 없을까요?
(command "ucs" "3" (list (- (car bp) (* 0.8 n tread))
(+ (cadr bp) (- (* riser (+ n 1)) thck)) (- (caddr bp) (* 2 width)))
;positive x
(list (- (car bp) (* 0.8 n tread))
(+ (cadr bp) (- (* riser (+ n 1)) thck)) (caddr bp))
;posotive y
(list (car bp)
(+ (cadr bp) (- (* riser (+ n 1)) thck)) (- (caddr bp) (* 2 width)))
;positive z
(list (- (car bp) (* 0.8 n tread))
(+ (cadr bp) (* riser (+ n 1))) (- (caddr bp) (* 2 width)))
)
;다시 r1()호출
(r1)
)
(defun r1()
(setq n (getint "\n 계단 갯수?" ))
(command "box" bp
(list (+ (car bp) width) (+ (cadr bp) tread))
thck "")
(setq box (entlast))
(command "move" box "" bp (list (car bp) (cadr bp) (- (+ (caddr bp) riser) thck)))
;첫계단을 riser만큼 z축으로 올린다.
(setq sbp (list (car bp) (cadr bp) (- (+ (caddr bp) riser) thck)))
;첫계단의 왼쪽 끝점을 sbp로 설정한다.
(command "ucs" "za" sbp (list (- (car bp) width) (cadr bp)))
;계단이 삐뚤어지는건 이 ucs 때문인것 같은데...
(setq fp '(0.0 0.0 0.0))
(repeat (- n 1)
(setq sp (list (- (car fp) (* 0.8 tread)) (+ (cadr fp) riser)))
(command "copy" box "" fp sp)
(setq box (entlast))
(setq fp sp)
)
)
(defun c:r25()
;처음에 필요한 치수들을 입력받는다.
(setq width (getreal "\n 계단 가로폭? "))
(setq tread (getreal "\n tread 치수? "))
(setq riser (getreal "\n riser 치수? "))
(setq thck (getreal "\n 계단판 두께? "))
(setq s (getreal "\n 계단참 길이? " ))
;한번 꺾인 계단을 그리기 위해 직선계단 그리기 r1함수를 두번 호출하는 형식을 취한다.
(command "ucs" "w" "")
(r1); 주의! r1함수는 부르기 전에 먼저 ucs와 bp를 설정해 주어야 한다.
;계단참그리기
(setq sp (list (- (car fp) (* 0.8 tread)) (+ (cadr fp) riser)))
(command "box" sp (list (- (car sp) s) (+ (cadr sp) thck)) (- (* 2 width)) "")
;다시 r1()호출
(r1)
)
(defun r1()
(setq bp (getpoint "\n 계단 시작점? "))
(command "ucs" pause)
(setq n (getint "\n 계단 갯수?" ))
(command "box" bp
(list (+ (car bp) width) (+ (cadr bp) tread))
thck "")
(setq box (entlast))
(command "move" box "" bp (list (car bp) (cadr bp) (- (+ (caddr bp) riser) thck)))
;첫계단을 riser만큼 z축으로 올린다.
(setq sbp (list (car bp) (cadr bp) (- (+ (caddr bp) riser) thck)))
;첫계단의 왼쪽 끝점을 sbp로 설정한다.
(command "ucs" "za" sbp (list (- (car bp) width) (cadr bp)))
;계단이 삐뚤어지는건 이ucs때문인것 같은데....
(setq fp '(0.0 0.0 0.0))
(repeat (- n 1)
(setq sp (list (- (car fp) (* 0.8 tread)) (+ (cadr fp) riser)))
(command "copy" box "" fp sp)
(setq box (entlast))
(setq fp sp)
)
)
|