乐筑天下

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

vba select选择集问题

[复制链接]

2

主题

4

帖子

1

银币

初来乍到

Rank: 1

铜币
12
发表于 2017-11-21 14:11:00 | 显示全部楼层 |阅读模式
acselectsetcrossing进行选择时,矩形边框范围有最小的限制范围吗,我在选择时,有的时候可以选择到对象,有时选择不到对象。
我用手工方法把选择矩形框画出来,确认了要选择的对象确实是穿过矩形框。但是为什么就是选择不上该对象?
回复

使用道具 举报

1

主题

5

帖子

1

银币

初来乍到

Rank: 1

铜币
9
发表于 2018-1-2 16:48:00 | 显示全部楼层
有显示窗口限制 选前先zoomall 或 ZoomWindow
回复

使用道具 举报

85

主题

1175

帖子

11

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1518
发表于 2017-11-21 15:23:00 | 显示全部楼层
是不是虚线?如果从虚线部分穿过去的会选不到。
回复

使用道具 举报

2

主题

4

帖子

1

银币

初来乍到

Rank: 1

铜币
12
发表于 2017-11-22 08:47:00 | 显示全部楼层

我把代码贴出来了,大家有时间帮我看看。
基本思路是,在图形上选择一点,以此点为基础,向X正方向搜索,搜索到对象后,以此点为基础向搜索到的对象做一条垂线,同时返回垂足,然后在垂足为基础,继续搜索,直到循环结束。
现在问题是,通过acselectsetcrossing搜索不到对象,两次循环的矩形边框都是有重叠的,从理论上说,是连续搜索,不存在因为增量步长大,而边框小,造成两次循环所扫过的区间有间隙。
Function splitline_compound()
    Dim px, nx, transPnt As Variant
    Dim vobj As Variant
    Dim num As Integer
    px = ThisDrawing.Utility.GetPoint(, "select a point: ")
    nx = px
    ZoomExtents
    'x正方向搜索
    num = 20 '循环次数
     Do While num > 0
        Set vobj = searchobj(px, 1, 0#)
        'MsgBox TypeName(vobj)
        If vobj Is Nothing Then
            Exit Do
        End If
        transPnt = normalline(px, vobj)'画垂线,没有贴上来
        px = transPnt
        num = num - 1
     Loop
End Function
'搜索对象
Function searchobj(returnPnt As Variant, Optional dx As Double = 1, Optional dy As Double = -1) As AcadEntity
    Dim sset As AcadSelectionSet
    Dim count As Integer
    count = ThisDrawing.SelectionSets.count
    While count > 0
        count = count - 1
        Set sset = ThisDrawing.SelectionSets.item(count)
        sset.Delete
    Wend
    Set sset = ThisDrawing.SelectionSets.Add("TEST")
'Dim returnPnt As Variant
'returnPnt = ThisDrawing.Utility.GetPoint(, "Enter a point: ")
    Dim cc As Variant
    Dim st(0 To 2) As Double
    Dim inc As Double   '增量步长
    Dim length As Double    '搜索范围
    st(0) = returnPnt(0)   'X坐标
    st(1) = returnPnt(1)   'Y坐标
    st(2) = returnPnt(2)   'Z坐标
    inc = 0.1'每次增加0.1mm
    length = 30
    Do While length > 0
        st(0) = st(0) + dx * inc
        st(1) = st(1) + dy * inc
        cc = recscale(st, 0.1)’矩形框计算,这里得到0.2*0.2的正方形边框
        sset.Select acSelectionSetCrossing, cc(0), cc(1)
        If sset.count = 1 Then
            Exit Do
        End If
        length = length - inc
        sset.Clear
    Loop
'ThisDrawing.ModelSpace.AddPoint (st)
    If sset.count = 1 Then
        Set searchobj = sset.item(0)
    Else
        Set searchobj = Nothing
    End If
    sset.Delete
End Function
'矩形框的大小
Function recscale(cnt As Variant, Optional fs As Double = 0.05) As Variant
    Dim corner1(0 To 2) As Double
    Dim corner2(0 To 2) As Double
    Dim r As Double
    r = 1#
    corner1(0) = cnt(0) + fs * r
    corner1(1) = cnt(1) + fs * r
    corner1(2) = 0#
    ''
    corner2(0) = cnt(0) - fs * r
    corner2(1) = cnt(1) - fs * r
    corner2(2) = 0#
    recscale = Array(corner1, corner2)
End Function
回复

使用道具 举报

2

主题

4

帖子

1

银币

初来乍到

Rank: 1

铜币
12
发表于 2018-2-24 09:59:00 | 显示全部楼层

嗯,后来我发现这个问题了,谢谢
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 07:29 , Processed in 0.733063 second(s), 62 queries .

© 2020-2025 乐筑天下

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