乐筑天下

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

关于选择集,请教高手啊

[复制链接]

15

主题

53

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
113
发表于 2013-6-15 13:04:00 | 显示全部楼层 |阅读模式
我在写选择集的时候,用了过滤,就是过滤图块的名称,比如图块名叫SS11,那么我就选择类型用2,但是由于我制作的那个图块用了动态块,因此我发现很容易那些块就变成了匿名块,就是带*u的块,这样我采用块名称来建立选择集就失效了,我除了采用0和insert似乎没有其他办法了。
请问下有什么办法可以将这些匿名块也选择出来,这些匿名块如果你点击,它显示块名就是叫ss11,但是如果用程序单步运行,则可以发现他们有部分变成了匿名块。如何解决啊,请教高手啊!我希望依靠块名来筛选出我要的东西。
回复

使用道具 举报

3

主题

13

帖子

3

银币

初来乍到

Rank: 1

铜币
25
发表于 2014-6-17 12:16:00 | 显示全部楼层
这个问题不知道楼主解决了吗
回复

使用道具 举报

23

主题

561

帖子

13

银币

中流砥柱

Rank: 25

铜币
653
发表于 2014-6-17 19:30:00 | 显示全部楼层
动态块,没研究过,
用这个行不
      gpCode(0) = 100 '子类数据标记
      dataValue(0) = "AcDbBlockReference"
回复

使用道具 举报

3

主题

13

帖子

3

银币

初来乍到

Rank: 1

铜币
25
发表于 2014-6-17 23:40:00 | 显示全部楼层
楼上的兄弟,我的要的一个功能是,我知道一个图块的名称,现在我需要获取这个图块该怎么做呢
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)
回复

使用道具 举报

10

主题

34

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
74
发表于 2014-6-20 20:04:00 | 显示全部楼层

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)
回复

使用道具 举报

3

主题

13

帖子

3

银币

初来乍到

Rank: 1

铜币
25
发表于 2014-6-25 15:02:00 | 显示全部楼层
to szj612   兄弟
"insert" 是块参照的 图元类型名称
就是说你的代码会搜索出块名为blockname的所以块参照(即插入的图块,而不是定义的图块)
回复

使用道具 举报

15

主题

53

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
113
发表于 2014-7-5 12:40:00 | 显示全部楼层

    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) = "动态块的名称" 这个语句就出问题了,后来我就减少了这个筛选条件。当然如果图纸中动态块较多,肯定速度会慢点。我看了上面大家的方案基本也是有一定的问题。至于动态块为什么会变为匿名块,我也不清楚,有知道的请回复下。
回复

使用道具 举报

8

主题

72

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
104
发表于 2014-8-22 10:29:00 | 显示全部楼层
先用这个筛选:
      gpCode(0) = 100 '子类数据标记
      dataValue(0) = "AcDbBlockReference"
然后遍历选择集,判断对象的EffectiveName
回复

使用道具 举报

15

主题

53

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
113
发表于 2014-8-23 15:30:00 | 显示全部楼层
我后来也是这么做的,不知道效率上比起直接在筛选中用块名有什么差距
回复

使用道具 举报

8

主题

72

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
104
发表于 2014-8-23 19:11:00 | 显示全部楼层

肯定差很多的,不过现在电脑CPU快,影响不大
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-4-20 18:14 , Processed in 2.008772 second(s), 72 queries .

© 2020-2025 乐筑天下

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