캐드 면적리습을 쓰는데요.
면적을 찍으면 실제 값과 다르게 나옵니다.
예를들면 실제 area명령이나 list로 찍어본 값이
10.01이면, 리습으로 계산된 값은 10.11
10.001이면 리습은 10.011
이런식으로 소수 몇자리든 상관없이 맨 뒤 바로앞 숫자가 하나 위로 올라가서 계산됩니다.
뭘 수정하면 될까요?
(defun c:AR(/ choi d_ts w_os grpt pt1 ent1 en1 ar1 ar2 ar3 ar4 ar5 an arm ht)
(setq osm (getvar “osmode”))
(prompt “…면적구하기”)
(setq choi (getvar “orthomode”) d_ts (getvar “textsize”)
w_os (getvar “osmode”) )
(setvar “orthomode” 0)
(setq ht d_ts)
(prompt “nText Height<“) (prin1 ht) (prompt “>: “)
(setq ht (getdist))
(if (= ht nil) (setq ht d_ts))
;;
(setq ent1 (entsel “nPline 선택<internal point>->”))
(if (/= ent1 nil)(progn
(setq en1 (car ent1)) (redraw en1 3)
(setq grpt (grread T))
(setq pt1 (cadr grpt))
(command “area” “e” ent1)
))
;-boundary start
(if (= ent1 nil)(progn
(prompt “nSelect internal point->”)
(command “boundary” pause “”)
(setq en1 (entlast))(redraw en1 3)
(command “area” “e” “l”)
(setq pt1 (getvar “lastpoint”))
));-boundary end
(setq ar1 (/ (getvar “area”) 10))
(setq ar2 (rtos ar1 2 0))
(setq an (strlen ar2))
(setq arm (substr ar2 (- an 1) 1))
(setq arm (atof arm))
(setq ar3 (atoi ar2))
(if (>= arm 5)(progn
(setq ar3 (+ ar3 100))
))
(setq ar3 (rtos ar3 2 0))
(setq ar4 (strcat (substr ar3 1 (- an 5)) “.” (substr ar3 (- an 4) 4) ))
(if (= (substr ar4 1 1) “.”) (setq ar4 (strcat “0” ar4)))
(setq ar5 (strcat (substr ar2 1 (- an 5)) “.” (substr ar2 (- an 4) 5) ))
(if (= (substr ar5 1 1) “.”) (setq ar5 (strcat “0” ar5)))
(command “text” “j” “r” pt1 ht “0” ar4)
(prompt “nEnter text point->”)
(command “move” “l” “” pt1 pause)
(redraw en1 4)
(prompt “nArea : “)(prin1 ar5) (prompt ” or “)(prin1 ar4)(terpri)
(setvar “orthomode” choi) (setvar “osmode” w_os)
(setvar “osmode” osm) ; 오스냅 원래대로 (저장했던 지점)
(prin1)
)
(rtos ar1 2 0) 을 (rtos ar1 2 2)로 수정하시고