乐筑天下

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

[编程交流] 分解所有动态块exc

[复制链接]

73

主题

261

帖子

195

银币

后起之秀

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

铜币
375
发表于 2022-7-5 15:52:52 | 显示全部楼层 |阅读模式
我制作了一个lisp例程来分解除“DOORMODEL1,DOORMODEL2”之外的所有动态块。但它不起作用,问题是什么?选择?有人能帮我吗?
 
  1. (defun c:test ()
  2. (sssetfirst
  3. nil
  4. (ssget
  5.   '(
  6.    ( 0 . "INSERT")
  7.    (-4 . "<AND")
  8.    (-4 . "<NOT")
  9.    (2 . "`*U* , DOORMODEL1,DOORMODEL2")
  10.    (-4 . "NOT>")
  11.    (-4 . "AND>")
  12.    )
  13.         )
  14.    )
  15. (command "qaflags" "1")
  16. (COMMAND "EXPLODE" "P" "")
  17. (command "qaflags" "0")
  18. )

 
提前感谢
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 16:05:24 | 显示全部楼层
动态块可能会获得与“`U*”匹配的匿名名称,因此不能仅依赖ssget过滤器。
但是,这不适用于块参照的vla对象的“EffectiveName”特性。
因此,答案是迭代选择集,将每个ename转换为vla对象,检查其有效名称
并相应地决定何时使用“Explode and”Delete方法或保持原样。
回复

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 16:13:36 | 显示全部楼层
gc 2 wcmatch字符串包含其他空格。它正在寻找名为“*U123”(尾随空格)和“DOORMODEL1”(前导空格)的块,它们不存在。当然,代码也相当危险。如果用户没有选择任何内容,会发生什么?
回复

使用道具 举报

73

主题

261

帖子

195

银币

后起之秀

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

铜币
375
发表于 2022-7-5 16:20:02 | 显示全部楼层
感谢Grrr和Roy_43的回复。所以这并不像我想的那么简单。然而,我对lisp的了解并没有超出我的lisp。甚至我也从其他lisp例程编译。事实上,我的例行程序要求进行选择,但我希望例行程序能够做到这一点。
我应该做什么改变才能让它工作?
 
PmxCAD
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 16:29:05 | 显示全部楼层
举个例子:
 
  1. [b][color=BLACK]([/color][/b]defun C:test [b][color=FUCHSIA]([/color][/b] / L SS e o nm [b][color=FUCHSIA])[/color][/b]                           [color=#8b4513];; Define a function and localise the used variables[/color]
  2. [b][color=FUCHSIA]([/color][/b]setq L [b][color=NAVY]([/color][/b]mapcar 'strcase '[b][color=MAROON]([/color][/b][color=#2f4f4f]"DoorModel"[/color] [color=#2f4f4f]"DoorModel"[/color][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]   [color=#8b4513];; Initially set a list of block names, capitalise all items using [b][color=FUCHSIA]([/color][/b]strcase[b][color=FUCHSIA])[/color][/b][/color]
  3. [b][color=FUCHSIA]([/color][/b]if [b][color=NAVY]([/color][/b]setq SS [b][color=MAROON]([/color][/b]ssget '[b][color=GREEN]([/color][/b][b][color=BLUE]([/color][/b]0 . [color=#2f4f4f]"INSERT"[/color][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]                 [color=#8b4513];; Prompt the user for a selection set of blocks and check if user selected any[/color]
  4.    [b][color=NAVY]([/color][/b]repeat [b][color=MAROON]([/color][/b]sslength SS[b][color=MAROON])[/color][/b]                                 [color=#8b4513];; iterate through the selection set[/color]
  5.      [b][color=MAROON]([/color][/b]setq e [b][color=GREEN]([/color][/b]ssname SS 0[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]                              [color=#8b4513];; first entity inside the selection set[/color]
  6.      [b][color=MAROON]([/color][/b]setq o [b][color=GREEN]([/color][/b]vlax-ename->vla-object e[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]                 [color=#8b4513];; convert that entity into a vla-object[/color]
  7.      [b][color=MAROON]([/color][/b]setq nm [b][color=GREEN]([/color][/b]strcase [b][color=BLUE]([/color][/b]vla-get-EffectiveName o[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]       [color=#8b4513];; extract the EffectiveName property from the vla-object [b][color=MAROON]([/color][/b]the [color=#2f4f4f]"True Block Name"[/color] if you prefer[b][color=MAROON])[/color][/b][/color]
  8.      [b][color=MAROON]([/color][/b]if [b][color=GREEN]([/color][/b]not [b][color=BLUE]([/color][/b]member nm L[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]                             [color=#8b4513];; check if the EffectiveName is not [color=#2f4f4f]"DOORMODEL1"[/color] or [color=#2f4f4f]"DOORMODEL2"[/color][/color]
  9.        [b][color=GREEN]([/color][/b]progn                                            [color=#8b4513];; if the EffectiveName is not member of that list [/color]
  10.          [b][color=BLUE]([/color][/b]vla-Explode o[b][color=BLUE])[/color][/b]                                 [color=#8b4513];; call the Explode method [b][color=BLUE]([/color][/b]literaly explode the block[b][color=BLUE])[/color][/b][/color]
  11.          [b][color=BLUE]([/color][/b]vla-Delete o[b][color=BLUE])[/color][/b]                                  [color=#8b4513];; call the Delete method [b][color=BLUE]([/color][/b]erase the original block[b][color=BLUE])[/color][/b][/color]
  12.        [b][color=GREEN])[/color][/b][color=#8b4513]; progn[/color]
  13.      [b][color=MAROON])[/color][/b][color=#8b4513]; if[/color]
  14.      [b][color=MAROON]([/color][/b]ssdel e SS[b][color=MAROON])[/color][/b]                                        [color=#8b4513];; erase the first entity inside the selection set, so the next entity could be processed[/color]
  15.    [b][color=NAVY])[/color][/b][color=#8b4513]; repeat[/color]
  16. [b][color=FUCHSIA])[/color][/b][color=#8b4513]; if SS[/color]
  17. [b][color=FUCHSIA]([/color][/b]princ[b][color=FUCHSIA])[/color][/b]                                                 [color=#8b4513];; Exit cleanly[/color]
  18. [b][color=BLACK])[/color][/b][color=#8b4513]; defun[/color]
  19. [b][color=BLACK]([/color][/b]vl-load-com[b][color=BLACK])[/color][/b][b][color=BLACK]([/color][/b]princ[b][color=BLACK])[/color][/b]                                      [color=#8b4513];; Load the visual lisp extensions, cleanly[/color]
回复

使用道具 举报

73

主题

261

帖子

195

银币

后起之秀

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

铜币
375
发表于 2022-7-5 16:42:08 | 显示全部楼层
Grrr它适用于动态块,但也可以分解正常的非动态块,我真的不想这样做。
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 16:49:24 | 显示全部楼层
 
要检查块是否为动态块,请执行以下操作:
 
  1. (eq (vla-get-IsDynamicBlock block_vla-object) :vlax-true)
回复

使用道具 举报

73

主题

261

帖子

195

银币

后起之秀

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

铜币
375
发表于 2022-7-5 17:01:07 | 显示全部楼层
好的,但这部分在Lisp程序中放在哪里?
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 20:00 , Processed in 0.691442 second(s), 77 queries .

© 2020-2025 乐筑天下

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