@腐蚀:
请尝试下面的代码。
注意:att.REF使用的某些文本样式与att.DEF使用的文本样式不匹配。代码并没有解决这个问题。
- (vl-load-com)
- ; Return 1 or 0 (=fail).
- (defun TextStyleChange (obj / hgt newStl stl)
- (setq hgt (vla-get-height obj))
- (setq stl (strcase (vla-get-stylename obj)))
- (if
- (and
- (setq newStl
- (cond
- ((wcmatch stl "TXT-##,TXT-#")
- (strcat (substr stl 5) "-TEXT")
- )
- ((= stl "ROMANS")
- (cond
- ((vl-position hgt '(1.3 2.6 6.5 13.0 26.0 32.5 65.0 130.0))
- "13-TEXT"
- )
- ((vl-position hgt '(1.8 3.6 9.0 18.0 36.0 45.0 90.0 180.0))
- "18-TEXT"
- )
- ((= hgt 250.0)
- "25-TEXT"
- )
- ((vl-position hgt '(3.5 7.0 17.5 35.0 70.0 87.5 175.0 350.0))
- "35-TEXT"
- )
- ((vl-position hgt '(5.0 10.0 25.0 50.0 100.0 125.0 500.0)) ; Removed: 250.0.
- "5-TEXT"
- )
- (T
- "7-TEXT"
- )
- )
- )
- )
- )
- (tblobjname "style" newStl)
- )
- (progn
- (vla-put-stylename obj newStl)
- 1
- )
- (progn
- (princ (strcat "\nError: " newStl " not found "))
- 0
- )
- )
- )
- (defun c:demo ( / doc i ss)
- (setq doc (vla-get-activedocument (vlax-get-acad-object)))
- (vlax-for blk (vla-get-blocks doc)
- (if (= :vlax-false (vla-get-isxref blk))
- (vlax-for obj blk
- (if (= (vla-get-objectname obj) "AcDbAttributeDefinition")
- (TextStyleChange obj)
- )
- )
- )
- )
- (if (setq ss (ssget "_X" '((0 . "INSERT") (66 . 1))))
- (repeat (setq i (sslength ss))
- (foreach obj (vlax-invoke (vlax-ename->vla-object (ssname ss (setq i (1- i)))) 'getattributes)
- (TextStyleChange obj)
- )
- )
- )
- (vla-regen doc acallviewports)
- (princ)
- )
|