明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1931|回复: 15

删除很多同名块中的指定颜色和指定文字

[复制链接]
发表于 2016-1-28 20:29:24 | 显示全部楼层 |阅读模式
以下是借用坛里大神的代码,在此感谢;

我想删除很多同名块中的指定颜色和指定文字,请大神高抬贵手;
  1. Sub Example_Select()
  2.     On Error Resume Next
  3.     Dim ssetObj As AcadSelectionSet
  4.     Set ssetObj = ThisDrawing.SelectionSets.Add("sset")
  5.     If Err Then
  6.         Err.Clear
  7.    
  8.         Set ssetObj = ThisDrawing.SelectionSets.Item("sset")
  9.     End If
  10.     ssetObj.Clear
  11.    
  12.     Dim mode As Integer
  13.     Dim gpCode(0) As Integer
  14.     Dim dataValue(0) As Variant
  15.    
  16.     gpCode(0) = 0
  17.     dataValue(0) = "insert"
  18.    
  19.     Dim groupCode As Variant, dataCode As Variant
  20.     groupCode = gpCode
  21.     dataCode = dataValue
  22.    
  23.     ssetObj.Select acSelectionSetAll, , , groupCode, dataCode
  24.     Dim i As Integer
  25.     Dim blkobj As AcadBlock, blkn As String
  26.     For i = 0 To ssetObj.Count - 1
  27.       Set blkobj = ThisDrawing.Blocks(ssetObj.Item(i).Name)

  28.       Ltoc blkobj
  29.     Next
  30.     ThisDrawing.Regen acActiveViewport
  31. End Sub


  32. Sub Ltoc(blk As AcadBlock)
  33. Dim Sube As AcadEntity
  34. For Each Sube In blk
  35.     Dim tekla As AcadText
  36.    
  37.     If Sube.ObjectName = "AcDbBlockReference" Then
  38.        Ltoc ThisDrawing.Blocks(Sube.Name)
  39.     ElseIf Sube.ObjectName = "AcDbText" Then
  40.         Sube.Delete
  41.     End If
  42. Next

  43. End Sub
发表于 2016-1-29 08:56:46 | 显示全部楼层
代码是删除块中所有文字吧?如果要删除指定颜色和内容的文字,在sube.delete前加一个判断,满足就删除。
 楼主| 发表于 2016-1-29 09:48:03 | 显示全部楼层
mikewolf2k 发表于 2016-1-29 08:56
代码是删除块中所有文字吧?如果要删除指定颜色和内容的文字,在sube.delete前加一个判断,满足就删除。

对的,代码是删文字的,;

原理捋顺了,删之前是判断sube吗?这个时候sube应该赋予什么属性?请指点
发表于 2016-1-29 10:05:48 | 显示全部楼层
Sube.ObjectName = "AcDbText"
这里确定了sube是个text,源代码后面直接就删除了Sube.Delete。你要加条件的话,就再加个判断,比如if sube.color=1 or sube.text="aa" then sube.delete
 楼主| 发表于 2016-1-29 10:26:39 | 显示全部楼层
mikewolf2k 发表于 2016-1-29 10:05
Sube.ObjectName = "AcDbText"
这里确定了sube是个text,源代码后面直接就删除了Sube.Delete。你要加条件的 ...
  1. Sub Ltoc(blk As AcadBlock)
  2. Dim Sube As AcadEntity
  3. For Each Sube In blk
  4.     If Sube.ObjectName = "AcDbBlockReference" Then
  5.        Ltoc ThisDrawing.Blocks(Sube.Name)
  6.     ElseIf Sube.ObjectName = "AcDbText" Then
  7.             If Sube.Color = 5 Or Sube.text = "Tekla structures" Then
  8.                Sube.Delete
  9.             End If
  10.     End If
  11. Next

  12. End Sub
这样增加判断后,任何内容都没删掉,  If Sube.Color = 5 Or Sube.text = "Tekla structures"    应该是这段没将判断纳入选择集吧?
发表于 2016-1-29 10:46:47 | 显示全部楼层
如果没记错的话,ThisDrawing.Blocks(Sube.Name)返回的是“源”块,也就是你输入i能选择的本文件存在的块,跟是不是插入毫无关系。
要修改插入的块,得遍历所有的块元素,然后再做。
你试下插入新块,看是不是符合内容的text已经被删除了?
 楼主| 发表于 2016-1-29 11:21:50 | 显示全部楼层
mikewolf2k 发表于 2016-1-29 10:46
如果没记错的话,ThisDrawing.Blocks(Sube.Name)返回的是“源”块,也就是你输入i能选择的本文件存在的块, ...

按理说ElseIf Sube.ObjectName = "AcDbText" Then  已经判断为文字了,为什么接着判断就不对了?
这个就有点迷糊了,还请能小敲一段
发表于 2016-1-29 11:31:42 | 显示全部楼层
前面ThisDrawing.Blocks(Sube.Name)返回的是“源”块,所以改的也是“源”块的内容,图纸上任何东西都没改,当然看不出任何变化。说了你插入下新块看看。
 楼主| 发表于 2016-1-29 12:50:42 | 显示全部楼层
mikewolf2k 发表于 2016-1-29 11:31
前面ThisDrawing.Blocks(Sube.Name)返回的是“源”块,所以改的也是“源”块的内容,图纸上任何东西都没改, ...

这个有点不会了,4,5年没碰,忘了不少,希望您能帮个忙
发表于 2016-1-29 13:17:15 | 显示全部楼层
yucc 发表于 2016-1-29 12:50
这个有点不会了,4,5年没碰,忘了不少,希望您能帮个忙

做个过滤器,遍历所有的块,然后在这个集合中的块元素去做上面那些事。不要用ThisDrawing.Blocks(Sube.Name)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 10:06 , Processed in 0.163101 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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