乐筑天下

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

[编程交流] 更改表格属性

[复制链接]

4

主题

15

帖子

11

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 22:48:00 | 显示全部楼层 |阅读模式
大家好,
 
 
我想在这里做一件简单的事,但我想不出来。我正在尝试将图形中所有表格的默认文本颜色更改为黑色。我可以通过选择每个表,转到“属性”,然后将列表顶部的“颜色”属性更改为黑色(如附件中的“ByLayer”图片),但我正在尝试在autolisp中执行此操作
 
 
  1. (vlax-for
  2.   tablestyle
  3.   (vla-item (vla-get-Dictionaries (vla-get-ActiveDocument (vlax-get-acad-object))) "acad_tablestyle")
  4.   (vlax-put-property tablestyle 'Color 0 0 0)
  5. )

 
 
上面是我尝试改变桌子的样式(似乎比浏览每张桌子都要容易),但玩了几个小时后,我仍然一事无成。有人能给我指出正确的方向吗?
234803d4wexx8mxrszst62.jpg
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 22:59:52 | 显示全部楼层
如果我答对了,如果您试图更改图形中已经存在的多个表的颜色,只需创建一个全局选择集并迭代每个表对象,然后使用函数vla put color更改颜色,并使用所需的颜色。
 
HTH。
回复

使用道具 举报

4

主题

15

帖子

11

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 23:04:13 | 显示全部楼层
我原以为更改样式会更容易,但你说得对-在选择集中循环要容易得多。谢谢你的想法!
 
 
任何感兴趣的人的解决方案:
 
 
  1. (vl-load-com)
  2. (if (setq sset (ssget "X" '((0 . "ACAD_TABLE"))))
  3.   (progn
  4.      (setq ctr 0)
  5.      (repeat (sslength sset)
  6.         (setq item (ssname sset ctr))
  7.         (setq item (vlax-ename->vla-object item))
  8.         (setq check (vlax-property-available-p item "Color" T))
  9.         (if check
  10.            (vlax-put-property item 'Color 0)
  11.         )
  12.         (setq ctr (1+ ctr))
  13.      )
  14.   )
  15. (princ)
  16. )
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 23:08:19 | 显示全部楼层
仔细看看这个。
 
  1. (defun c:Test (/ ss i vl)
  2. (if (setq ss (ssget "_X" '((0 . "ACAD_TABLE"))))
  3.    (repeat (setq i (sslength ss))
  4.      (if (vlax-write-enabled-p (setq vl (vlax-ename->vla-object (ssname ss (setq i (1- i))))))
  5.        (vla-put-color vl 0)
  6.      )
  7.    )
  8. )
  9. (princ)
  10. )(vl-load-com)
回复

使用道具 举报

4

主题

15

帖子

11

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 23:20:28 | 显示全部楼层
除了检查块是否已启用写之外,看起来与我发布的内容相同。我不希望区块受到保护,但我认为最好检查一下。
 
 
我注意到的一件事是,这对块内的表不起作用:/但希望不会发生这种情况
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 23:25:16 | 显示全部楼层
 
尝试此例程,阅读例程顶部的注释以了解更多信息。
 
  1. (defun c:Test (/ doc ss i vl)
  2. ;;    Tharwat 08.July.2014        ;;
  3. ;; Function to change the color of     ;;
  4. ;; AutoCAD Tables in all layouts and     ;;
  5. ;; Blocks as well .            ;;
  6. ;;    -----------------------------    ;;
  7. ;; Tables on LOCKED layers should     ;;
  8. ;; be ignored             ;;
  9. (defun *error* (msg)
  10.    (and doc (vla-endundomark doc))
  11.    (if (wcmatch (strcase msg) "*BREAK*,*CANCEL*,*EXIT*")
  12.      (princ msg)
  13.      (princ (strcat "\n** Error: " msg " **"))
  14.    )
  15.    (princ)
  16. )
  17. (vla-startUndomark (setq doc (vla-get-activedocument (vlax-get-acad-object))))
  18. (if (ssget "_X" '((0 . "ACAD_TABLE")))
  19.    (progn (vlax-for tbl (setq ss (vla-get-activeselectionset doc))
  20.             (if (vlax-write-enabled-p tbl)
  21.               (vla-put-color tbl 0)
  22.             )
  23.           )
  24.           (vla-delete ss)
  25.    )
  26. )
  27. (vlax-for bks (vla-get-blocks doc)
  28.    (if (and (eq :vlax-false (vla-get-isxref bks)) (eq :vlax-false (vla-get-islayout bks)))
  29.      (vlax-for bk bks
  30.        (if (and (eq (vla-get-objectname bk) "AcDbTable") (vlax-write-enabled-p bk))
  31.          (vla-put-color bk 0)
  32.        )
  33.      )
  34.    )
  35. )
  36. (vla-regen doc AcAllviewports)
  37. (vla-endundomark doc)
  38. (princ)
  39. )(vl-load-com)
回复

使用道具 举报

4

主题

15

帖子

11

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 23:32:21 | 显示全部楼层
有道理;首先更改所有表,然后查看块内部并在那里更改表。我对vla get blocks命令不太了解,看起来我需要仔细阅读它。
 
在调用vlax命令时,重新定义错误函数有什么特别的原因吗?或者这只是标准过程吗?
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 23:39:09 | 显示全部楼层
 
很好。
 
 
一个很好的问题。
 
实际上,我添加了error函数来确保如果发生任何错误,那么error函数应该结束已经启动的start undo标记。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 23:43:50 | 显示全部楼层
 
由于模型空间和图纸空间块包含在文档的块集合中,因此不需要单独检索和迭代非嵌套表的选择集:
还要注意,ACI颜色0是ByBlock,而不是黑色-对于黑色,您需要使用真彩色。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 23:50:02 | 显示全部楼层
谢谢李的留言。
 
是的,我完全忘记了用块集合迭代空间的方法。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 03:29 , Processed in 1.902191 second(s), 75 queries .

© 2020-2025 乐筑天下

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