估计这段对你有用 - ((= (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)
- )
|