乐筑天下

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

[编程交流] 从特定a中提取值

[复制链接]

2

主题

5

帖子

3

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 06:16:39 | 显示全部楼层 |阅读模式
我刚开始使用AutoLISP,一直在努力自学它的工作原理。通过查看示例,我能够确定发生了什么。然而,我很难更新公司使用的现有LISP例程。创造者最近离开了。我不知道要更改什么,具体在哪里更改,或者如何更改/添加任何内容。
 
这是我的情况。我们当前的LISP例程要求用户选择他们想要包括的标准块。选定的每个块中始终嵌入相同的4个属性标记(值更改)。其中三个属性(“族”、“描述”和“PN”)设置为常数,第四个属性(“SEC_NO”)可以由用户定义。LIPS例程获取这些值并创建一个表,其中标题为“SECTION NO”、“FAMILY”、“DESCRIPTION”和“PN”。这非常有效。
 
然而,我正在改变块的创建方式,以便更容易地创建和管理它们(将它们转换为动态块)。通过这样做,我在新块中创建了额外的属性。这些额外的属性破坏了我们当前的LISP例程。我想修改这个例程,以便它创建一个从上面列出的相同4个属性(“SEC_NO”、“FAMILY”、“DESCRIPTION”和“PN”)中提取的属性值列表,并忽略其余属性。属性的标记名将始终保持不变。
 
下面是创建表所用列表的例程部分。任何帮助都将不胜感激。如果有更简单的方法,我洗耳恭听。
 
-标记
 
  1. (defun get-all-atts (obj / atts
  2. att_list const_atts const_list ent)
  3. (and
  4. (if (and obj
  5.      (vlax-property-available-p
  6. obj 'Hasattributes)
  7.      (eq :vlax-true
  8. (vla-get-hasattributes obj))
  9. )
  10. (progn
  11. (if
  12.   (not
  13. (vl-catch-all-error-p
  14. (vl-catch-all-apply
  15. (function
  16.    (lambda
  17. ()
  18.      (setq atts (vlax-invoke obj
  19. 'Getattributes))
  20. )
  21. )
  22. )
  23.     )
  24. )
  25. (setq
  26.    (progn
  27.      (foreach
  28. att atts
  29.        (setq
  30. att_list
  31.        (cons (cons
  32. (vla-get-tagstring att)
  33.      (vla-get-textstring
  34. att)
  35. )
  36. att_list
  37. )
  38. )
  39.      )
  40. )
  41. )
  42. (if
  43.   (not
  44. (vl-catch-all-error-p
  45. (vl-catch-all-apply
  46. (function
  47.    (lambda
  48. ()
  49.      (setq
  50. const_atts
  51. (vlax-invoke
  52. obj
  53. 'Getconstantattributes
  54. )
  55.      )
  56. )
  57. )
  58. )
  59.     )
  60.   )
  61. (progn
  62.      (foreach att
  63. const_atts
  64.        (setq
  65. const_list
  66.        (cons (cons
  67. (vla-get-tagstring att)
  68.      (vla-get-textstring
  69. att)
  70. )
  71. const_list
  72. )
  73. )
  74.      )
  75.      (setq
  76. att_list (append const_list att_list))
  77. )
  78. )
  79.      )
  80. )
  81. )
  82. (reverse att_list)
  83. )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 06:36:24 | 显示全部楼层
你好,马克,
 
替换以下代码:
  1. (defun get-all-atts ( obj / lst tag )
  2.    (if (and obj (vlax-property-available-p obj 'hasattributes) (= :vlax-true (vla-get-hasattributes obj)))
  3.        (foreach att (append (vlax-invoke obj 'getattributes) (vlax-invoke obj 'getconstantattributes))
  4.            (if (member (strcase (setq tag (vla-get-tagstring att))) '("FAMILY" "DESCRIPTION" "PN" "SEC_NO"))
  5.                (setq lst (cons (cons tag (vla-get-textstring att)) lst))
  6.            )
  7.        )
  8.    )
  9.    (reverse lst)
  10. )

 
您可能还会发现我的属性函数库很有用。
 
欢迎来到CADTutor
回复

使用道具 举报

107

主题

615

帖子

575

银币

中流砥柱

Rank: 25

铜币
521
发表于 2022-7-6 07:00:39 | 显示全部楼层
为什么不使用EATTEXT
回复

使用道具 举报

2

主题

5

帖子

3

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 07:10:21 | 显示全部楼层
prodromosm,
我曾经考虑过EATTEXT,但不想使用属性提取,以使我们的过程尽可能简单,便于设计师使用。我正在努力减少点击次数,使其成为傻瓜。谢谢你的回复。
 
 
李·麦克,
你的代码运行得很好。我有一种感觉,它本可以写得更干净、更简单。此外,我上周也去过你的“属性函数”页面寻求帮助。然而,由于我是LISP新手,我很难决定使用什么以及需要添加/更改什么才能使其适用于我的应用程序。我更熟悉Excel中的VBA。
 
谢谢你的帮助。我真的很感激!
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:19:40 | 显示全部楼层
非常欢迎-如果您不确定如何从程序中调用我的属性函数,请询问。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 18:48 , Processed in 0.702873 second(s), 62 queries .

© 2020-2025 乐筑天下

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