明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1267|回复: 3

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

[复制链接]
发表于 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
发表于 2004-11-3 13:16:00 | 显示全部楼层
Set lineObj = ThisDrawing.ModelSpace(0)


问题出在这一句,它是返回模型空间的第一个实体,如果多段线先画,当然就是返回多段线,而不是直线了,后面自然也是错误的。


On Error Resume Next避免了错误的提示,在调试的时候尽量少用,而等最终代码无误了再加上。
 楼主| 发表于 2004-11-3 13:44:00 | 显示全部楼层
知道了,谢谢efan2000大侠


送鲜花一朵
发表于 2004-11-8 16:13:00 | 显示全部楼层
“On Error Resume Next避免了错误的提示,在调试的时候尽量少用,而等最终代码无误了再加上。”


在这里学到的不仅仅是技术,还有良好的编程习惯,送鲜花一朵
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-27 22:30 , Processed in 0.177936 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表