乐筑天下

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

[VBA]请看我的 SelectByPolygon acSelectionSetCrossingPolygon 不对了

[复制链接]

12

主题

40

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
88
发表于 2006-5-10 15:55:00 | 显示全部楼层 |阅读模式
请大家看一下如下程序,在一幅图的多数地方选择都是正确的,我发现有一个多边形选不到其里面的物体(看付图):
Sub gHH()
Dim selobj As Object
ThisDrawing.Utility.GetEntity selobj, basePoint, "请选择线:"
SelObjByPoly selobj
End Sub
Function SelObjByPoly(Ent As AcadEntity) As AcadSelectionSet
    Dim Coord As Variant
    Dim CoordCount As Integer
    Dim NewCoord() As Double
    Dim SelPoly As AcadSelectionSet
    Dim minpnt As Variant '对象边框最小点坐标
    Dim maxpnt As Variant '对象边框最大点坐标
    Dim zminpnt(0 To 2) As Double '不闭合对象的缩放点左下角点坐标
    Dim zmaxpnt(0 To 2) As Double '不闭合对象的缩放点右上角点坐标
   
        ThisDrawing.Layers.Item("SXD").LayerOn = True
        Ent.GetBoundingBox minpnt, maxpnt
          zminpnt(0) = minpnt(0) ' - 800
          zminpnt(1) = minpnt(1) '- 800
          zminpnt(2) = 0
          zmaxpnt(0) = maxpnt(0) '+ 800
          zmaxpnt(1) = maxpnt(1) '+ 800
          zmaxpnt(2) = 0
        ThisDrawing.Application.ZoomWindow zminpnt, zmaxpnt
        On Error GoTo Err1:
        Set SelPoly = ThisDrawing.SelectionSets.Add("SelP")
        
        If TypeName(Ent) = "IAcadLWPolyline" Then
                 Coord = Ent.Coordinates '获取顶点坐标数组
                 CoordCount = (UBound(Coord) + 1) / 2 '顶点数
                 '定义新的顶点坐标数组
                 ReDim NewCoord(0 To (3 * CoordCount - 1)) As Double
                 For j = 0 To UBound(Coord) - 1 Step 2
                     NewCoord((3 * j) / 2) = Coord(j)
                     NewCoord((3 * j) / 2 + 1) = Coord(j + 1)
                     NewCoord((3 * j) / 2 + 2) = 0
                 Next j
        ElseIf TypeName(Ent) = "IAcadPolyline" Then
                 Coord = Ent.Coordinates
                 CoordCount = (UBound(Coord) + 1) / 3
                 ReDim NewCoord(0 To UBound(Coord)) As Double
                 For j = 0 To UBound(Coord) - 1
                     NewCoord(j) = Coord(j)
                     NewCoord(j) = Coord(j)
                     NewCoord(j) = Coord(j)
                 Next j
         
        End If
        SelPoly.SelectByPolygon acSelectionSetCrossingPolygon, NewCoord
        A = SelPoly.Count '个数为0
        Set SelObjByPoly = SelPoly
        ZoomPrevious
Exit Function
Err1:
    ThisDrawing.SelectionSets.Item("SelP").Delete
    Resume
End Function

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

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

使用道具 举报

12

主题

40

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
88
发表于 2006-5-10 16:14:00 | 显示全部楼层
我反复试了很多次,有几次得到了SelPoly.Count 为7,但多数时候为0,具体哪种情况下得到了7也不搞明白
回复

使用道具 举报

158

主题

2315

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2951
发表于 2006-5-11 20:52:00 | 显示全部楼层
象这样的程序,你可以在调试时使用debug.print来打印出点表数据,看看数据有没有问题。
回复

使用道具 举报

31

主题

129

帖子

5

银币

后起之秀

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

铜币
253
发表于 2006-5-12 08:28:00 | 显示全部楼层
点表数据?是指什么?mccad
回复

使用道具 举报

12

主题

40

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
88
发表于 2006-5-14 08:27:00 | 显示全部楼层
点列表如下:好象看不出有问题.在我的图内还有这样选不到内部的多段线,我估计会不会与多段线围成的形状有关系,好象复杂一点的都要出问题复制代码
回复

使用道具 举报

158

主题

2315

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2951
发表于 2006-5-14 09:27:00 | 显示全部楼层
注意,选择框点表不能自相交。
回复

使用道具 举报

12

主题

40

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
88
发表于 2006-5-14 17:38:00 | 显示全部楼层
我刚刚又试了一下,这下每次运行都能得到SelPoly.Count =7,真是奇怪,什么都没改啊有时正确有时又不正确,这样的程序谁敢用?拜托各位大侠帮忙找一下原因.
还有就是boundary命令用起也是头痛,同样的图形有时能生成边界有时又不能生成边界。不知大家能不能自己搞一个类似boundary命令功能来生成边界的程序(可能比较困难啊),这样的算法有么?
回复

使用道具 举报

25

主题

77

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
177
发表于 2006-5-16 18:26:00 | 显示全部楼层
arden
你是怎么解决使用SelectByPolygon acSelectionSetWindowPolygon时,当两边界重合时的问题?
回复

使用道具 举报

54

主题

126

帖子

6

银币

后起之秀

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

铜币
342
发表于 2006-5-16 21:39:00 | 显示全部楼层
我的程序也有这个问题。
当图形简单、小时没有任何的错误出现
但当图形较大且复杂时出现这个错误,选不到图元,有时候能选到但这样的不多。
我怀疑是不是CAD提供的函数不稳定,有错误????????
回复

使用道具 举报

2

主题

6

帖子

1

银币

初来乍到

Rank: 1

铜币
14
发表于 2007-7-13 11:20:00 | 显示全部楼层
dwg文件刚被打开时也选择不到对象,有没有人碰到这个问题啊?怎么解决的?
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-6 18:39 , Processed in 0.843544 second(s), 77 queries .

© 2020-2025 乐筑天下

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