프로그램
캐드 분류

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

컨텐츠 정보

본문

안녕하세요.
많이들 쓰시는 리습인데 물량을 산출할때 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

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

.

전체 73 / 4 페이지
RSS
번호
제목
이름

최근글


새댓글


알림 0