乐筑天下

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

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

[复制链接]

3

主题

16

帖子

1

银币

初来乍到

Rank: 1

铜币
28
发表于 2016-1-28 20:29:00 | 显示全部楼层 |阅读模式
以下是借用坛里大神的代码,在此感谢;
我想删除很多同名块中的指定颜色和指定文字,请大神高抬贵手;
  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
回复

使用道具 举报

85

主题

1175

帖子

11

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1518
发表于 2016-1-29 08:56:00 | 显示全部楼层
代码是删除块中所有文字吧?如果要删除指定颜色和内容的文字,在sube.delete前加一个判断,满足就删除。
回复

使用道具 举报

3

主题

16

帖子

1

银币

初来乍到

Rank: 1

铜币
28
发表于 2016-1-29 09:48:00 | 显示全部楼层

对的,代码是删文字的,;
原理捋顺了,删之前是判断sube吗?这个时候sube应该赋予什么属性?请指点
回复

使用道具 举报

85

主题

1175

帖子

11

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1518
发表于 2016-1-29 10:05:00 | 显示全部楼层
Sube.ObjectName = "AcDbText"
这里确定了sube是个text,源代码后面直接就删除了Sube.Delete。你要加条件的话,就再加个判断,比如if sube.color=1 or sube.text="aa" then sube.delete
回复

使用道具 举报

3

主题

16

帖子

1

银币

初来乍到

Rank: 1

铜币
28
发表于 2016-1-29 10:26:00 | 显示全部楼层
  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"    应该是这段没将判断纳入选择集吧?
回复

使用道具 举报

85

主题

1175

帖子

11

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1518
发表于 2016-1-29 10:46:00 | 显示全部楼层
如果没记错的话,ThisDrawing.Blocks(Sube.Name)返回的是“源”块,也就是你输入i能选择的本文件存在的块,跟是不是插入毫无关系。
要修改插入的块,得遍历所有的块元素,然后再做。
你试下插入新块,看是不是符合内容的text已经被删除了?
回复

使用道具 举报

3

主题

16

帖子

1

银币

初来乍到

Rank: 1

铜币
28
发表于 2016-1-29 11:21:00 | 显示全部楼层

按理说ElseIf Sube.ObjectName = "AcDbText" Then  已经判断为文字了,为什么接着判断就不对了?
这个就有点迷糊了,还请能小敲一段
回复

使用道具 举报

85

主题

1175

帖子

11

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1518
发表于 2016-1-29 11:31:00 | 显示全部楼层
前面ThisDrawing.Blocks(Sube.Name)返回的是“源”块,所以改的也是“源”块的内容,图纸上任何东西都没改,当然看不出任何变化。说了你插入下新块看看。
回复

使用道具 举报

3

主题

16

帖子

1

银币

初来乍到

Rank: 1

铜币
28
发表于 2016-1-29 12:50:00 | 显示全部楼层

这个有点不会了,4,5年没碰,忘了不少,希望您能帮个忙
回复

使用道具 举报

85

主题

1175

帖子

11

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1518
发表于 2016-1-29 13:17:00 | 显示全部楼层

做个过滤器,遍历所有的块,然后在这个集合中的块元素去做上面那些事。不要用ThisDrawing.Blocks(Sube.Name)。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-4-20 01:01 , Processed in 0.932282 second(s), 73 queries .

© 2020-2025 乐筑天下

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