freeok 发表于 2012-11-17 14:29 
您好!终于有侠来了,呵呵。
这是一个炸开字串的程序,原程序只单选,我试着框选,可加不出来。
...
您那个代码不全,没去测试,搞了个没处理特殊字符的,您自己改改,您的原意是炸成线吧,打散一个命令就可以复原,搞结构就搞结构,琢磨这些歪门邪道干什么 - ;;; &&&&&&&&&&开始创建单行文字函数&&&&&&&&&&
- ;;; 参数:l_n------图层名(字符串)
- ;;; t_10------第一对齐点,如t_72或t_73非零,则该值忽略(点)
- ;;; t_t------文字本身(字符串)
- ;;; t_h------文字高度(整型)
- ;;; t_w------宽度因子(实型)
- ;;; t_st------文字样式(字符串)
- ;;; t_50------倾斜角度(整型)
- ;;; t_72------水平文字对正类型
- ;;; t_73-------垂直文字对正类型
- ;;; t_11------第二对齐点,如t_72和t_73为零,则该值忽略(点)
- (defun t_mak (l_n t_10 t_11 t_t t_50 t_72 t_73 t_h t_w t_st /)
- (entmake (list '(0 . "text")
- '(100 . "AcDbEntity")
- (cons 8 l_n)
- '
- (100 . "AcDbText")
- (cons 10 t_10)
- (cons 1 t_t)
- (cons 40 t_h)
- (cons 41 t_w)
- (cons 7 t_st)
- (cons 72 t_72)
- (cons 11 t_11)
- (cons 50 t_50)
- (cons 73 t_73)
- ) ; _ 结束list
- ) ; _ 结束entmake
- )
- ;;; _ 结束defun
- ;;;by bbs.mjtd.com TANER
- (defun str2celst (str / i lst n stri)
- (setq i 1
- n (strlen str)
- )
- (while (<= i n)
- (setq stri (substr str i 1))
- (if (> (ascii stri) 159)
- (setq stri (substr str i 2)
- i (+ i 2)
- lst (cons stri lst)
- )
- (setq stri (substr str i 1)
- i (1+ i)
- lst (cons stri lst)
- )
- )
- (reverse lst)
- )
- )
- (defun ent_t_lst(en / l_n t_10 t_11 t_t t_50 t_72 t_73 t_h t_w t_st t_lst i n)
- (setq l_n (cdr (assoc 8(entget en)))
- t_10 (cdr (assoc 10(entget en)))
- t_11 '(0 0 0)
- t_t(cdr (assoc 1(entget en)))
- t_50(cdr (assoc 50(entget en)))
- t_72 0
- t_73 0
- t_h (cdr (assoc 40(entget en)))
- t_w (cdr (assoc 41(entget en)))
- t_st (cdr (assoc 7(entget en)))
- t_lst(str2celst t_t)
- i 0
- n (length t_lst)
- )
- (while (< i n)
- (t_mak l_n t_10 t_11 (nth i t_lst) t_50 t_72 t_73 t_h t_w t_st)
- (setq i (1+ i) t_10 (polar t_10 t_50 (* t_h t_w 1.27)))
- )
- )
- (defun x_ssn (ss / n lst)
- (repeat (setq N (sslength ss))
- (setq LST (cons (ssname SS (setq N (1- N))) LST))
- )
- )
- (defun c:test1 (/)
- (mapcar '(lambda (x) (ent_t_lst x) (entdel x))
- (x_ssn (ssget '((0 . "text"))))
- )
- )
|