乐筑天下

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

[编程交流] 将图形中的所有块设置为

[复制链接]

25

主题

62

帖子

37

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
125
发表于 2022-7-5 16:58:57 | 显示全部楼层 |阅读模式
在此之前,我已经编写了使用ssget和chprop更改具有大量对象的图形的例程,但我不确定是否可以使用相同的样式将图形中的所有块设置为无法转换。
 
有没有办法用AutoLISP编写一个简单的脚本,将图形中的所有块的“allow exploding”设置为no?任何信息引导我在正确的方向将不胜感激,谢谢!
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 17:15:20 | 显示全部楼层
  1. (defun C:test ( / )
  2. (vlax-for b (vla-get-Blocks (vla-get-ActiveDocument (vlax-get-acad-object)))
  3.         (and
  4.                 (eq (vla-get-IsLayout b) :vlax-false)
  5.                 (vl-catch-all-apply 'vla-put-Explodable (list b :vlax-false))
  6.         )
  7. )
  8. (princ)
  9. ) (vl-load-com) (princ)
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 17:21:49 | 显示全部楼层
我还将排除外部参照,即:
  1. (defun c:unexplodeall ( )
  2.    (vlax-for blk (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
  3.        (if (and (= :vlax-false (vla-get-islayout blk))
  4.                 (= :vlax-false (vla-get-isxref   blk))
  5.            )
  6.            (vla-put-explodable blk :vlax-false)
  7.        )
  8.    )
  9.    (princ)
  10. )
  11. (vl-load-com) (princ)

 
@Grrr,我不认为vl catch all在这个操作中适用吗?
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 17:27:19 | 显示全部楼层
我把它包括在“以防万一”中,没有具体原因。
 
与此线程相关的一些有趣问题:
-我不明白为什么“布局块”也有“可爆炸”的属性,怎么可能爆炸模型/图纸空间?!
-另外,我很好奇如何用vanilla lisp实现它,所以我查看了“BLOCK”(dxf)参考,希望在GC 70下找到可分解的标志,但没有关于它的文档。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 17:35:12 | 显示全部楼层
 
好的,但这是一个滑坡-继续这种错误捕获和逻辑的形式,您还可以将整个程序封装在一个vl-catch-all-apply表达式中:代码永远不会明显返回错误,当它出错时,任何事情都不会得到适当的处理。
 
 
因为它们与块和外部参照来自同一个类,因此都具有相同的特性。
 
 
例子:
  1. (defun getexplodable ( blk / ent )
  2.    (if (setq ent (tblobjname "block" blk))
  3.        (cdr (assoc 280 (entget (cdr (assoc 330 (entget ent))))))
  4.    )
  5. )
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 17:44:21 | 显示全部楼层
我以前读过这篇文章,但我认为这不应该成为这个特殊案例(常规)的问题。
顺便说一句,我认为在某些情况下,手动提示可能有用:
  1. (if (vl-catch-all-error-p (setq err (vl-catch-all-apply ...)))
  2. (setq errLst (cons err errLst))
  3. )
  4. (and errLst
  5. (print "The following errors occured: ")
  6. (foreach x errLst (print (vl-catch-all-error-message x)))
  7. )

 
 
非常感谢!
我刚刚读过GC 330,它写着它的“软指针句柄”-这是该实体的某种类型的字典吗?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 17:56:03 | 显示全部楼层
 
DXF组330的值通常是指向父实体的指针-在这种情况下,是块实体的BLOCK\u记录父实体。
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 18:00:32 | 显示全部楼层
 
谢谢李!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 07:53 , Processed in 0.605402 second(s), 68 queries .

© 2020-2025 乐筑天下

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