Roy_043 发表于 2022-7-5 17:34:39

谢谢
 
这是一个稍微修改过的版本。相同的功能,但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)
)

Lee Mac 发表于 2022-7-5 17:37:14

以下内容未经测试,但可能提供了另一种选择:
(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)
)

structo 发表于 2022-7-5 17:43:05

嗨谢谢Royal Roy,
 
请使用以下文件进行测试。某些维度文本未更改。请看一看。
英寸到英尺。图纸

structo 发表于 2022-7-5 17:45:51

嗨,超级Macc,
 
谢谢你,朋友。一些文本没有更改。请随附文件测试。
 
非常感谢。
英寸到英尺。图纸

Roy_043 发表于 2022-7-5 17:51:27

@结构:
我很高兴看到我的代码完全按照预期的功能运行:
1.
根据您的要求,它只更改维度文本。普通文本实体不受影响。
2.
仅更改由一个或多个数字组成并以双引号结尾的标注文本。
 
因此,在图形中,具有这些替代的尺寸不会更改:
“33-2B-A8\\X ~@7\”空调”
“74 \”\\X==”
此外,此正常文本不会更改:
“66 \“双方”
 
我希望你理解这里的逻辑。

Roy_043 发表于 2022-7-5 17:51:54

@结构:
对于您的新图形,这应该可以:
(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)
)

structo 发表于 2022-7-5 17:56:16

 
谢谢你,罗伊。它正在工作。
页: 1 [2]
查看完整版本: 英寸到英尺的尺寸