乐筑天下

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

[编程交流] Lisp程序生成所有块

[复制链接]

3

主题

19

帖子

16

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-5 16:44:44 | 显示全部楼层 |阅读模式
我正在寻找一个autocad lisp程序,该程序可以将所有块和嵌套块放入文件中,并将插入放在图层0上,但将数据留在块中。
回复

使用道具 举报

17

主题

1274

帖子

25

银币

后起之秀

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

铜币
260
发表于 2022-7-5 16:51:21 | 显示全部楼层
您是在谈论所有块定义中的所有对象,但将属性保留在其所在的位置吗?颜色、线型、打印样式等呢?
 
你想要完成什么?
回复

使用道具 举报

3

主题

19

帖子

16

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-5 16:58:53 | 显示全部楼层
我有一些数据块,其中数据位于第1层、第2层和第3层,但当他们定义块时,他们使用第1层作为当前层。因此,如果我列出块,则属性表示第1层。我需要的是定义的层是0层,以及1、2和3层上的数据。现在,如果我列出块,属性表示层0,但块内的数据仍在层1、2和3上。
回复

使用道具 举报

17

主题

1274

帖子

25

银币

后起之秀

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

铜币
260
发表于 2022-7-5 17:02:57 | 显示全部楼层
请确定您指的是块定义还是块插入?
 
看看Lee Mac的Apply to Block Objects的示例函数调用-http://lee-mac.com/applytoblockobjects.html
回复

使用道具 举报

3

主题

19

帖子

16

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-5 17:11:13 | 显示全部楼层
块插入
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 17:15:47 | 显示全部楼层
请尝试以下操作:
  1. (defun c:doit nil
  2.    (vlax-for blk (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
  3.        (if (= :vlax-false (vla-get-isxref blk))
  4.            (vlax-for obj blk
  5.                (if (and (= "AcDbBlockReference" (vla-get-objectname obj)) (vlax-write-enabled-p obj))
  6.                    (vla-put-layer obj "0")
  7.                )
  8.            )
  9.        )
  10.    )
  11.    (princ)
  12. )
  13. (vl-load-com) (princ)

 
排除锁定图层上的对象。
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 17:20:36 | 显示全部楼层
李,使用vlax-write-enabled-p的原因是什么?
何时/哪些autocad图形对象无法修改?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 17:23:44 | 显示全部楼层
 
锁定层上的对象将不会启用写。
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 17:28:32 | 显示全部楼层
 
哦,好的,谢谢!
我不知道这件事,否则我会使用:
  1. (eq (vla-get-Lock (vla-get-Layer obj)) :vlax-false)

或“锤击”方法:
  1. (vl-catch-all-apply 'vla-put-layer (list obj "0"))

 
从来没有想过我必须使用vlax-read-enabled-p和vlax-write-enabled-p。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 17:38:36 | 显示全部楼层
 
这将不起作用,因为vla get layer将返回字符串-您需要使用vla项从Layers集合中检索layer对象。
 
 
我尽量避免在可能的情况下使用vl catch all apply-在我看来,这类似于在VBA中使用On Error Resume Next,它会滋生懒惰的编程:您还可以将整个函数包含在vl catch all apply语句中,而不必关心评估期间发生的车祸。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 14:17 , Processed in 0.837344 second(s), 72 queries .

© 2020-2025 乐筑天下

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