明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2813|回复: 9

关于选择集,请教高手啊

  [复制链接]
发表于 2013-6-15 13:04:44 | 显示全部楼层 |阅读模式
我在写选择集的时候,用了过滤,就是过滤图块的名称,比如图块名叫SS11,那么我就选择类型用2,但是由于我制作的那个图块用了动态块,因此我发现很容易那些块就变成了匿名块,就是带*u的块,这样我采用块名称来建立选择集就失效了,我除了采用0和insert似乎没有其他办法了。

请问下有什么办法可以将这些匿名块也选择出来,这些匿名块如果你点击,它显示块名就是叫ss11,但是如果用程序单步运行,则可以发现他们有部分变成了匿名块。如何解决啊,请教高手啊!我希望依靠块名来筛选出我要的东西。
发表于 2014-6-17 12:16:13 | 显示全部楼层
这个问题不知道楼主解决了吗
发表于 2014-6-17 19:30:13 | 显示全部楼层
动态块,没研究过,

用这个行不

      gpCode(0) = 100 '子类数据标记
      dataValue(0) = "AcDbBlockReference"
发表于 2014-6-17 23:40:26 | 显示全部楼层
楼上的兄弟,我的要的一个功能是,我知道一个图块的名称,现在我需要获取这个图块该怎么做呢

Dim gpCode(11) As Int16
        Dim dataValue(1) As Object
        '指定类型
        gpCode(0) = 0
        dataValue(0) = ??'图块的图元类型名称是什么呢?
        '指定图块名称
        gpCode(1) = 2
        dataValue(1) = blockName
        sset.Select(AcSelect.acSelectionSetAll, , , gpCode, dataValue)
发表于 2014-6-20 20:04:09 | 显示全部楼层
本帖最后由 szj612 于 2014-6-20 20:05 编辑

Dim gpCode(1) As Int16
         Dim dataValue(1) As Object
         '指定类型
        gpCode(0) = 0
         dataValue(0) = "insert"'图块的图元类型名称是什么呢?
        '指定图块名称
        gpCode(1) = 2
         dataValue(1) = blockName
         sset.Select(AcSelect.acSelectionSetAll, , , gpCode, dataValue)
发表于 2014-6-25 15:02:20 | 显示全部楼层
to szj612   兄弟
"insert" 是块参照的 图元类型名称
就是说你的代码会搜索出块名为blockname的所以块参照(即插入的图块,而不是定义的图块)
 楼主| 发表于 2014-7-5 12:40:38 | 显示全部楼层
本帖最后由 bluefires 于 2014-7-5 12:43 编辑

    Dim filterType1(0 To 2) As Integer
    Dim filterData1(0 To 2) As Variant
    Dim ssetObj1 As AcadSelectionSet
    filterType1(0) = 0
    filterData1(0) = "Insert"
    filterType1(1) = 100
    filterData1(1) = "AcDbBlockReference"
    filterType1(2) = 2
    filterData1(2) = "动态块的名称"
Set ssetObj1 = CreateSelectionSet("SSET1")
    ssetObj1.SelectOnScreen filterType1, filterData1
    If ssetObj1.count = 0 Then
        ThisDrawing.Utility.Prompt "用户取消放置状态,退出" & vbCrLf
        Exit Sub
    End If
For Each elem In ssetObj1    '把指定动态块过滤出来
     '要处理的代码
next

这个是我的大致代码,但是当动态块变为匿名块的时候,filterData1(2) = "动态块的名称" 这个语句就出问题了,后来我就减少了这个筛选条件。当然如果图纸中动态块较多,肯定速度会慢点。我看了上面大家的方案基本也是有一定的问题。至于动态块为什么会变为匿名块,我也不清楚,有知道的请回复下。
发表于 2014-8-22 10:29:30 | 显示全部楼层
先用这个筛选:
      gpCode(0) = 100 '子类数据标记
      dataValue(0) = "AcDbBlockReference"
然后遍历选择集,判断对象的EffectiveName
 楼主| 发表于 2014-8-23 15:30:01 | 显示全部楼层
我后来也是这么做的,不知道效率上比起直接在筛选中用块名有什么差距
发表于 2014-8-23 19:11:33 | 显示全部楼层
bluefires 发表于 2014-8-23 15:30
我后来也是这么做的,不知道效率上比起直接在筛选中用块名有什么差距

肯定差很多的,不过现在电脑CPU快,影响不大
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 12:38 , Processed in 0.184481 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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