根据李的说法(这意味着它可能是对的),SSGET无法在块内搜索。不出所料,我得到了一些适用于单个文本,但不适用于块属性的东西。
然而,大量借鉴了这条线索
http://www.cadtutor.net/forum/showthread.php?39908-更改多个块属性的宽度因子
我编写了以下代码,通过进入每个块,手动将单个文本和块属性更改为宽度=1
- (defun c:arial ()
- (vl-load-com)
- (vlax-for
- str_text_style
- (vla-get-textstyles (vla-get-activedocument (vlax-get-acad-object)))
- (vla-SetFont str_text_style "Arial" :vlax-False :vlax-False 0 32)
- (vla-put-width str_text_style 1.0)
- (vla-put-height str_text_style 0.0))
- (StripMtext (ssget "x") "FHQW")
- (command "regen")
-
- ;;start eat program
- (setq
- CE (getvar "CMDECHO")
- SS (ssget "X" '((0 . "INSERT")))
- CN 0
- )
- (setvar "CMDECHO" 0)
- (if SS
- (repeat (setq SL (sslength SS))
- (setq
- SN (ssname SS CN)
- NE (entnext SN)
- )
- (while (and
- NE
- (/= (setq EN (cdr (assoc 0 (setq DT (entget NE)))))
- "SEQEND"
- ) ;_ end of /=
- ) ;_ end of and
- (if (= EN "ATTRIB")
- (progn
- (setq DT (subst (cons 41 1) (assoc 41 DT) DT))
- (entmod DT)
- (entupd SN)
- ) ;_ end of progn
- ;;progn
- ) ;_ end of if
- ;;if
- (setq NE (entnext NE))
- ) ;_ end of while
- ;;while
- (setq CN (1+ CN))
- ;;(repeat 25 (princ "\010"))
-
- ) ;_ end of repeat
- ;;repeat
- (princ "\nNo input")
- )
- (setvar "CMDECHO" CE)
-
- ;end ate program
- (if (setq i -1 ss (ssget "_X" '((0 . "TEXT"))))
- (while (setq ent (ssname ss (setq i (1+ i))))
- (setq elst (entget ent))
- (entmod (subst (cons 41 1.0) (assoc 41 elst) elst))
- (entupd ent)))
-
- (princ (strcat "Total " (itoa CN) " blocks were converted to Arial"))
- (princ)
- )
不幸的是,速度非常慢:/
我认为缓慢是由于(ssget“X”((0。“INSERT”))
我不确定这是将每个块(这是我想要的)制作成一组,还是将图纸上的每个对象制作成一组。我怀疑是后者,但我不知道如何修复它。 |