明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 6959|回复: 12

如何删除图块对象

  [复制链接]
发表于 2007-8-12 22:41:00 | 显示全部楼层 |阅读模式
假设dwg文件中有很多的图块对象, 图块的名称是" 椅子",请问如何用vba将其全部删除,谢谢!
发表于 2007-8-13 07:58:00 | 显示全部楼层
先删除块参考,再删除块定义。
 楼主| 发表于 2007-8-13 12:49:00 | 显示全部楼层
请具体点好吗,我会删除块对象,但不知如何删除块参照,请作个示例好吗
发表于 2007-8-13 17:18:00 | 显示全部楼层

删除块对象后,块参照对象难道还存在于modelspace中吗?

先在modelspace里面选择,用select acselectionall,,, filtertype ,filterdata

其中filtertype=2       filterdata=blockname

for each entity in sset

entity.delete

next

请高手指正

发表于 2007-8-13 21:31:00 | 显示全部楼层

Sub DeleteBlock()
    Dim ObjBlockRef As AcadBlockReference
    Dim FilterType(0) As Integer, FilterData(0) As Variant
    Dim sset As AcadSelectionSet
   
    '选中名为"椅子"的块参照并删除
    Set sset = ThisDrawing.SelectionSets.Add("test")
    FilterType(0) = 2
    FilterData(0) = "椅子"
    sset.Select acSelectionSetAll, , , FilterType, FilterData
    For Each ObjBlockRef In sset
        ObjBlockRef.Delete
    Next
    sset.Delete
   
    '删除块定义
    ThisDrawing.Blocks.Item("椅子").Delete
End Sub

 楼主| 发表于 2007-8-14 17:34:00 | 显示全部楼层

不对啊,始终是选择了所有对象啊,没起到过滤的作用啊朋友们

Sub DeleteBlock()
    Dim ObjBlockRef As AcadBlockReference
    Dim FilterType(0) As Integer, FilterData(0) As Variant
    Dim sset As AcadSelectionSet
   
    '选中名为"椅子"的块参照并删除
    Set sset = ThisDrawing.SelectionSets.Add("test")
    FilterType(0) = 2
    FilterData(0) = "椅子"
    sset.Select acSelectionSetAll, , , FilterType, FilterData
    For Each ObjBlockRef In sset
        ObjBlockRef.Delete
    Next
    sset.Delete
   
    '删除块定义
    ThisDrawing.Blocks.Item("椅子").Delete
End Sub

不对啊,始终是选择了所有对象啊,没起到过滤的作用啊朋友们

发表于 2007-8-14 18:23:00 | 显示全部楼层

在我的机器上试验过,只删除了名为“椅子”的块参照及块定义。

你可以调试一下,检查 sset.Select acSelectionSetAll, , , FilterType, FilterData 执行之后sset中有哪些图元。

实在不行,把过滤器搞复杂一些,多设几个条件,比如增加图层之类。

没有图形文件,我也没有办法帮你更多的忙。

 楼主| 发表于 2007-8-14 22:46:00 | 显示全部楼层

呵呵,是我错了,其实楼上朋友的代码是完全正确的,我刚复制到acad中去运行了的;只是我不会vba,其实我正在用vc自动化autocad! 选择集的过滤vba代码是sset.Select acSelectionSetAll, , , FilterType, FilterData   翻译成vc就是sel->Select(acSelectionSetAll,fitertype,fiterdata);同样的函数,同样的参数,vba的完全成功,vc的这句就只能全部选择对象而没得到过滤效果;我已经试过无数次了都是这样,好晕啊!哪位朋友能帮我啊?!

发表于 2008-4-17 17:55:00 | 显示全部楼层
高手们:使用了剪贴板板粘贴块后,指定的块定义删除不了,有没有解决办法?
发表于 2008-4-18 10:02:00 | 显示全部楼层

遍历空间所有图形

IF图形是块对象

  IF块对象的名字是"椅子"

     删除块对象

  END IF

END IF

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 18:35 , Processed in 0.183557 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表