乐筑天下

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

[求助]关于选择集,当图纸缩小或者扩大超出可视范围时的影响

[复制链接]

15

主题

53

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
113
发表于 2008-8-4 21:20:00 | 显示全部楼层 |阅读模式
请教一个问题,我写了一个程序,是为了判断我的图纸里面有没有2个以上的块叠在一起,或者说如果是2个块叠加在一起就一定要一个是“上穿孔”,一个是“下穿孔”,要不是的话就标志出来。如果我把这个图纸放大到全部显示的情况下程序没有问题,可如果当我把图纸缩小的非常下的时候(可以吧图纸缩小到一个点那么大),就会发现所有的块都被标志了,我查看了程序,竟然发现所有的块都被我用ssetObj2.Select mode, corner1, corner2, filterType, filterData所构成的块选择中了。当然如果扩大超出可视范围则有问题的块也不能被发现了(这个我还能解释)。问下大家这个问题该怎么解决,如果仅仅从选择集没有办法解决的华,还有其他思路吗。图纸和代码都在压缩包里面。

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

15

主题

53

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
113
发表于 2008-8-4 21:29:00 | 显示全部楼层
我看了论坛上这个帖子,也是相同的问题
特别是这段话,我觉得和我体会以一样:(hangc兄 , 在实践中 发现选择集确实和范围有关。

我现在使用acSelectionSetWindow之前都要先 zoom一下。)
回复

使用道具 举报

15

主题

53

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
113
发表于 2008-8-4 21:33:00 | 显示全部楼层
或许有的人要问,你干嘛把图纸缩小的那么小啊,放大点不久可以了,可事实是我要处理的图纸太大了,不是一般的大,所以实际上的节点就是非常小的。恳请大家帮我提供一条思路,怎么解决这个问题。
回复

使用道具 举报

25

主题

219

帖子

6

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
319
发表于 2008-8-5 10:04:00 | 显示全部楼层
在循环中用选择集应是不好的,楼主可以考虑用插入点的距离进行判断不?
不过这样速度比较慢啊
Private Sub CommandButton1_Click()
    Dim retCoord As Variant
    Dim elem As AcadEntity
    Dim corner1(0 To 2) As Double
    Dim corner2(0 To 2) As Double
    Dim dd, rr As Double
    rr = 23.5651 * 2
    Dim ptMin, ptMax
    Dim objRec As AcadLWPolyline
    '关于扩展数据的变量
    Dim dataType(0 To 1) As Integer
    Dim data(0 To 1) As Variant
    dataType(0) = 1001: data(0) = "MY_NodeSign"
    dataType(1) = 1000: data(1) = "blkMark"
    '创建选择集,用于选择设备
    Dim ssetObj1 As AcadSelectionSet
    Dim filterType(0 To 6) As Integer
    Dim filterData(0 To 6) As Variant
    '安全的建立选择集
    Set ssetObj1 = CreateSelectionSet("SSET1")
    Dim mode As Integer
    '创建两个选择集,用于选择设备
    Dim ssetObj2 As AcadSelectionSet
    '选择模式为通过某个区域
    mode = acSelectionSetCrossing
    '安全的建立选择集
   
   
    '防止出现ESC错误
    'On Error Resume Next
    filterType(0) = 0
    filterData(0) = "Insert"
    filterType(1) = 100
    filterData(1) = "AcDbBlockReference"
    filterType(2) = -4
    filterData(2) = ""
    ssetObj1.Select acSelectionSetAll, , , filterType, filterData
MsgBox ssetObj1.Count
    '创建图块列表、扫描模型空间集合
    For Each elem In ssetObj1
        retCoord = elem.InsertionPoint
        '建立一个以首尾某个点为中心的长和宽为20MM的矩形
        corner1(0) = retCoord(0)
        corner1(1) = retCoord(1)
        corner1(2) = 0
        
        For Each elem2 In ssetObj1
        If elem.Handle = elem2.Handle Then GoTo nextelem2
        
        retCoord = elem2.InsertionPoint
        corner2(0) = retCoord(0)
        corner2(1) = retCoord(1)
        corner2(2) = 0
        
        dd = ((corner1(0) - corner2(0)) ^ 2 + (corner1(1) - corner2(1)) ^ 2) ^ 0.5
        If dd - rr
回复

使用道具 举报

15

主题

53

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
113
发表于 2008-8-5 22:57:00 | 显示全部楼层
呵呵,阁下这个思路确实不错,真是谢谢了,我觉得你这个思路的速度应该也还可以,我今天采用了ZoomWindow point1,point2 这个命令解决了这个问题,感觉速度还可以。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-4 06:42 , Processed in 1.202751 second(s), 67 queries .

© 2020-2025 乐筑天下

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