프로그램
캐드 분류

거리산출 리습 소수점 수정 부탁드립니다.

컨텐츠 정보

  • 216 조회
  • 2 댓글
  • 0 추천
  • 0 비추천
  • 목록

본문

안녕하세요.
많이들 쓰시는 리습인데 물량을 산출할때 0.5단위로 끊어서 산출서에 표현을 하고싶은데
초보라 힘드네요.
지금 리습은 소숫점이 길이대로 나오는데 0.5단위로 반올림 하여 표시되도록 수정 부탁드리겠습니다.

예) 현재 1.6+0.7+2.4+…
      수정 2+1+2.5+…
붉은색 부분을 수정하면 될것 같은데 아무리 해봐도 오류만 나네요…부탁드리겠습니다~~

;┌───────────────────────────────────────────────────────┐
;│■ 클릭한 두 점 사이의 거리를 구하고 최종 결과값을 출력하는 프로그램                                          │
;│   ▶ 소숫점의 수치가 0.2 이하인 경우 내림으로 하고 0.8 이상인 경우 올림으로 함                               │
;│      하지만 1보다 작은 0.2 즉, 200mm 이하인 경우 0으로 할수는 없으므로 그대로 0.2로 출력되게 함              │
;│   ▶ 총거리의 합이 나타날 위치를 클릭하면 구간별 거리값을 나타낸 문자의 1.5배 크기로 출력됨                  │
;└───────────────────────────────────────────────────────┘
(defun C:DD1(/ !layer !addtext !end !pt1 !pt2 !dist !text !sum !TextSize !ssadd)
  (setq !layer "라인거리산출")
  (if (tblsearch "layer" !layer)
    (setvar "clayer" !layer)
    (command "layer" "m" !layer "c" 7 !layer "")
  )
  (command "-style" "거리" "hy울릉도m" 0 1 0 "n" "n")  ; 스타일 작성
  (setq !addtext ""  !end "N"  !sum 0  !TextSize (getvar "userr1″)  !ssadd (ssadd))
  (if (= !TextSize 0)
    (setq !TextSize (getreal (strcat "n문자 크기를 입력하세요<" (rtos (getvar "userr1″)) ">: ")))
  )
  (setvar "userr1″ !TextSize)
  (while (= !end "N")
    (initget 128)
    (setq !pt1 (getpoint (strcat "n문자 크기<" (rtos (getvar "userr1″)) "> / 시작점: ")))
    (if (= 'STR (type !pt1))
      (progn
        (setq !TextSize (atof !pt1))
        (setvar "userr1″ !TextSize)
        (setq !pt1 (getpoint "n시작점: "))
      )
    )
    (setq !pt2 (getpoint !pt1 "n다음점: "))
    (while !pt2
      (setq !dist (distance !pt1 !pt2))
      (setq !text (rtos (/ !dist 1000.0) 2 1))
     
(if (<= (rem (atof !text) 1) 0.2)  ; 소숫점 이하 수치가 0.2보다 작거나 같을 경우
        (progn
          (if (<= (atof !text) 0.2)  ; 원래값이 0.2보다 작거나 같은 경우 0으로 하면 안되므로
            (setq !text (rtos (atof !text) 2 1))  ; 구해진 값 그대로 출력되게 함
            (setq !text (rtos (atof !text) 2 0))  ; 나머지의 경우에는 수치를 잘라 정수로 만듬(내림 효과)
          )
          (setq !addtext (strcat !addtext "+" !text))
        )
        (if (>= (rem (atof !text) 1) 0.8)  ; 소숫점 이하 수치가 0.8보다 크거나 같을 경우
          (progn
            (setq !text (rtos (+ (atoi !text) 1) 2 0))  ; 소숫점 이하 수치를 자르고 1을 더해 정수로 만듬(올림 효과)
            (setq !addtext (strcat !addtext "+" !text))
          )
          (setq !addtext (strcat !addtext "+" !text)) ; 위 두 가지 경우에 해당되지 않을 경우 소숫점 이하까지 구함
        )
      )
     
      (command "text" "m" (@polar !pt1 (@angle !pt1 !pt2) (/ !dist 2)) !TextSize 0 !text)
      (command "line" !pt1 !pt2 "")
      (setq !ssadd (ssadd (entlast) !ssadd))
      (setq !sum (+ !sum (atof !text)))
      (setq !pt1 !pt2)
      (setq !pt2 (getpoint !pt1 "n다음점: "))
    )
    (setq !end (strcase (getstring "종료할까요?(Y/N) : ")))
    (if (= !end "")
      (progn
        (setq !end "N")
        (command "pedit" (entlast) "y" "j" !ssadd "" "w" (/ !TextSize 10.0) "x")  ; line을 pline 객체로 바꾸고 두께를 문자 크기의 10분의 1로 변경함
        (setq !ssadd (ssadd))
      )
    )
  )
  (command "pedit" (entlast) "y" "j" !ssadd "" "w" (/ !TextSize 10.0) "x")
  (command "text" (getpoint "n결과값을 출력할 위치를 클릭하세요: ") (* !TextSize 1.5) 0 (strcat (rtos !sum 2 2) " = " (substr !addtext 2)))
)

관련자료

댓글 2 / 1 페이지

상큼메론90님의 댓글

emoticon

아무도 댓글을 다는 분이 없어서, 그냥 지나가려다가 몇자 적고 갑니다.

리습을 올리시려면, 전부를 올려주세요.  일부만 올리면 리습 테스트를 해 볼 수가 없어요.

질문내용중에

@polar ,   @angle   ,  등등등 <— 이런 함수관련 된 내용들이 질문에 빠져있어요  

그리고 질문에서 예를 든것. 예) 현재 1.6+0.7+2.4+…       수정 2+1+2.5+…      <— 이것은 소숫점 한자리 라는 말같은데 2.5 정체는 뭐예요?

아래 참고해 보세요.

(defun C:DD1 (/ !addtext !end !pt1 !pt2 !dist !text !sum !TextSize !ssadd)   (setq !layer "라인거리산출")   (if (tblsearch "layer" !layer)     (setvar "clayer" !layer)     (command "-layer" "m" !layer "c" 7 !layer "")   )   (command "-style" "거리" "hy울릉도m" 0 1 0 "n" "n")  ; 스타일 작성   (setq !addtext ""  !end "N"  !sum 0  !TextSize (getvar "userr1″)  !ssadd (ssadd))   (if (= !TextSize 0)     (setq !TextSize (getreal (strcat "nt문자 크기를 입력하세요<" (rtos (getvar "userr1″)) ">: ")))   )   (setvar "userr1″ !TextSize)   (while (= !end "N")     (initget 128)     (setq !pt1 (getpoint (strcat "nt문자 크기<" (rtos (getvar "userr1″)) "> / 시작점: ")))     (if (= 'STR (type !pt1))       (progn         (setq !TextSize (atof !pt1))         (setvar "userr1″ !TextSize)         (setq !pt1 (getpoint "nt시작점: "))       )     )     (setq !pt2 (getpoint !pt1 "nt다음점: "))     (while !pt2       (setq !dist (distance !pt1 !pt2))    ;(setq !text (rtos (/ !dist 1000) 2 1))         (setq !text (rtos (+ (/ !dist 1000) 0.5) 2 0))  ; 여기서 0.5를 더합니다.       (setq !addtext (strcat !addtext "+" !text))       (command "text" "m" (@polar !pt1 (@angle !pt1 !pt2) (/ !dist 2)) !TextSize 0 !text)       (command "line" !pt1 !pt2 "")       (setq !ssadd (ssadd (entlast) !ssadd))       (setq !sum (+ !sum (atof !text)))       (setq !pt1 !pt2)       (setq !pt2 (getpoint !pt1 "nt다음점: "))     )     (setq !end (strcase (getstring "종료할까요?(Y/N) : ")))     (if (= !end "")       (progn         (setq !end "N")         (command "pedit" (entlast) "y" "j" !ssadd "" "w" (/ !TextSize 10.0) "x")  ; line을 pline 객체로 바꾸고 두께를 문자 크기의 10분의 1로 변경함         (setq !ssadd (ssadd))       )     )   )   (command "pedit" (entlast) "y" "j" !ssadd "" "w" (/ !TextSize 10.0) "x")   (command "text" (getpoint "n결과값을 출력할 위치를 클릭하세요: ") (* !TextSize 1.5) 0 (strcat (rtos !sum 2 0) " = " (substr !addtext 2))) )

;;

상큼메론90님의 댓글

emoticon

테스트를 못해보니,  에러가 없는지 확인하세요. 

.

전체 7,232 / 379 페이지
번호
제목
이름
게시물이 없습니다.

최근글


새댓글


알림 0