(defun dtr (a)
(* pi (/ a 180.0))) ;degree to radian
(defun rtd (a)
(/ (* a 180.0) pi)) ;radian to degree
(defun plver_td( );/ ent entl num v10 pver)
(setq ent (car (entsel “n Select pline : “)))
(setq entl (entget ent))
(setq plverl ()) ;구할 vertex list
(setq num 12) ;첫번째 vertex 좌표
(setq v10 10) ;vertex 좌표 code
(setq dis 0) ;거리값
(while (= v10 10)
(setq pver (cdr (nth num entl)))
(setq plverl (cons pver plverl))
(if (/= num 12)
(setq spt_lt (nth 1 plverl))
(setq spt_lt (cdr (assoc 10 entl)))
)
(setq dis (+ (distance pver spt_lt) dis))
(setq num (+ num 4))
(setq v10 (car (nth num entl)))
);while 1-10 10
(setq plverl (reverse plverl))
);defun
(defun dvpt_td(plverl d )
(setq dvptl ()) ;구할 좌표와 각도 list
(setq su (length plverl)) ;pline의 전체 vertex의 갯수
(setq len d) ;pline을 나눌 값
(setq dist 0.0)
(setq index 0)
(setq index1 (+ index 1))
(setq spt (nth index plverl)) ;첫번째 vertex
(setq ept (nth index1 plverl)) ;두번째 vertex
(setq dist (distance spt ept)) ;첫구간의 거리
(setq ang (angle spt ept)) ;첫구간의 각도
(setq lspt (nth (- su 2) plverl))
(setq lept (nth (- su 1) plverl))
(setq ldist (distance lspt lept))
(setq lang (angle lspt lept))
(setq ddist 0.0)
(setq dvptl (cons (list spt ang) dvptl)) ;처음 리스트
(while (< index su)
;(cond
; ((= (rem control 3) 0) (setq len 10))
; ((= (rem control 3) 1) (setq len 5))
; ((= (rem control 3) 2) (setq len 5))
😉
(if (>= dist len)
(progn ;구간 거리가 len길이보다 큰 경우
(setq ddist (- dist len))
(setq npt (polar ept (+ ang pi) ddist)) ;구할 좌표점을 구한다.
(setq dvptl (cons (list npt ang) dvptl)) ;구할 좌표 list를 구한다.
(setq dist ddist)
)
(progn ;구간 거리가 len길이보다 작은 경우
(setq index (+ index 1))
(setq nindex (+ index 1))
(if (/= (nth nindex plverl) nil) ;다음점 좌표 유무
(progn ;유
(setq sp (nth index plverl))
(setq ep (nth nindex plverl))
(setq sedist (distance sp ep))
(setq seang (angle sp ep))
(setq dist (+ dist sedist))
(setq ang seang)
(setq ept ep)
)
) ;if
)
) ;if
) ;while
(setq dvptl (cons (list lept lang) dvptl))
(setq dvptl (reverse dvptl))
) ;defun dvpt 끝
(defun lt_num(t_list) ; space를 뺀 글자수를 센다.
(setq ltnum 0)
(setq lt_list t_list)
(setq lt_1 (cdr (assoc 1 lt_list)))
(setq lt_n (strlen lt_1))
(setq lt_c 0)
(setq lcount 1 d 1)
(while (> lt_n lcount)
(setq lt_tv (substr lt_1 lcount d))
(setq lt_tv_asc (ascii lt_tv))
(if (< lt_tv_asc 127)
(progn ;영문일 경우
(if (/= lt_tv_asc 32)
(setq lt_c (+ 1 lt_c))
)
(setq lcount (+ 1 lcount))
)
(progn ;한글일 경우
(setq lt_c (+ 1 lt_c))
(setq lcount (+ 2 lcount))
)
);if
);while
);space를 뺀 글자수는 lt_c
(defun c:td()
(setvar “CMDECHO” 0)
(setq skekn (car (entsel “n select text : “)))
(setq ekl (entget skekn))
(setq ela (cdr (assoc 8 ekl))) ;layer
(setq ep (cdr (assoc 10 ekl))) ;start point
(setq ea (cdr (assoc 50 ekl))) ;angle
(setq eh (cdr (assoc 40 ekl))) ;높이
(setq etv (cdr (assoc 1 ekl))) ;글값
(setq esc (cdr (assoc 41 ekl))) ;x scale
(setq eo (cdr (assoc 51 ekl))) ;oblique
(setq est (cdr (assoc 7 ekl))) ;font style
(setq until (* (* eh esc) 1.35)) ;자간설정=높이*x scale*1.2
(setq tn (strlen etv)) ;문자열의 길이
(setq eo (rtd eo)) ;각도 변환
(setq index1 1)
(setq chart nil)
(setq c 0)
(lt_num ekl) ;글자수 구하기
(plver_td ) ;글자를 배치할 선의 점 리스트
(setq div_dis (/ dis (- lt_c 1)))
(dvpt_td plverl div_dis);글자위치 및 각도 구하기
(setvar “clayer” ela)
(command “style” est “” eh esc eo “” “” “”)
(entdel skekn)
(repeat tn
; (setq index (+ index 1))
; (setq index1 index)
(setq uncnt (substr etv index1 1))
(setq ascii_t (ascii uncnt))
(if (>= ascii_t 127)
(setq sp 2)
(setq sp 1)
)
(setq char (substr etv index1 sp))
(setq index1 (+ index1 sp))
;(setq eak1 (/ (* ea 180.0) pi))
(if (/= ascii_t 32)
(progn
(setq ep (car (nth c dvptl)))
(setq eak1 (rtd (cadr (nth c dvptl))))
(command “text” ep eak1 char)
(setq c (1+ c))
)
)
(setq ep (polar ep ea until))
)
)