면적 구하는 리습입니다.
리습을 사용하면 첨부된 사진의 왼쪽과 같이 나오는데
오른쪽과 같이 나오게 하고 싶으면 어떻게 수정해야하나요?
첨부 리습중 밑에 있는 ay 명령어를 사용합니다.(위에 있는 AAA 명령어는 폰트크기, 자릿수 설정시에만 사용합니다. 합칠줄을 몰라서 ㅠㅠ)
리습 고수님들의 답변 부탁드려요
(defun c:AAA(/ os ot ts ht a yn tem ent1 en1 grpt pt1 ar1 ar2 ar3)
;->*error* start
(defun *error* (msg)(princ “error: “)(princ msg)
(setvar “osmode” os)(setvar “orthomode” ot)
(princ))
;-<*error* end
(prompt “…면적구하기”)
(setq os (getvar “osmode”) ot (getvar “orthomode”)
ts (getvar “textsize”))
(setvar “orthomode” 0) (setvar “osmode” 0)
(if (= dw nil) (setq dw 2))
;설정값 변경
(setq a (strcat “n현재 설정값(문자높이=” (rtos ts 2 1)
“,자리수=” (rtos dw 2 0) “)을 변경할까요? [Y/N] <N> : “))
(initget “Yes No”)
(setq yn (getkword a))
(if (= yn “Yes”)
(progn
(setq a (strcat “n문자높이<” (rtos ts 2 1) “>:”))
(setq ht (getdist a))
(if (= ht nil) (setq ht ts))
(setq a (strcat “n소수점 자리수을 지정<” (rtos dw 2 0) “>:”))
(setq tem (abs (getint a)))
(if (= tem nil) (setq dot dw) (setq dot tem) )
(setq dw dot)
)
(setq ht ts dot dw)
)
;선택방법
(setq ent1 (entsel “nPline선택 <내부점 선택>->”))
(if ent1
(progn
(setq en1 (car ent1)) (redraw en1 3)
(setq grpt (grread T))
(setq pt1 (cadr grpt))
(command “area” “e” ent1) )
(progn
(prompt “nSelect internal point->”)
(command “boundary” pause “”)
(setq en1 (entlast))(redraw en1 3)
(command “area” “e” “l”)
(setq pt1 (getvar “lastpoint”)) )
)
;
(setq ar1 (/ (getvar “area”) 1000000));제곱미터로 변경
(setq ar2 (rtos ar1 2 dot));자리수=dot
(if (>= dot 1)
(setq ar3 (@tx_dot ar2 dot))
(setq ar3 ar2)
)
(command “text” “j” “r” pt1 ht “0” ar3)
(prompt “nEnter text point->”)
(command “move” “l” “” pt1 pause)
(redraw en1 4)
(setvar “osmode” os)(setvar “orthomode” ot)
(prompt “n면적: “)(prin1 ar1)(prompt “㎡”)
(prin1))
;문자로된 숫자의 자리수를 맞추고 문자로 되돌리기
(defun @tx_dot(tx dot / k k1 tx tx1 tx2 tx3)
(setq k1 (vl-string-position (ascii “.”) tx))
(if (= k1 nil) (setq tx1 (strcat tx “.0”)) (setq tx1 tx))
(setq k (strlen tx1))
(setq k1 (vl-string-position (ascii “.”) tx1))
(setq tx2 (substr tx1 1 (+ k1 1)));정수부분
(setq tx3 (substr tx1 (+ k1 2)));소수부분
(setq k (strlen tx3))
(while (< k dot)
(setq tx3 (strcat tx3 “0”))
(setq k (strlen tx3))
)
(strcat tx2 tx3)
)
(DEFUN C:AY()
(SETVAR “CMDECHO” 1)
(SETVAR “REGENMODE” 0)
(COMMAND “AREA” “e” pause)
(setvar “lunits” 2)
(setvar “luprec” 2)
(SETQ PP (GETPOINT “n Pick the point : “)
TS (GETVAR “TEXTSIZE”)
AREA (GETVAR “AREA”)
AA (/ AREA 1000000)
AREA1 (RTOS AA 2 3)
AREA2 (RTOS (* AA 0.3025) 2 3)
AA (STRCAT “” AREA1 “㎡ /” AREA2 “PY” “”)
)
(COMMAND “TEXT” PP TS “0” AA)
)
맨 밑에서 4번째줄
AA (STRCAT “” AREA1 “㎡ /” AREA2 “PY” “”)
이걸 어떻게 수정하면 될거같은데
어떻게 해아할지 모르겠네요 ㅜㅠ
(setq AA (STRCAT “” AREA1 “n” AREA2 “”)) 이렇게요
그렇게 수정했더니 aaa는 되는데 ay는 알수 없는 명령이라고 뜨네요
그래서
AA (STRCAT “” AREA1 “n” AREA2 “”))
이렇게만 바꿔봤더니
면적이 43.9413.292 요렇게 붙어서 나와요 ㅠㅠ
(DEFUN C:AY()
(SETVAR “CMDECHO” 1)
(SETVAR “REGENMODE” 0)
(COMMAND “AREA” “e” pause)
(setvar “lunits” 2)
(setvar “luprec” 2)
(SETQ PP (GETPOINT “n Pick the point : “)
TS (GETVAR “TEXTSIZE”)
AREA (GETVAR “AREA”)
AA (/ AREA 1000000)
AREA1 (RTOS AA 2 3)
AREA2 (RTOS (* AA 0.3025) 2 3)
; AA (STRCAT “” AREA1 “㎡ /” AREA2 “PY” “”))
(COMMAND “TEXT” PP TS “0” AREA1 )
(COMMAND “TEXT” (polar PP (* 1.5 pi) (* 1.2 TS)) TS “0” AREA2 )
)
; 여기에서 (* 1.2 TS) 는 줄긴격임..1.2를 수정..줄간격
수고하셨습니다.. 저같은 경우는 command문을 사용 않하는지라…좌표계산이 습관이 되서…ㅠㅠ