线的交点问题
<P>思路:选一条多段线,程序自动创建5条线,求交点</P><P>问题:所求交点重合为一个点???请高手指点。谢谢。</P>
<P> Dim ent As AcadEntity<BR></P>
<P> On Error Resume Next<BR> N = -1<BR> Do<BR> ThisDrawing.Utility.GetEntity ent, Pnt, "选择区域范围线(多段线):"<BR> If Err Then Exit Sub<BR> If TypeName(ent) Like "IAcad*Polyline" Then Exit Do</P>
<P> Loop<BR> Dim StartPt(0 To 2) As Double, EndPt(0 To 2) As Double</P>
<P> For u = 1 To 5<BR> <BR> StartPt(0) = 100 + (u - 1) * 5<BR> StartPt(1) = 100<BR> StartPt(2) = 0<BR> <BR> EndPt(0) =120 + (u - 1) * 5<BR> EndPt(1) = 120</P>
<P> EndPt(2) = 0<BR> <BR> Dim LineObj As AcadLine<BR> <BR> Set LineObj = ThisDrawing.ModelSpace.AddLine(StartPt, EndPt)<BR> LineObj.Update<BR> <BR> <BR> intPoints = LineObj.IntersectWith(ent, acExtendThisEntity)<BR> <BR> Dim str As String<BR> Dim pointObj As AcadPoint '声明点的对象变量<BR> Dim Location(0 To 2) As Double '声明点的位置数组变量<BR> <BR> <BR> If VarType(intPoints) <> vbEmpty Then<BR> For i = LBound(intPoints) To UBound(intPoints)<BR> str = "Intersection Point[" & k & "] is: " & Format(intPoints(j), "0.000") & "," & Format(intPoints(j + 1), "0.000") & "," & intPoints(j + 2)<BR> 'MsgBox str, , "IntersectWith Example"<BR> <BR> Location(0) = Format(intPoints(j), "0.000")<BR> Location(1) = Format(intPoints(j + 1), "0.000")<BR> Location(2) = 0<BR> <BR> Set pointObj = ThisDrawing.ModelSpace.AddPoint(Location)<BR> str = ""<BR> i = i + 2<BR> j = j + 3<BR> k = k + 1<BR> Next i<BR> End If<BR> <BR> Next u<BR></P> 没有人回答呀 If VarType(intPoints) <> vbEmpty Then
For i = LBound(intPoints) To UBound(intPoints)
str = "Intersection Point[" & k & "] is: " & Format(intPoints(j), "0.000") & "," & Format(intPoints(j + 1), "0.000") & "," & intPoints(j + 2)
'MsgBox str, , "IntersectWith Example"
Location(0) = Format(intPoints(j), "0.000")
Location(1) = Format(intPoints(j + 1), "0.000")
Location(2) = 0
Set pointObj = ThisDrawing.ModelSpace.AddPoint(Location)
str = ""
i = i + 2
j = j + 3
k = k + 1
Next i
End Iffor each 语句的种子是i,为什么在循环体还要改变它的值?
Sub test2()
Dim ent As AcadEntity
On Error Resume Next
n = -1
Do
ThisDrawing.Utility.GetEntity ent, pnt, "选择区域范围线(多段线):"
If Err Then Exit Sub
If TypeName(ent) Like "IAcad*Polyline" Then Exit Do
Loop
Dim StartPt(0 To 2) As Double, EndPt(0 To 2) As Double
For u = 1 To 5
StartPt(0) = 100 + (u - 1) * 5
StartPt(1) = 100
StartPt(2) = 0
EndPt(0) = 120 + (u - 1) * 5
EndPt(1) = 120
EndPt(2) = 0
Dim LineObj As AcadLine
Set LineObj = ThisDrawing.ModelSpace.AddLine(StartPt, EndPt)
LineObj.Update
intPoints = LineObj.IntersectWith(ent, acExtendThisEntity)
Dim str As String
Dim pointObj As AcadPoint '声明点的对象变量
Dim Location(0 To 2) As Double '声明点的位置数组变量
If UBound(intPoints) > 0 Then
For i = 0 To UBound(intPoints) Step 3
j = i / 2
str = "Intersection Point[" & j & "] is: " & Format(intPoints(i), "0.000") & "," & Format(intPoints(i + 1), "0.000") & "," & intPoints(i + 2)
MsgBox str, , "IntersectWith Example"
Location(0) = Format(intPoints(i), "0.000")
Location(1) = Format(intPoints(i + 1), "0.000")
Location(2) = Format(intPoints(i + 2), "0.000")
Set pointObj = ThisDrawing.ModelSpace.AddPoint(Location)
str = ""
Next i
End If
Next u
End Sub <P>i重给定值是因为没有加步长,默认为1,为得到正确坐标,需重赋值。</P>
<P>现在解决了,谢谢版主。</P>
<P> </P>
页:
[1]