乐筑天下

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

[编程交流] 将属性值设置为Variabl

[复制链接]

3

主题

9

帖子

6

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-5 16:38:56 | 显示全部楼层 |阅读模式
如何使用lisp语句将块内的属性值设置为变量?我不希望使用任何用户输入,它需要可以编写脚本。图形中只有一个块实例。如果你需要更多信息,我很乐意提供。谢谢
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 16:49:38 | 显示全部楼层
欢迎来到CADTutor。
 
玩一下下面的游戏,您应该能够在命令行中看到属性列表;
 
  1. (defun c:Test ( / s sn e lst)
  2. (if (setq s (ssget "_X" '((0 . "INSERT")(66 . 1) (2 . "MyBlock")))) [color="red"];; Change the MyBlock name to your block name[/color]
  3.    (progn
  4.      (setq sn (ssname s 0)) [color="red"];; Assumed to run on one block instance / reference.[/color]
  5.      (while (= "ATTRIB" (cdr (assoc 0 (setq e (entget (setq sn (entnext sn)))))))
  6.        (setq lst (cons (cdr (assoc 1 e)) lst))
  7.        )
  8.      )
  9.    )
  10. lst [color="red"];; list of attributes values if available.[/color]
  11. )
回复

使用道具 举报

3

主题

9

帖子

6

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-5 17:01:26 | 显示全部楼层
我在运行代码时插入了块名。然后我在命令行中进行了类型测试,唯一返回的结果是nil。我不知道我应该在这里做什么。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 17:11:01 | 显示全部楼层
你是阻止动态还是常规?
你是如何将你的区块名添加到代码中的?
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 17:25:57 | 显示全部楼层
另一个(只是为了好玩):
  1. (defun GetBlkAttVals ( bnm / o L )
  2. (if (and (setq o (FirstBlkOccurrence bnm)) (setq L (vlax-invoke o 'GetAttributes)) )
  3.    (mapcar 'vla-get-TextString L)
  4. )
  5. ); defun GetBlkAttVals
  6. ; recursive
  7. (defun FirstBlkOccurrence ( n / rec )
  8. (defun rec ( b n i / o )
  9.    (cond
  10.      ( (vl-catch-all-error-p (setq o (vl-catch-all-apply 'vla-item (list b i)))) (prompt "\nError") )
  11.      ( (and (vlax-property-available-p o 'EffectiveName) (= n (vla-get-EffectiveName o))) o)
  12.      ( (rec b n (1+ i)) )
  13.    ); cond
  14. ); defun
  15. (rec (vla-get-Block (vla-get-ActiveLayout (vla-get-ActiveDocument (vlax-get-acad-object)))) n 0)
  16. ); defun FirstBlkOccurrence
  17. ; iterative
  18. (defun FirstBlkOccurrence ( n / i->L b o )
  19. (defun i->L ( i / L ) (if (eq 'INT (type i)) (repeat i (setq L (cons (setq i (1- i)) L)))) )
  20. (setq b (vla-get-Block (vla-get-ActiveLayout (vla-get-ActiveDocument (vlax-get-acad-object)))))
  21. (vl-some
  22.    (function
  23.      (lambda (x)
  24.        (if
  25.          (and
  26.            (setq o (vla-item b x))
  27.            (vlax-property-available-p o 'EffectiveName)
  28.            (= n (vla-get-EffectiveName o))
  29.          )
  30.        o
  31.        )
  32.      )
  33.    )
  34.    (i->L (vla-get-Count b))
  35. ); vl-some
  36. ); defun FirstBlkOccurrence

 
用法示例-(其中块名区分大小写):
  1. (GetBlkAttVals "MyBlockName")
回复

使用道具 举报

3

主题

9

帖子

6

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-5 17:31:41 | 显示全部楼层
 
我的街区是静态的。我插入了我的区块名称,如下所示:
 
(if(setq s(ssget“_X”'((0。“INSERT”)(66.1)(2。“FCA\u TB”)));;将MyBlock名称更改为您的块名称
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 17:45:39 | 显示全部楼层
在我上面发布的代码中没有什么特别的地方,所以如果你能上传一个示例图,那么仔细检查一下就好了。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 13:52 , Processed in 0.438896 second(s), 66 queries .

© 2020-2025 乐筑天下

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