乐筑天下

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

【求救】多边形选择集遇到的奇怪问题

[复制链接]

6

主题

13

帖子

2

银币

初来乍到

Rank: 1

铜币
37
发表于 2019-4-30 13:01:00 | 显示全部楼层 |阅读模式
利用多边形选择集选择位于多边形和穿过多边形的对象,结果发现总有几根数据,无论怎么样都选择不了。这几根数据特点:①位于多边形内,且一个点在多边形上;②竖直90度。 但是同样特点的数据,有的又可以被选中。选不中的数据见附件图形中的白色线。运行环境:VBA+2008.麻烦各位大神分析一下原因和解决方法。图形数据见附件CAD文件。
代码如下:
  1. Sub SelPl()
  2.       ' On Error Resume Next
  3.      Dim objSelect As AcadEntity
  4.     Dim basePnt As Variant
  5.     Dim objAdd As AcadEntity
  6.     Dim lw As AcadLWPolyline
  7.     Dim sss As AcadSelectionSet
  8.     Set sss = CreateSelectionSet("zz")
  9.     ThisDrawing.Utility.GetEntity objSelect, basePnt, vbCrLf & "请选择多边形:"
  10.    
  11.      
  12.     Dim k1 As Integer
  13.     Dim k As Integer
  14.     Dim pointarrays() As Double
  15.     Dim i As Integer
  16.    
  17.    
  18.     Set lw = objSelect
  19.      k = UBound(lw.Coordinates)
  20.     k1 = (k + 1) * 1.5
  21.    
  22.    
  23.         ReDim pointarrays(0 To k1 - 1)
  24.     For i = 0 To k1 / 3 - 1 Step 1                  '把坐标赋值给数组
  25.          pointarrays(i * 3) = lw.Coordinates(i * 2)
  26.          pointarrays(i * 3 + 1) = lw.Coordinates(i * 2 + 1)
  27.          pointarrays(i * 3 + 2) = 0
  28.     Next
  29.    
  30.    
  31.     ThisDrawing.Application.ZoomExtents
  32.     sss.Clear
  33.     sss.SelectByPolygon acSelectionSetCrossingPolygon, pointarrays
  34.    
  35.     For Each objAdd In sss
  36.    
  37.        objAdd.color = 30
  38.     Next
  39. End Sub
  40. Private Function CreateSelectionSet(Optional SSetName As String) As AcadSelectionSet
  41.     On Error Resume Next
  42.     ThisDrawing.SelectionSets(SSetName).Delete
  43.     Set CreateSelectionSet = ThisDrawing.SelectionSets.Add(SSetName)
  44. End Function


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

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

使用道具 举报

23

主题

561

帖子

13

银币

中流砥柱

Rank: 25

铜币
653
发表于 2019-5-2 21:46:00 | 显示全部楼层
  1.     Dim i As Integer, j As Integer
  2.    
  3.    
  4.     Set lw = objSelect
  5.     k = UBound(lw.Coordinates)
  6.     k1 = (k + 1) * 3 \ 2
  7.    
  8.    
  9.     ReDim pointarrays(0 To k1 - 1)
  10.     For i = 0 To k1 - 1 Step 3                   '把坐标赋值给数组
  11.         pointarrays(i) = lw.Coordinates(j)
  12.         pointarrays(i + 1) = lw.Coordinates(j + 1)
  13.         pointarrays(i + 2) = 0
  14.         j = j + 2
  15.     Next
  16.    
  17.    

稍改改
回复

使用道具 举报

6

主题

13

帖子

2

银币

初来乍到

Rank: 1

铜币
37
发表于 2019-5-5 11:26:00 | 显示全部楼层

试过了,多边形顺时针与逆时针选择对象效果一样,因此执行两次还是存在漏选情况,邪门了!!cad2008下vba与C#选择效果一样,换CAD2010一样存在漏选,但是居然漏选的对象不一样,奇葩CAD!!!
回复

使用道具 举报

6

主题

13

帖子

2

银币

初来乍到

Rank: 1

铜币
37
发表于 2019-5-6 12:54:00 | 显示全部楼层

您可以用您的多边形点表与我的方法点表做比较,一模一样哦(本身算法就是一样,无非您多个变量而已,您可以仔细读读代码)。为了确定,我同样用您的方式,做过测试,实现效果也是一模一样。mikewolf2k 应该也试过,不然不会找其他问题了
回复

使用道具 举报

6

主题

13

帖子

2

银币

初来乍到

Rank: 1

铜币
37
发表于 2019-5-3 17:46:00 | 显示全部楼层
你的这个没有必要修改啊,与我的效果一模一样,二维坐标转三维坐标。所以用你的替换,实现效果肯定与我的一模一样,也是部分线怎么都选不中,而且我用C#,实现效果一样;怀疑是CAD选择集本身的BUG。再求高手现身指导,谢谢!
回复

使用道具 举报

0

主题

58

帖子

5

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
58
发表于 2019-5-4 06:10:00 | 显示全部楼层
把多边形顶点顺序改为逆时针试试
回复

使用道具 举报

6

主题

13

帖子

2

银币

初来乍到

Rank: 1

铜币
37
发表于 2019-5-5 08:29:00 | 显示全部楼层

一样无效。确实成了无解了,怎么@原来的几个版主啊?
回复

使用道具 举报

85

主题

1175

帖子

11

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1518
发表于 2019-5-5 10:35:00 | 显示全部楼层

先顺时针选一次,再逆时针选一次。(其实本质上需要的是逆时针的那次,但不知道多边形的的绘图顺序是顺时针还是逆时针,所以两种顺序都选一次,肯定又一次是真正的逆时针。)
回复

使用道具 举报

6

主题

13

帖子

2

银币

初来乍到

Rank: 1

铜币
37
发表于 2019-5-5 10:48:00 | 显示全部楼层

这个什么原因或原理呢,如果这样可以解决,是不是以后所有的多边形选择都需要这样操作?十分感谢,我马上试试看可以不?
回复

使用道具 举报

85

主题

1175

帖子

11

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1518
发表于 2019-5-5 10:57:00 | 显示全部楼层

先试试看,感觉有时候这个crossing不大准,保险起见,两个方向各来一次。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2024-11-22 00:32 , Processed in 0.280503 second(s), 77 queries .

© 2020-2024 乐筑天下

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