지금 필요한리습이 있어서 혼자 짜집기+검색공부해가면서 만드는중입니다.
현재 만드는 중간입니다만 아마도 COND? 부분에서 계산이 안되는 것 같아서 질문드립니다 .ㅠㅠ
D1값을 두포인트의 DISTANCE로 값을 구한다음
그 값이 얼마냐에 따라서 COND함수로 H1값을 정의하고싶습니다 ….
도움 부탁드립니다 .ㅠㅠ
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun C:tst (/ )
;->*error* start ; 작업중 취소 또는 에러 발생시 오스냅,레이어 복원함
(defun *error* (msg)(princ “error: “)(princ msg) (setvar “osmode” osm) (setvar “clayer” cla) (command “undo” “e”) (princ))
;-<*error* end
(setq osm (getvar “osmode”)) ; 현재 오스냅 저장
(setq cla (getvar “clayer”)) ; 현재 레이어 저장
(command “undo” “GROUP”)
(defun dtr (a) (* pi (/ a 180.0)))
(defun rtd (a) (* 180.0 (/ a pi)))
(SETVAR “blipmode” 0)
(setq p1 (getpoint “n>>start point….:”))
(setq p2 (getpoint “n>>Second point….:”))
(SETQ R1 (OSNAP P1 “END”))
(SETQ R2 (OSNAP P2 “END”))
(SETQ R3 (RTD (ANGLE R1 R2))) ;볼트 회전각도
(SETQ D1 (DISTANCE R1 R2)) ;M값
(SETQ D2 (/ D1 2)) ;M의 반값
(SETQ C1 (POLAR R1 (DTR R3) D2)) ;볼트의 중심
(COND ((= D1 6) (SETQ H1 10)) ;M값 6일때 볼트머리 10
((= D1 8) (SETQ H1 13))
((= D1 10) (SETQ H1 16))
((= D1 12) (SETQ H1 18))
((= D1 16) (SETQ H1 24))
((= D1 20) (SETQ H1 30))
((= D1 24) (SETQ H1 36))
(PROMPT “볼트사이즈가 아님”)
);COND END
(SETQ H2 (/ H1 2)) ;볼트머리의 반값
(SETQ C2 (POLAR C1 (DTR R3) H2))
(COMMAND “LINE” C2 P1 “”);테스트용
(COMMAND H2);테스트용
(command “undo” “e”)
(setvar “osmode” osm) ; 저장했던 오스냅으로 복원
(setvar “clayer” cla) ; 저장했던 레이어로 복원
(princ )
);defun end
제가 cond사용법에대해 엉성하게 알았엇나보네요 답변 감사합니다 ㅎㅎ
감사합니다 ^^ 덕분에 문제해결되었네요 ㅎㅎ
DISTANCE 로 포인트를 잡아서 거리를 설정시 정확하게 그리시는 분이 아니면
실제 도면작업시 6이라도 6.0001등과 같이 소수점이 나올 때가 많습니다.
볼트와 같은 표준품은 중간 값이 없으므로 값을 선택할때 범위를 잡아 주셔서
에러를 줄이는게 쓰기 편할것 같습니다.
(cond
((and (< 5.5 d1) (<= d1 7)) (setq h1 10)) ; 6
((and (< 7 d1) (<= d1 9)) (setq h1 13)) ; 8
((and (< 9 d1) (<= d1 11)) (setq h1 16)) ;10
((and (< 11 d1) (<= d1 14)) (setq h1 18)) ;12
((and (< 14 d1) (<= d1 18)) (setq h1 24)) ; 16
((and (< 18 d1) (<= d1 22)) (setq h1 30)) ; 20
((and (< 22 d1) (<= d1 25)) (setq h1 36)) ; 24
(t (PRINT “입력이 지정된 범위를 넘었습니다.”) (exit)) ; 실행중단
)
cond에 의해 di 값이 참이 아닐경우 h1 값이 없고 nil을 2로 나눌수 없으니 오류가 발생합니다
(t(PROMPT “볼트사이즈가 아님”)) 문구로 바꾸세요
혹시 COND문 자체에서의 정의나 사용방법이 잘못되었는지 궁금합니다 …
아니면 DISTANCE로 뽑아낸 거리값이 “숫자”타입이 아니라 “문자”타입이라 그런것인지 …
문자 <->숫자 변환 함수등등 써봐도 소득이없네요 ㅜㅜ부디 조언 부탁드립니다 ㅠ
아.. 가로가 한번더 쳐져있엇네요 .. 근데 그 문구를 지우고해도 작동이 안되네요 ㅜ
(SETQ C1 (POLAR R1 (DTR R3) D2)) << 같은 방식으로 위쪽에도 같은문구가 있는데 여기서는 포인트가 잘 구해졌엇거든요 ….
지금 COND 아래부분 다 삭제시키고 리습 작동시켜도 안되는거보면
아예 D1자체가 COND에서 6인지 8인지 10인지 구분조차 안되는것 같습니다.
이도저도 아니라면 (PROMPT “볼트사이즈가 아님”) 문구라도 출력이 되어야하는데 그냥 NIL 이나 STRINGP 떠버리니 난감하네요 ㅜㅜ
(SETQ C2 (POLAR C1 (DTR R3) H2))
이부분이 잘못되었네요
그전에 COND조건문 자체가 작동하질 않네요 ㅜㅠㅜ
나누기가 잘못된것 같은데.. 확실치는 않아요~~