프로그램
캐드 분류

반복적인 비교구문 구성방법문의

컨텐츠 정보

  • 234 조회
  • 5 댓글
  • 0 추천
  • 0 비추천
  • 목록

본문

(if(and(>= len 30800)(<= len 30900))
(progn
(setq t1 0.0167)) ; 1/60
(progn
 (if(and(>= len 41100)(<= len 41200)))
 (progn
 (setq t1 0.0125)) ; 1/80
  (progn
  (if(and(>= len 51400)(<= len 51500)))
  (progn
  (setq t1 0.0100)) ; 1/100
   (progn
   (if(and(>= len 61700)(<= len 61800)))
   (progn
   (setq t1 0.0083)) ; 1/120
    (progn
    (if(and(>= len 77100)(<= len 77200)))
    (progn
    (setq t1 0.0067)) ; 1/150
     (progn
     (if(and(>= len 102800)(<= len 102900)))
     (progn
     (setq t1 0.0050)) ; 1/200
      (progn
      (if(and(>= len 154300)(<= len 154400)))
      (progn
      (setq t1 0.0033)) ; 1/300
       (progn
       (if(and(>= len 308600)(<= len 308700)))
       (progn
       (setq t1 0.0017)) ; 1/600
       (progn
       (setq t1 1))
)


초보입니다. 위리습과 같이
도각의 대각선길이len 값을 입력받아서 그값을 가지고
스케일 t1 값을 찾는 리습을 구성하고 있습니다.
위와 같이 구성하니깐 에러가 뜨네요


다른 좋은 방법이 있을까요?

len 값을 분석해서 스케일t1을 정할수 있는 리습구성 방법 좀 알려주세요
감사합니다.

관련자료

댓글 5 / 1 페이지

조용!!님의 댓글

if 문을 많이쓸경우 에러 날수 있습니다. 7번인가.. 로 알고있는데.. ^_^ 뭐하남님 말씀처럼 cond 문 도움말 보시고 해보세요

xcsh님의 댓글

님의 의도를 모르는 이상    코트의 일부만 올리시면 조언의 범위도 좁아집니다. 질문부분은 지금 처럼 필요부분만 올리는 것이 좋지만   전체적인 상황인 도면에서 작업방법에 관한 간략한 설명을  하는 것이 좋습니다.

님의 if문 처리형태를 보아서는      t1값은 축소를 위한 값으로 보이고     A3 용지인 420*297 (대각선 값 514.4016) 배수값에 1%이하의 범위로 보입니다.

;———————————————————————————– 다른 분들이 말 씀하신 대로 if문대신 cond문을 쓰는 것이 바람직해 보입니다.

1, 님의 문장 줄을 이동하고  제 방식으로 정리한 것과  비교해 보시죠

       (if (and (>= len 30800) (<= len 30900))  (progn (setq t1 0.0167)) ; 1/60 (progn (if (and (>= len 41100) (<= len 41200))  (progn (setq t1 0.0125)) ; 1/80 (progn (if (and (>= len 51400) (<= len 51500))  (progn (setq t1 0.0100)) ; 1/100 (progn (if (and (>= len 61700) (<= len 61800))  (progn (setq t1 0.0083)) ; 1/120 (progn (if (and (>= len 77100) (<= len 77200))  (progn (setq t1 0.0067)) ; 1/150 (progn (if (and (>= len 102800)(<= len 102900)) (progn (setq t1 0.0050)) ; 1/200 (progn (if (and (>= len 154300)(<= len 154400)) (progn (setq t1 0.0033)) ; 1/300 (progn (if (and (>= len 308600)(<= len 308700)) (progn (setq t1 0.0017)) ; 1/600            (progn (setq t1 1))      ; 1/1 )) )) )) )) )) )) )) ) 님이 사용한 코드는 괄호를 많이 닫아야 합니다. ;———————————————————————————– 2,  님의 if문은 한줄수행이므로 progn이 필요하지 않은 것 같습니다. (if (and (>= len 30800) (<= len 30900))  (setq t1 0.0167) ; 1/60 (if (and (>= len 41100) (<= len 41200))  (setq t1 0.0125) ; 1/80 (if (and (>= len 51400) (<= len 51500))  (setq t1 0.0100) ; 1/100 (if (and (>= len 61700) (<= len 61800))  (setq t1 0.0083) ; 1/120 (if (and (>= len 77100) (<= len 77200))  (setq t1 0.0067) ; 1/150 (if (and (>= len 102800)(<= len 102900)) (setq t1 0.0050) ; 1/200 (if (and (>= len 154300)(<= len 154400)) (setq t1 0.0033) ; 1/300 (if (and (>= len 308600)(<= len 308700)) (setq t1 0.0017) ; 1/600           (setq t1 1)      ; 1/1 )))))))) 그래도 괄호가 많네요. ;———————————————————————————– 3,  님의 if문은 꼭 연결할 필요는 없으므로 먼저 기본값을 넣고 (setq t1 1)               ; 1/1 (if (and (>= len 30800) (<= len 30900))  (setq t1 0.0167)) ; 1/60 (if (and (>= len 41100) (<= len 41200))  (setq t1 0.0125)) ; 1/80 (if (and (>= len 51400) (<= len 51500))  (setq t1 0.0100)) ; 1/100 (if (and (>= len 61700) (<= len 61800))  (setq t1 0.0083)) ; 1/120 (if (and (>= len 77100) (<= len 77200))  (setq t1 0.0067)) ; 1/150 (if (and (>= len 102800)(<= len 102900)) (setq t1 0.0050)) ; 1/200 (if (and (>= len 154300)(<= len 154400)) (setq t1 0.0033)) ; 1/300 (if (and (>= len 308600)(<= len 308700)) (setq t1 0.0017)) ; 1/600 한줄씩 처리할 경우 기본값이 앞에 들어가게 됩니다. ;———————————————————————————– 4. 다른분들이 권장하는 cond는 (cond  ((and (>= len 30800) (<= len 30900))  (setq t1 0.0167)) ; 1/60  ((and (>= len 41100) (<= len 41200))  (setq t1 0.0125)) ; 1/80  ((and (>= len 51400) (<= len 51500))  (setq t1 0.0100)) ; 1/100  ((and (>= len 61700) (<= len 61800))  (setq t1 0.0083)) ; 1/120  ((and (>= len 77100) (<= len 77200))  (setq t1 0.0067)) ; 1/150  ((and (>= len 102800)(<= len 102900)) (setq t1 0.0050)) ; 1/200  ((and (>= len 154300)(<= len 154400)) (setq t1 0.0033)) ; 1/300  ((and (>= len 308600)(<= len 308700)) (setq t1 0.0017)) ; 1/600  (t (setq t1 1)) ) if문과 별다르지 않지만 간단 합니다. 마지막 줄에 기본값을 넣어주는 것만 알면 됩니다. ;———————————————————————————– 5. 게다가 님의 판별 범위는 너무 좁아서 끊어져 있습니다.    대각선 길이가 36008(1/70 축척)이라면 지금은 1/1로 됩니다.    ( 308700보다 큰값도 1/1로 나오게 됩니다.)    앞에 범위의 마지막 값이 다음범위의 초기값으로 설정해서 빈곳을 없애야 합니다.    예외 사항에 대한 처리도 넣으면 좋겟죠.

(cond  ((and (<      0 len)(<= len  30800)) (setq t1 0.0167)) ; 1/1  ((and (<  30800 len)(<= len  30900)) (setq t1 0.0167)) ; 1/60  ((and (<  30900 len)(<= len  41200)) (setq t1 0.0125)) ; 1/80  ((and (<  41200 len)(<= len  51500)) (setq t1 0.0100)) ; 1/100  ((and (<  51500 len)(<= len  61800)) (setq t1 0.0083)) ; 1/120  ((and (<  61800 len)(<= len  77200)) (setq t1 0.0067)) ; 1/150  ((and (<  77200 len)(<= len 102900)) (setq t1 0.0050)) ; 1/200  ((and (< 102900 len)(<= len 154400)) (setq t1 0.0033)) ; 1/300  ((and (< 154400 len)(<= len 308700)) (setq t1 0.0017)) ; 1/600  (t (PRINT "축척값이 지정된 범위를 넘었습니다.") (exit)) ; 실행중단 ) ;———————————————————————————–

참고로 저는 모든 축척에 대해 사용하려고 여러줄의 if문대신 축척비율 리스트 값을 만들고 작은 값을 차례로 제거하는 방법을 사용하고 있습니다.

AKASH님의 댓글

친절한 답변 감사합니다.

초보라서 제가 모르는게 너무 많았는데.. 말씀해주신걸 100%이해는 못하겟지만, 소중한 의견 여러번 정독해서 공부하겟습니다.

감사합니다.

전체 7,152 / 1 페이지
번호
제목
이름

최근글


새댓글


알림 0