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