[求助]求批量属性文字转文字
<p>就是还没定义块前的属性文字</p><p>转成单行或多行文字都可</p> 估计这段对你有用((= (cdr (assoc 0 ENTS)) "INSERT")
(setq J (+ J 1))
(princ (strcat "\n正在处理第<"
(itoa (+ J 1))
">个图元,请稍候..."
)
)
(setq ENTB (tblobjname "block" (cdr (assoc 2 ENTS))))
(setq ENTSB (entget ENTB))
;;放过特殊情况
;;2007-01-25修改为在说明中找指定文字
(if (vl-string-search
"SPECIAL TEXTSTYLE"
(if (cdr (assoc 4 ENTSB))
(cdr (assoc 4 ENTSB))
""
)
)
(setq LOOP NIL)
(progn
;;如果是属性块,ENT,如果不是,ENTB
(if (assoc 66 ENTS)
(setq ENT (entnext ENT))
(setq ENT (entnext ENTB))
)
(setq LOOP t)
)
)
;;以下处理INSERT中的属性文字
;;取得块的插入点
;;进入块中图元的循环
(while
(and ENT LOOP)
(setq ELIST (entget ENT))
;;以下开始处理
(if (or (= (cdr (assoc 0 ELIST)) "TEXT")
(= (cdr (assoc 0 ELIST)) "ATTRIB")
)
;;以下IF语句是2007-1-16加入的,对字体是SM的情况加以减化
(if (/= (cdr (assoc 7 ELIST)) "SM")
;;如果图元是TEXT或ATTRIB,进行以下处理
(progn
(setq TXB (textbox ELIST))
;;得到旧的文字总宽度
(setq
OLD_WIDTH (- (car (cadr TXB)) (car (car TXB)))
)
;;得到旧的文字总宽度
(setq ELIST
(subst (cons 7 "SM") (assoc 7 ELIST) ELIST)
)
(setq ELIST (subst (cons 41 0.7)
(assoc 41 ELIST)
ELIST
)
)
(entmod ELIST)
(entmod ENTS)
(setq TXB (textbox ELIST))
;;得到文字宽度
(setq
NEW_WIDTH (- (car (cadr TXB)) (car (car TXB)))
)
;;如果新的文字宽度比旧的文字宽度宽,则对文字宽度进行修改
(if (> NEW_WIDTH OLD_WIDTH)
(setq ELIST
(subst (cons 41 (* 0.7 (/ OLD_WIDTH NEW_WIDTH)))
(assoc 41 ELIST)
ELIST
)
)
)
)
;;如果字体是SM,保证其宽度比例不能超过0.7
(if (> (cdr (assoc 41 ELIST)) 0.7)
(setq ELIST
(subst (cons 41 0.7) (assoc 41 ELIST) ELIST)
)
)
)
)
(entmod ELIST)
(setq ENT (entnext ENT))
(if ENT
(if (= (cdr (assoc 0 (entget ENT))) "SEQEND")
(setq LOOP NIL)
)
)
)
(if (not (assoc 66 ENTS))
(entmod ENTSB)
)
(entmod ENTS)
) <p>不是很懂这个。。。</p><p>na </p> ;;求批量屬性文字轉文字
;;就是還沒定義塊前的屬性文字
;;By LUCAS
(defun C:CH_ATTDEF_TXT (/ LST N SS X)
(prompt "\nSelect \"Attdef\" Objects: ")
(if (setq SS (ssget '((0 . "ATTDEF"))))
(progn
(setq N 0)
(repeat (sslength SS)
(setq LST '((0 . "TEXT")))
(mapcar
'(lambda (X)
(if (not (member (car X) '(-1 2 0 330 5 1 3 70 74 100)))
(setq LST (cons X LST))
(if (= (car X) 2)
(setq LST (cons (cons 1 (cdr X)) LST))
)
)
)
(entget (ssname SS N))
)
(setq LST (reverse LST)
N (1+ N)
)
(entmake LST)
)
(command "_.erase" SS "")
)
)
(princ)
)
(princ "\nType Ch_Attdef_Txt,By Lucas\n")
(princ)
本帖最后由 作者 于 2007-2-14 14:25:18 编辑
06年以前好像也写过,这个是在我电脑上找到的,不象是我自己写的
;; 属性转文本
(defun C:TAG2TXT ()
(setq sset (ssget '((0 . "ATTDEF"))))
(setq num (sslength sset) itm 0)
(while (< itm num)
(setq hnd (ssname sset itm))
(setq ent (entget hnd))
(setq new '((0 . "TEXT")))
(setq new (append new (list (cons 1 (cdr (assoc 2 ent))))))
(setq dolst (list 7 8 10 11 39 40 41 50 51 62 71 72 73))
(foreach grp dolst
(setq addto (assoc grp ent))
(if (/= addto nil)
(setq new (append new (list (assoc grp ent))))
)
)
(entdel hnd)
(entmake new)
(setq itm (1+ itm))
)
(princ)
) 谢谢楼上的2位朋友,这程序解决了大忙了 用CAD扩展工具好了。那里就有。 <p>回楼上的 </p><p>那个是定义块后的 </p> 我是来求工具的 ,我也需要这个,还没学习好 代码怎么用呀
页:
[1]