乐筑天下

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

[编程交流] lisp帮助

[复制链接]

27

主题

113

帖子

90

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
132
发表于 2022-7-5 17:22:57 | 显示全部楼层
那我甚至不知道这是否可能。。。你可能需要一些。net编程技巧,如果可能的话。
回复

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 17:27:15 | 显示全部楼层
如前所述:
如果它实际上是一个属性,那么通过Lisp更改它(绕过LDT命令)应该没有问题。
回复

使用道具 举报

5

主题

28

帖子

23

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-5 17:31:06 | 显示全部楼层
亲爱的罗伊,你能给我一张嘴唇吗
 
 
 
回复

使用道具 举报

27

主题

113

帖子

90

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
132
发表于 2022-7-5 17:33:18 | 显示全部楼层
如果你想学习一些东西,你可能需要阅读本页:http://lee-mac.com/attributefunctions.html#vlsetattributevalue
 
我很想帮忙,但我现在没有时间。
回复

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 17:37:59 | 显示全部楼层
@hidxb123:更改c:测试功能以适合您的特定情况:
  1. (defun KGA_Conv_Collection_To_List (coll / ret)
  2. (reverse
  3.    (vlax-for a coll
  4.      (setq ret (cons a ret))
  5.    )
  6. )
  7. )
  8. ; (UpdateAttribValue "Layout1" "MyBlock" "MYTAG" "New Text" nil)
  9. (defun UpdateAttribValue (lyt blk tag str allP / lyt)
  10. (setq lyt (strcase lyt))
  11. (setq blk (strcase blk))
  12. (setq tag (strcase tag))
  13. (if
  14.    (or
  15.      (= "MODEL" lyt)
  16.      (vl-position lyt (mapcar 'strcase (layoutlist)))
  17.    )
  18.    ((if allP mapcar vl-some)
  19.      '(lambda (obj)
  20.        (if
  21.          (and
  22.            (= "AcDbBlockReference" (vla-get-objectname obj))
  23.            (=
  24.              blk
  25.              (strcase
  26.                ((if (vlax-property-available-p obj 'effectivename) vla-get-effectivename vla-get-name)
  27.                  obj
  28.                )
  29.              )
  30.            )
  31.            (= :vlax-true (vla-get-hasattributes obj))
  32.          )
  33.          (vl-some
  34.            '(lambda (att)
  35.              (if (= tag (strcase (vla-get-tagstring att)))
  36.                (progn
  37.                  (vla-put-textstring att str)
  38.                  T
  39.                )
  40.              )
  41.            )
  42.            (vlax-invoke obj 'getattributes)
  43.          )
  44.        )
  45.      )
  46.      (KGA_Conv_Collection_To_List
  47.        (vla-get-block
  48.          (vla-item (vla-get-layouts (vla-get-activedocument (vlax-get-acad-object))) lyt)
  49.        )
  50.      )
  51.    )
  52. )
  53. )
  54. (defun c:Test ( / doc)
  55. (setq doc (vla-get-activedocument (vlax-get-acad-object)))
  56. (vla-endundomark doc)
  57. (vla-startundomark doc)
  58. (if (UpdateAttribValue "Layout1" "MyBlock" "MYTAG" "New Text" nil)
  59.    (princ "\nAttibute updated ")
  60.    (princ "\nAttibute NOT updated ")
  61. )
  62. (vla-endundomark doc)
  63. (princ)
  64. )
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 17:39:13 | 显示全部楼层
罗伊,你可以减少这个:
  1. (and
  2. (= "AcDbBlockReference" (vla-get-objectname obj))
  3. (=
  4.    blk
  5.    (strcase
  6.      ((if (vlax-property-available-p obj 'effectivename) vla-get-effectivename vla-get-name)
  7.        obj
  8.      )
  9.    )
  10. )
  11. (= :vlax-true (vla-get-hasattributes obj))
  12. )

收件人:
  1. (vl-every '(lambda (a b) (eq a b))
  2. (list (vla-get-objectname obj) (strcase (vla-get-effectivename obj)) (vla-get-hasattributes obj))
  3. (list "AcDbBlockReference" blk :vlax-true)
  4. )

 
请注意,当您有此功能时:
  1. (= "AcDbBlockReference" (vla-get-objectname obj))

该检查是多余的:
  1. ((if (vlax-property-available-p obj 'effectivename) vla-get-effectivename vla-get-name)
  2. obj
  3. )

因为“AcDbBlockReference”总是有一个effectivename属性(假设检查用于“AcDbBlockReference”或“AcDbBlockDefinition”objectname)。
回复

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 17:42:29 | 显示全部楼层
@Grrr:
我个人不喜欢你的“减少”建议。在我看来,这是一个“complification”的案例。更少的线:也许。但是它会执行得更快还是更容易阅读:不!
 
在较旧的AutoCAD版本中,effectivename特性不存在。考虑到这一点,你提到的冗余并不存在。
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 17:45:44 | 显示全部楼层
 
现在我明白了(对于旧版本,我没有意识到这一点)。
顺便说一句,为什么不改变这一点:
  1. (if (= tag (strcase (vla-get-tagstring att)))
  2. (progn
  3.    (vla-put-textstring att str)
  4.    T
  5. )
  6. )

收件人:
  1. (if (= tag (strcase (vla-get-tagstring att)))
  2. (vla-put-textstring att str)
  3. )

(尽量不要听起来挑剔)
回复

使用道具 举报

5

主题

28

帖子

23

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-5 17:49:00 | 显示全部楼层
谢谢Girr&Roy
 
 
 
回复

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 17:51:10 | 显示全部楼层
@Grrr:请挑剔。我更喜欢它。
 
关于您之前的“减少”建议(vl every):
如果你测试这个建议,你会发现如果obj不是块参考,它就会出错。
 
关于您的最新建议:
为了停止vl某个函数(如果allP=nil),我需要一个非nil返回值。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-8-24 20:58 , Processed in 0.359366 second(s), 72 queries .

© 2020-2025 乐筑天下

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