这是一个稍微修改过的版本。相同的功能,但wcmatch只使用一次。
(defun c:Test ( / doc ovr ss)
(setq doc (vla-get-activedocument (vlax-get-acad-object)))
(vla-endundomark doc)
(vla-startundomark doc)
(if (setq ss (ssget "_X" '((0 . "DIMENSION") (-4 . "<NOT") (1 . "") (-4 . "NOT>"))))
(vlax-for obj (setq ss (vla-get-activeselectionset doc))
(setq ovr (vla-get-textoverride obj))
(if
(and
(not (wcmatch ovr "*[~\"0-9]*,*[~\"],*\"*?"))
(< 18 (atoi ovr))
)
(vla-put-textoverride
obj
(strcat
(itoa (/ (atoi ovr) 12))
"'-"
(itoa (rem (atoi ovr) 12))
"\""
)
)
)
)
(vla-delete ss)
)
(vla-endundomark doc)
(princ)
) 以下内容未经测试,但可能提供了另一种选择:
(defun c:test ( / g i s v x )
(if (setq s (ssget "_X" '((0 . "DIMENSION") (1 . "*#\"") (1 . "~*\"*?") (1 . "~*[~\"0-9]*"))))
(repeat (setq i (sslength s))
(if (< 18 (setq x (entget (ssname s (setq i (1- i))))
g (assoc 1 x)
v (atoi (cdr g))
)
)
(entmod (subst (cons 1 (strcat (itoa (/ v 12)) "'-" (itoa (rem v 12)) "\"")) g x))
)
)
)
(princ)
) 嗨谢谢Royal Roy,
请使用以下文件进行测试。某些维度文本未更改。请看一看。
英寸到英尺。图纸 嗨,超级Macc,
谢谢你,朋友。一些文本没有更改。请随附文件测试。
非常感谢。
英寸到英尺。图纸 @结构:
我很高兴看到我的代码完全按照预期的功能运行:
1.
根据您的要求,它只更改维度文本。普通文本实体不受影响。
2.
仅更改由一个或多个数字组成并以双引号结尾的标注文本。
因此,在图形中,具有这些替代的尺寸不会更改:
“33-2B-A8\\X ~@7\”空调”
“74 \”\\X==”
此外,此正常文本不会更改:
“66 \“双方”
我希望你理解这里的逻辑。 @结构:
对于您的新图形,这应该可以:
(defun ConvStr (str i / j num sub)
(if (setq i (vl-string-position 34 str i))
(progn
(setq j i)
(while (and (/= j 0) (wcmatch (substr str j 1) "#"))
(setq j (1- j))
)
(if (< 18 (setq num (atoi (substr str (1+ j) (- i j)))))
(ConvStr
(strcat
(setq sub (strcat (substr str 1 j) (itoa (/ num 12)) "'-"(itoa (rem num 12))))
(substr str (1+ i))
)
(1+ (strlen sub))
)
(ConvStr str (1+ i))
)
)
str
)
)
(defun c:ConvAll ( / doc ss)
(setq doc (vla-get-activedocument (vlax-get-acad-object)))
(vla-endundomark doc)
(vla-startundomark doc)
(if (setq ss (ssget "_X" '((0 . "DIMENSION,*TEXT") (1 . "*#*\"*"))))
(progn
(vlax-for obj (setq ss (vla-get-activeselectionset doc))
(if (vl-position (vla-get-objectname obj) '("AcDbText" "AcDbMText"))
(vla-put-textstring obj (ConvStr (vla-get-textstring obj) 0))
(vla-put-textoverride obj (ConvStr (vla-get-textoverride obj) 0))
)
)
(vla-delete ss)
)
)
(vla-endundomark doc)
(princ)
)
谢谢你,罗伊。它正在工作。
页:
1
[2]