乐筑天下

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

[编程交流] Lisp更改为所有尺寸

[复制链接]

60

主题

149

帖子

90

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
300
发表于 2022-7-5 15:02:16 | 显示全部楼层 |阅读模式
你好
 
我正在寻找一个lisp代码,它可以在所有标注样式中对变量执行3个更改,即:
 
1.尺寸线-颜色设置为52
2.尺寸界线-颜色设置为52
3.文字外观-颜色设置为52
 
为了进一步推进,我还需要对特定文件夹中的所有图形执行此lisp。
 
有人能帮我吗?
 
提前谢谢。
 
当做
 
尼古拉斯
回复

使用道具 举报

60

主题

149

帖子

90

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
300
发表于 2022-7-5 15:08:21 | 显示全部楼层
以下是李·麦克的代码,为了满足我的需要,我稍微修改了一下:
 
  1. (defun c:tnm (/ dimlst doc ss)
  2. (vl-load-com)
  3. (setq dimlst '("1" "2" "3")) ;; Change as necessary
  4. (vlax-for dim (vla-get-Dimstyles
  5.                  (setq doc
  6.                    (vla-get-ActiveDocument
  7.                      (vlax-get-acad-object))))
  8.    (if (vl-position (vla-get-Name dim) dimlst)
  9.      (progn
  10.        (vla-put-activeDimstyle doc dim)
  11.        (setvar "DIMCLRE" 52)
  12.        (setvar "DIMCLRD" 52)
  13.    (setvar "DIMCLRT" 52)
  14.        (vla-copyfrom dim doc))))
  15. (if (setq ss (ssget "_X" '((0 . "DIMENSION"))))
  16.    (mapcar 'vla-update
  17.      (mapcar 'vlax-ename->vla-object
  18.        (mapcar 'cadr (ssnamex ss)))))
  19. (princ))

 
我想改变一句话,即:
 
  1. (setq dimlst '("1" "2" "3")) ;; Change as necessary

 
如果应用程序能够自动列出所有标注样式并将其保存到变量dimlst中,那就太好了。
回复

使用道具 举报

5

主题

1074

帖子

1088

银币

初来乍到

Rank: 1

铜币
9
发表于 2022-7-5 15:16:32 | 显示全部楼层
这不是Lisp程序,也不可能像李的Lisp程序那样有效,
 
但是,通过配置标准选项,您可以非常接近您的目标
并使用。dws文件,同时进行批量检查。
160218y8tmzqmtz0hdm1t7.jpg
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 15:21:54 | 显示全部楼层
看看这个
 
  1. (defun c:Test (/ d dim ss i obj)
  2. (vl-load-com)
  3. (cond ((not acdoc)
  4.         (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object)))
  5.        )
  6. )
  7. (while (setq d (tblnext "DIMSTYLE" (null d)))
  8.    (setq dim (vla-item (vla-get-Dimstyles
  9.                          acdoc
  10.                        )
  11.                        (cdr (assoc 2 d))
  12.              )
  13.    )
  14.    (vla-put-activeDimstyle acdoc dim)
  15.    (setvar "DIMCLRE" 52)
  16.    (setvar "DIMCLRD" 52)
  17.    (setvar "DIMCLRT" 52)
  18.    (vla-copyfrom dim acdoc)
  19. )
  20. (if (setq ss (ssget "_X" '((0 . "DIMENSION"))))
  21.    (repeat (setq i (sslength ss))
  22.      (setq obj (ssname ss (setq i (1- i))))
  23.      (vla-update (vlax-ename->vla-object obj))
  24.    )
  25. )
  26. (princ)
  27. )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 15:27:53 | 显示全部楼层
嗨,尼古拉斯,
 
这是我的一些非常古老的代码,你已经发现了!
 
下面是我今天如何重写函数:
 
  1. (defun c:dimupd ( / adm doc sel styles )
  2.    (setq styles '("1" "2" "3") ;; Dimension Styles to Update
  3.          styles  (mapcar 'strcase styles)
  4.    )
  5.    (setq doc (vla-get-activedocument (vlax-get-acad-object))
  6.          adm (vla-get-activedimstyle doc)
  7.    )
  8.    (vlax-for dim (vla-get-dimstyles doc)
  9.        (if (member (strcase (vla-get-name dim)) styles)
  10.            (progn
  11.                (vla-put-activedimstyle doc dim)
  12.                (setvar 'dimclre 52)
  13.                (setvar 'dimclrd 52)
  14.                (setvar 'dimclrt 52)
  15.                (vla-copyfrom dim doc)
  16.            )
  17.        )
  18.    )
  19.    (if (ssget "_X" '((0 . "*DIMENSION")))
  20.        (progn
  21.            (vlax-for obj (setq sel (vla-get-activeselectionset doc))
  22.                (vl-catch-all-apply 'vla-update (list obj))
  23.            )
  24.            (vla-delete sel)
  25.        )
  26.    )
  27.    (vla-put-activedimstyle doc adm)
  28.    (princ)
  29. )
  30. (vl-load-com) (princ)
回复

使用道具 举报

60

主题

149

帖子

90

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
300
发表于 2022-7-5 15:31:13 | 显示全部楼层
感谢李·麦克、塔瓦和达加德提供的代码。Tharwat的代码运行良好。它会自动将更改应用于所有标注样式,而不考虑名称。有没有办法将塔尔瓦特代码的这一特性融入李·麦克的更新代码中?有没有一种方法可以在不使用script Pro之类的脚本程序的情况下,将此代码中的指令自动携带到特定文件夹(如Lee Mac的Bfind lisp)中的所有图形?或者,是否有一个程序可以在包含DCL功能的某个库中执行更多的操作?
回复

使用道具 举报

60

主题

149

帖子

90

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
300
发表于 2022-7-5 15:38:32 | 显示全部楼层
感谢DADGAD的标准功能。我几年前读过这篇文章,但从未真正尝试过。我会尽全力学习这个功能,因为我相信它会对我有很大帮助。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 15:41:05 | 显示全部楼层
哦,我以为你只想修改某些样式,修改所有样式更简化了代码:
 
  1. (defun c:dimupd ( / adm doc sel )
  2.    (setq doc (vla-get-activedocument (vlax-get-acad-object))
  3.          adm (vla-get-activedimstyle doc)
  4.    )
  5.    (vlax-for dim (vla-get-dimstyles doc)
  6.        (vla-put-activedimstyle doc dim)
  7.        (setvar 'dimclre 52)
  8.        (setvar 'dimclrd 52)
  9.        (setvar 'dimclrt 52)
  10.        (vla-copyfrom dim doc)
  11.    )
  12.    (if (ssget "_X" '((0 . "*DIMENSION")))
  13.        (progn
  14.            (vlax-for obj (setq sel (vla-get-activeselectionset doc))
  15.                (vl-catch-all-apply 'vla-update (list obj))
  16.            )
  17.            (vla-delete sel)
  18.        )
  19.    )
  20.    (vla-put-activedimstyle doc adm)
  21.    (princ)
  22. )
  23. (vl-load-com) (princ)
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 15:50:43 | 显示全部楼层
 
不客气,很高兴我的代码为您工作。
 
作为对该问题解决方案的操作,请尝试我的例程中的以下代码,并将其添加到您的acaddoc中。lsp或使用命令“appload”并将代码添加到内容(公文包)中,以便能够在所有新的打开图形上自动运行代码。在那之后,打开所有需要的绘图,代码就会完成,保存并单独关闭每个绘图。
 
完成从Autocad分离代码以避免在所有新打开的图形上执行代码时。
回复

使用道具 举报

0

主题

3

帖子

3

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 15:52:36 | 显示全部楼层
这太棒了。我应该添加什么来更改文字大小、箭头大小和文字偏移距离?
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-15 00:44 , Processed in 3.279574 second(s), 74 queries .

© 2020-2025 乐筑天下

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