캐드 분류
리습 길이단위표시 변경
컨텐츠 정보
- 312 조회
- 0 추천
- 0 비추천
- 목록
본문
안녕하세요.
리습 도움 요청드립니다.
선의 길이를 표시해주는 리습인데,
첫번째, 단위를 mm → M로 변경하고 싶습니다.
두번째, 현재 폴리선만 가능한데, 일반선, 호도 길이표시가 되었으면 좋겠습니다.
==========================================================
;;;Created by Ju in hoe,in Seoul
;;;2002.3.9
;;; LWPOLYLINE,POLYLINE 만 선택하여
;;; 폴리선의 중간점에 폴리선의 길이TEXT를 입력한다.
;;;명령어 – mit
(defun dtr (a)
(setq x (* pi (/ a 180.0)))
)
(defun rtd (a)
(setq x (/ (* a 180) pi))
)
(defun text_box_mid (e / eb slope_pt)
(setq eb (entget e))
(setq slope_pt (textbox eb))
)
(defun ErrHandle (Err)
(if (and (/= Err "quit / exit abort")
(/= Err "Function cancelled")
)
(princ Err)
)
(setvar "cmddia" 1)
(setq *error* OldError)
(princ)
)
(defun Get_PolyVtx (EntList / x VtxList AA)
(setq VtxList '())
(cond
((= "LWPOLYLINE" (CDR (ASSOC 0 EntList)))
(foreach x EntList
(if (= (car x) 10)
(setq VtxList (append VtxList (list (cdr x))))
)
)
)
((= "POLYLINE" (CDR (ASSOC 0 EntList)))
(SETQ AA (ENTGET (ENTNEXT (CDR (ASSOC -1 EntList)))))
(WHILE (/= "SEQEND" (CDR (ASSOC 0 AA)))
(setq VtxList (append VtxList (list (cdr (ASSOC 10 AA)))))
(SETQ AA (ENTGET (ENTNEXT (CDR (ASSOC -1 AA)))))
)
)
)
VtxList
)
(defun c:mit (/ ss_poly sno b no
ss pl len_tot VtxList_out
rp_len sum_dist i mid_len seg_dist
ang mod_dist mid_pt len_tot_text
dgree_deg
)
(setq OldError *error*)
(setq *error* ErrHandle)
(setvar "cmdecho" 0)
(command "undo" "be")
(setq input_HEIGHT (getreal "n 문자크기 입력<미입력시 현재 텍스트 크기>:"))
(cond
((/= input_HEIGHT nil)
(setq TEXT_HEIGHT input_HEIGHT)
)
(T
(setq TEXT_HEIGHT (getvar 'textsize))
)
)
;;; (setq TEXT_LAYER "0″) ;TEXT 레이어
;;; (setq TEXT_HEIGHT 1.0) ;TEXT 기
(setq ss_poly (ssget))
;;; (setq ss_poly (ssget "x"
;;; (list
;;; (cons -4 " ;;; (cons 0 "POLYLINE,LWPOLYLINE")
;;; (cons -4 "AND>")
;;; )
;;; )
;;; )
(if (= ss_poly nil)
(progn
(princ " …. 폴리선이 존재하지 않습니다. n")
)
(progn
(princ " Processing …….. n")
(setq sno 0)
(setq b (sslength ss_poly)
no 0
)
(repeat b
(setq ss (ssname ss_poly no))
(setq pl (entget ss))
(setq poly_id (cdr (assoc 0 pl)))
(if (or (= poly_id "LWPOLYLINE") (= poly_id "POLYLINE"))
(progn
(command "area" "o" ss)
(setq len_tot (getvar "perimeter"))
(if (/= len_tot 0.0)
(progn
(setq VtxList_out (Get_PolyVtx pl))
(setq rp_len (length VtxList_out))
(setq sum_dist 0
i 0
)
(setq mid_len (/ len_tot 2))
(while (< sum_dist mid_len)
(setq seg_dist (distance (nth i VtxList_out)
(nth (+ i 1) VtxList_out)
)
)
(setq sum_dist (+ sum_dist seg_dist))
(setq i (+ i 1))
)
(setq ang
(angle (nth (- i 1) VtxList_out) (nth i VtxList_out))
)
(setq mod_dist (- seg_dist (- sum_dist mid_len)))
(setq mid_pt
(polar (nth (- i 1) VtxList_out) ang mod_dist)
)
(setq len_tot_text (rtos (/ len_tot 1000) 2 3))
(setq dgree_deg (rtd ang))
(if (and (> dgree_deg 90) (<= dgree_deg 270))
(progn
(setq dgree_deg (+ 180 dgree_deg))
(setq ang (dtr dgree_deg))
)
)
(entmake (list (cons 0 "TEXT")
(cons 1 len_tot_text)
(cons 10 mid_pt)
(cons 40 TEXT_HEIGHT)
(cons 50 ang)
)
)
;;;문자의 중간점을 기준하여 입력한다.
;;; ——————————————-
;;; (setq e1 (entlast))
;;; (setq xvalue- (/ (caadr (text_box_mid e1)) 2))
;;; (setq new_mid_pt
;;; (polar mid_pt (+ ang (dtr 180)) xvalue-)
;;; )
;;; (setvar "osmode" 0)
;;; (command "move" e1 "" mid_pt new_mid_pt)
;;; ——————————————-
)
)
(setq sno (+ sno 1))
)
)
(setq no (+ no 1))
(if (or (= (rem no 100) 0)
(= no b)
)
(progn
(princ " ")
(princ no)
(princ "/")
(princ b)
(princ "r")
)
)
)
(princ "n 길이가 0.0이 아닌 폴리선 개수: ")
(princ sno)
(princ "n Completed…..")
)
)
(command "undo" "e")
(princ)
)
관련자료
댓글 0
등록된 댓글이 없습니다.