乐筑天下

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

请帮忙看看为什么出错??

[复制链接]

34

主题

69

帖子

5

银币

后起之秀

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

铜币
205
发表于 2004-11-3 11:32:00 | 显示全部楼层 |阅读模式
以下代码,如果先画出直线,再画多段线就能求出交点
但如果先画多段线,再画直线就求不出交点(只要有一条多段线画的顺序在直线前边就不行),请帮忙看一下,在线等待
Sub Example_Select()
                         
                         ' 创建选择集
                         Dim ssetObj As AcadSelectionSet
                         
                         On Error Resume Next
                         Set ssetObj = ThisDrawing.SelectionSets("SSET")
                         If Err Then
                                                         Err.Clear
                                                         Set ssetObj = ThisDrawing.SelectionSets.Add("SSET")
                         End If
                         ssetObj.Clear
                         
                         '构造过滤机制
                         Dim groupCode(0) As Integer
                         Dim dataCode(0) As Variant
                         groupCode(0) = 0
                         dataCode(0) = "lwPolyline"
                         ssetObj.Select acSelectionSetAll, , , groupCode, dataCode
                         
                         
                         '获取直线的外框
                         Dim corner1 As Variant
                         Dim corner2 As Variant
                         Dim lineObj As AcadLine
                         Set lineObj = ThisDrawing.ModelSpace(0)
                         lineObj.GetBoundingBox corner1, corner2 'lineObj为位于0层的直线
                         
                         ssetObj.Select acSelectionSetCrossing, corner1, corner2, groupCode, dataCode
                         
                                 '枚举交点,判断是否相交
                                 Dim Pts As Variant
                                 Dim i As Integer
                                 Dim j As Integer
                                 For i = 0 To ssetObj.Count - 1
                                                         Pts = ssetObj(i).IntersectWith(lineObj, acExtendNone)
                                                         If Not IsEmpty(Pts) Then
                                                                                         Debug.Print "多段线(" & ssetObj(i).Handle & ")与直线(" & lineObj.Handle & ")相交"
                                                                                         For j = 0 To UBound(Pts) Step 3
                                                                                                                         Debug.Print "交点:" & Pts(j) & "," & Pts(j + 1) & "," & Pts(j + 2)
                                                                                         Next
                                                         End If
                         Next
End Sub
回复

使用道具 举报

26

主题

589

帖子

10

银币

中流砥柱

Rank: 25

铜币
693
发表于 2004-11-3 13:16:00 | 显示全部楼层
Set lineObj = ThisDrawing.ModelSpace(0)
问题出在这一句,它是返回模型空间的第一个实体,如果多段线先画,当然就是返回多段线,而不是直线了,后面自然也是错误的。
On Error Resume Next避免了错误的提示,在调试的时候尽量少用,而等最终代码无误了再加上。
回复

使用道具 举报

34

主题

69

帖子

5

银币

后起之秀

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

铜币
205
发表于 2004-11-3 13:44:00 | 显示全部楼层
知道了,谢谢efan2000大侠
送鲜花一朵
回复

使用道具 举报

3

主题

30

帖子

6

银币

初来乍到

Rank: 1

铜币
41
发表于 2004-11-8 16:13:00 | 显示全部楼层
“On Error Resume Next避免了错误的提示,在调试的时候尽量少用,而等最终代码无误了再加上。”
在这里学到的不仅仅是技术,还有良好的编程习惯,送鲜花一朵
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-16 15:02 , Processed in 0.408374 second(s), 60 queries .

© 2020-2025 乐筑天下

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