乐筑天下

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

[编程交流] 删除多个dra中的块

[复制链接]

1

主题

2

帖子

1

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 16:07:56 | 显示全部楼层 |阅读模式
嘿,大家好,我是一个新的海报,因为大多数时候我可以找到我需要的只是搜索网站。但是,我找不到任何关于删除多个图形中的块的内容。
 
我有一个特定的块,我想从大约400个图形中删除该块的所有实例。
 
外面有这样的事吗?
 
我知道李已经删除了BLOCKSV1-0。lsp,但我需要的东西,将在一批这样做。我知道它应该能够与ObjectDBXWrapperV1-2一起使用。lsp,但我不知道如何组合。
 
谢谢
史提夫
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 16:14:05 | 显示全部楼层
嗨,史蒂夫,欢迎来到CADTutor 170758x581988m095nlhmg.png
 
 
关于LM:DeleteBlocks函数与ObjectDBXWrapper函数的结合使用,请考虑以下示例:
上述代码将提示用户选择要处理的图形目录,并且在有效选择后,该功能将尝试从所选目录中的每个图形文件中删除Block1、Block2和Block3(当然可以更改以满足您的要求)。
 
当然,在运行上述代码之前,您需要确保我的ObjectDBX包装函数和Delete Blocks程序都已加载。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 16:16:01 | 显示全部楼层
如果需要对处理的图形进行更多控制,也可以使用“获取文件”对话框功能-确保加载此程序、删除块程序和ObjectDBX包装程序,然后尝试以下代码:
  1. (defun c:dbtest ( / lst )
  2.    (if (setq lst (LM:getfiles "Select Drawings to Process" nil "dwg;dws;dwt"))
  3.        (LM:odbx '(lambda ( doc ) (LM:deleteblocks doc '("Block1" "Block2" "Block3"))) lst t)
  4.        (princ "\n*Cancel*")
  5.    )
  6.    (princ)
  7. )
回复

使用道具 举报

1

主题

2

帖子

1

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 16:17:36 | 显示全部楼层
这太棒了谢谢!!!
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 16:23:00 | 显示全部楼层
不客气!
回复

使用道具 举报

48

主题

304

帖子

256

银币

后起之秀

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

铜币
240
发表于 2022-7-5 16:25:18 | 显示全部楼层
 
嗨,李,我测试过了&它成功了,但是如果块是基于外卡的,Lisp程序怎么办?
 
我试过“BLOCK 1”,但不起作用
回复

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 16:27:33 | 显示全部楼层
李的程序对一个程序可以做什么有一些限制。你可以在他的网站上阅读
 
 
http://www.lee-mac.com/odbxbase.html
 
 
提供的函数应采用单个参数(处理的每个图形的VLA文档对象),并遵循ObjectDBX的“规则”,即:
 
[列表]
  • 无选择集(使用ssget、ssname、ssdel等)
  • 无命令调用(命令“_.line”…等)
  • 无ent*方法(entmod、entupd等)
  • 无法访问系统变量(getvar、setvar、vla getvariable、vla setvariable等
    [/列表]
     
    您可以使用wildcharacters搜索多个块,但这将涉及“ssget”,并且当您使用此方法打开图形时,这是不允许的。在这种情况下,请使用easy script pro或编写自己的脚本。您可以在acad中放置自己的特殊块替换例程。lsp,以便每次打开图形(使用脚本)时,都会选择并终止所有这些块。。。
    gr.R。
  • 回复

    使用道具 举报

    114

    主题

    1万

    帖子

    1万

    银币

    中流砥柱

    Rank: 25

    铜币
    543
    发表于 2022-7-5 16:30:23 | 显示全部楼层
     
    尝试加载以下(未测试)代码来代替我的删除块程序:
     
    1. ;;--------------------=={ Delete Blocks }==-------------------;;
    2. ;;                                                            ;;
    3. ;;  Deletes all references of a list of blocks from a drawing ;;
    4. ;;  (including nested references, nested to any level).       ;;
    5. ;;  Proceeds to delete the associated block definitions from  ;;
    6. ;;  the drawing, if possible.                                 ;;
    7. ;;                                                            ;;
    8. ;;  This function is compatible with ObjectDBX.               ;;
    9. ;;------------------------------------------------------------;;
    10. ;;  Author: Lee Mac, Copyright © 2012 - www.lee-mac.com       ;;
    11. ;;------------------------------------------------------------;;
    12. ;;  Arguments:                                                ;;
    13. ;;  doc - VLA Document Object                                 ;;
    14. ;;  lst - List of blocks to be deleted (case insensitive)     ;;
    15. ;;------------------------------------------------------------;;
    16. ;;  Returns:  List of blocks that were successfully deleted.  ;;
    17. ;;------------------------------------------------------------;;
    18. (defun LM:deleteblocks ( doc lst / blc bln lck rtn )
    19.    (setq blc (vla-get-blocks doc)
    20.          lst (mapcar 'strcase lst)
    21.    )
    22.    (vlax-for lay (vla-get-layers doc)
    23.        (if (= :vlax-true (vla-get-lock lay))
    24.            (progn  (setq lck (cons lay lck)) (vla-put-lock lay :vlax-false))
    25.        )
    26.    )
    27.    (vlax-for def blc
    28.        (vlax-for obj def
    29.            (if
    30.                (and (= "AcDbBlockReference" (vla-get-objectname obj))
    31.                    (or
    32.                        (and (vlax-property-available-p obj 'effectivename)
    33.                             (setq bln (strcase (vla-get-effectivename obj)))
    34.                        )
    35.                        (setq bln (strcase (vla-get-name obj)))
    36.                    )
    37.                    (vl-some '(lambda ( x ) (wcmatch bln x)) lst)
    38.                )
    39.                (progn
    40.                    (vl-catch-all-apply 'vla-delete (list obj))
    41.                    (or (member bln rtn)  (setq rtn (cons bln rtn)))
    42.                )
    43.            )
    44.        )
    45.    )
    46.    (foreach lay lck (vla-put-lock lay :vlax-true))
    47.    (vl-remove-if '(lambda ( x ) (vl-catch-all-error-p (vl-catch-all-apply 'vla-delete (list (vla-item blc x))))) rtn)
    48. )

     
    我会在适当的时候更新我网站上的程序。
    回复

    使用道具 举报

    rlx

    21

    主题

    1505

    帖子

    1551

    银币

    初露锋芒

    Rank: 3Rank: 3Rank: 3

    铜币
    81
    发表于 2022-7-5 16:33:26 | 显示全部楼层
    这也许管用,布莱尔詹特·李,就像往常一样
     
     
    gr.R。
    回复

    使用道具 举报

    114

    主题

    1万

    帖子

    1万

    银币

    中流砥柱

    Rank: 25

    铜币
    543
    发表于 2022-7-5 16:36:29 | 显示全部楼层
    ........
    回复

    使用道具 举报

    发表回复

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

    本版积分规则

    • 微信公众平台

    • 扫描访问手机版

    • 点击图片下载手机App

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

    GMT+8, 2025-3-13 20:19 , Processed in 1.050007 second(s), 74 queries .

    © 2020-2025 乐筑天下

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