길이 및 면적 리습 문의드려요
컨텐츠 정보
- 313 조회
- 0 추천
- 0 비추천
- 목록
본문
길이 리습에 m 을 면적에 리습에 ㎡를 붙이고 싶은데 어떻게 해야되나요?
1.길이 리습
(defun c:az(/ ss en n n1 k tot dis dis1)
(setvar "cmdecho" 0)
(setvar "dimzin" 0)
(prompt "nSelect object:")
(setq ss (ssget))
(setq n1 (sslength ss))
(setq n n1 k 0)
(setq tot 0 dis 0 dis1 0)
(while (<= 1 n)
(setq en (ssname ss k))
(setq stype (cdr (assoc 0 (entget en))))
(if (= stype "LINE")(progn
(setq spt (cdr (assoc 10 (entget en))))
(setq ept (cdr (assoc 11 (entget en))))
(setq dis1 (distance spt ept))
(setq dis (/ dis1 1000.0))(prin1 dis)
))(terpri)
(if (= stype "LWPOLYLINE")(progn
(command "area" "e" en)
(setq dis1 (getvar "perimeter"))
(setq dis (/ dis1 1000.0))
))
(setq tot (+ tot dis))
(setq n (- n 1))
(setq k (+ k 1))
)
(SETQ to2 (RTOS tot 2 2));;소수점 정리
(terpri)
(prompt "총")(prin1 n1)(prompt "개의 라인…")
(prompt "전체길이 : ")(prin1 to2)(prompt "m")
(SETQ PO (GETPOINT))
(COMMAND "STYLE" "nt" "romans.shx,ghs.shx" "" "" "" "" "")(PRIN1)
(SETQ TESI (* 4.0 (GETVAR "DIMSCALE")))
(COMMAND "TEXT" "Mr" PO tesi "" to2)(PRIN1)
(princ)
(prin1)
)
2.면적리습
;;=====================================================================
; 면적구하기(98주말농부)
; ->pline이나 내부점을 선택하여 화면에 면적을 자동으로 표기(사사오입)
; ->설정값변경 옵션추가/자리수 선택가능(2007.5.11)
;;—— quick area —————————————————
(defun c:qa(/ 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] : "))
(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)
)