乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
楼主: structo

[编程交流] 英寸到英尺的尺寸

[复制链接]

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 17:34:39 | 显示全部楼层
谢谢
 
这是一个稍微修改过的版本。相同的功能,但wcmatch只使用一次。
  1. (defun c:Test ( / doc ovr ss)
  2. (setq doc (vla-get-activedocument (vlax-get-acad-object)))
  3. (vla-endundomark doc)
  4. (vla-startundomark doc)
  5. (if (setq ss (ssget "_X" '((0 . "DIMENSION") (-4 . "<NOT") (1 . "") (-4 . "NOT>"))))
  6.    (vlax-for obj (setq ss (vla-get-activeselectionset doc))
  7.      (setq ovr (vla-get-textoverride obj))
  8.      (if
  9.        (and
  10.          (not (wcmatch ovr "*[~"0-9]*,*[~"],*"*?"))
  11.          (< 18 (atoi ovr))
  12.        )
  13.        (vla-put-textoverride
  14.          obj
  15.          (strcat
  16.            (itoa (/ (atoi ovr) 12))
  17.            "'-"
  18.            (itoa (rem (atoi ovr) 12))
  19.            """
  20.          )
  21.        )
  22.      )
  23.    )
  24.    (vla-delete ss)
  25. )
  26. (vla-endundomark doc)
  27. (princ)
  28. )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 17:37:14 | 显示全部楼层
以下内容未经测试,但可能提供了另一种选择:
  1. (defun c:test ( / g i s v x )
  2.    (if (setq s (ssget "_X" '((0 . "DIMENSION") (1 . "*#"") (1 . "~*"*?") (1 . "~*[~"0-9]*"))))
  3.        (repeat (setq i (sslength s))
  4.            (if (< 18 (setq x (entget (ssname s (setq i (1- i))))
  5.                            g (assoc 1 x)
  6.                            v (atoi (cdr g))
  7.                      )
  8.                )
  9.                (entmod (subst (cons 1 (strcat (itoa (/ v 12)) "'-" (itoa (rem v 12)) """)) g x))
  10.            )
  11.        )
  12.    )
  13.    (princ)
  14. )
回复

使用道具 举报

14

主题

75

帖子

65

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-5 17:43:05 | 显示全部楼层
嗨谢谢Royal Roy,
 
请使用以下文件进行测试。某些维度文本未更改。请看一看。
英寸到英尺。图纸
回复

使用道具 举报

14

主题

75

帖子

65

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-5 17:45:51 | 显示全部楼层
嗨,超级Macc,
 
谢谢你,朋友。一些文本没有更改。请随附文件测试。
 
非常感谢。
英寸到英尺。图纸
回复

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

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

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 17:51:54 | 显示全部楼层
@结构:
对于您的新图形,这应该可以:
  1. (defun ConvStr (str i / j num sub)
  2. (if (setq i (vl-string-position 34 str i))
  3.    (progn
  4.      (setq j i)
  5.      (while (and (/= j 0) (wcmatch (substr str j 1) "#"))
  6.        (setq j (1- j))
  7.      )
  8.      (if (< 18 (setq num (atoi (substr str (1+ j) (- i j)))))
  9.        (ConvStr
  10.          (strcat
  11.            (setq sub (strcat (substr str 1 j) (itoa (/ num 12)) "'-"  (itoa (rem num 12))))
  12.            (substr str (1+ i))
  13.          )
  14.          (1+ (strlen sub))
  15.        )
  16.        (ConvStr str (1+ i))
  17.      )
  18.    )
  19.    str
  20. )
  21. )
  22. (defun c:ConvAll ( / doc ss)
  23. (setq doc (vla-get-activedocument (vlax-get-acad-object)))
  24. (vla-endundomark doc)
  25. (vla-startundomark doc)
  26. (if (setq ss (ssget "_X" '((0 . "DIMENSION,*TEXT") (1 . "*#*"*"))))
  27.    (progn
  28.      (vlax-for obj (setq ss (vla-get-activeselectionset doc))
  29.        (if (vl-position (vla-get-objectname obj) '("AcDbText" "AcDbMText"))
  30.          (vla-put-textstring obj (ConvStr (vla-get-textstring obj) 0))
  31.          (vla-put-textoverride obj (ConvStr (vla-get-textoverride obj) 0))
  32.        )
  33.      )
  34.      (vla-delete ss)
  35.    )
  36. )
  37. (vla-endundomark doc)
  38. (princ)
  39. )
回复

使用道具 举报

14

主题

75

帖子

65

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-5 17:56:16 | 显示全部楼层
 
谢谢你,罗伊。它正在工作。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-14 13:11 , Processed in 0.558663 second(s), 64 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表