用Vlax、Curve类离散地形等高线为文字为什么有时会自动退出ACAD
<p>运用Vlax、Curve类 写了一个离散等高线为文字的函数,但性能不稳定,有时多选几条等高线后会出现参数过多的提示或自动退出ACAD,请大侠帮忙看看问题何在?拜托!</p><p>Sub dgx_text()<br/> '定义选择集<br/> Dim SsetObj As AcadSelectionSet<br/> Dim FilterType(0 To 1) As Integer<br/> Dim FilterData(0 To 1) As Variant<br/> <br/> '定义循环变量<br/> Dim N As Long<br/> Dim I As Long, J As Long, K As Long, II As Long, JJ As Long<br/> <br/> '定义文字变量<br/> Dim High As Double<br/> Dim XText As AcadText<br/> Dim insPt(0 To 2) As Double<br/> <br/> '定义引用曲线类模块<br/> Dim ObjCurve As Curve<br/> Set ObjCurve = New Curve<br/> '获取曲线变量<br/> Dim sPt As Variant<br/> Dim ePt As Variant<br/> Dim Pt As Variant<br/> Dim ENT As AcadEntity<br/> <br/> '配置参数<br/> Dim Dist As Double<br/> Dim Htext As Double<br/> Dim Color1 As Integer<br/> Dim Color2 As Integer<br/> Dim Color3 As Integer<br/> <br/> 'Op.Show<br/> 'Dist = Val(Op.TextBox1.Text)<br/> 'Htext = Val(Op.TextBox2.Text)<br/> 'Color1 = Val(Op.TextBox3.Text)<br/> 'Color2 = Val(Op.TextBox4.Text)<br/> Dist = 5<br/> Htext = 1<br/> Color1 = 3<br/> Color2 = 1<br/> <br/> <br/> <br/> '选择曲线<br/> On Error Resume Next<br/> Set SsetObj = ThisDrawing.SelectionSets.Add("b")<br/> If Err Then<br/> Err.Clear<br/> Set SsetObj = ThisDrawing.SelectionSets.Item("b")<br/> End If<br/> SsetObj.Clear<br/> SsetObj.SelectOnScreen<br/> N = SsetObj.Count<br/> <br/> <br/> Dim Length As Double<br/> Dim mLength As Double<br/> '循环选择对象<br/> For I = 0 To N - 1<br/> If SsetObj.Item(I).ObjectName = "AcDbLine" Or _<br/> SsetObj.Item(I).ObjectName = "AcDbCircle" Or _<br/> SsetObj.Item(I).ObjectName = "AcDbArc" Or _<br/> SsetObj.Item(I).ObjectName = "AcDbSpline" Or _<br/> SsetObj.Item(I).ObjectName = "AcDb3dPolyline" Or _<br/> SsetObj.Item(I).ObjectName = "AcDbPolyline" Or _<br/> SsetObj.Item(I).ObjectName = "AcDb2dPolyline" Or _<br/> SsetObj.Item(I).ObjectName = "AcDbEllipse" Or _<br/> SsetObj.Item(I).ObjectName = "AcDbLeader" Then<br/> <br/> If SsetObj.Item(I).ObjectName = "AcDbLine" Then<br/> High = SsetObj.Item(I).StartPoint()(2)<br/> ElseIf SsetObj.Item(I).ObjectName = "AcDbCircle" Then<br/> High = SsetObj.Item(I).CenterPoint()(2)<br/> ElseIf SsetObj.Item(I).ObjectName = "AcDbArc" Then<br/> High = SsetObj.Item(I).CenterPoint()(2)<br/> ElseIf SsetObj.Item(I).ObjectName = "AcDbSpline" Then<br/> High = SsetObj.Item(I).ControlPoints(0)(2)<br/> ElseIf SsetObj.Item(I).ObjectName = "AcDb3dPolyline" Then<br/> High = SsetObj.Item(I).Coordinates()(2)<br/> ElseIf SsetObj.Item(I).ObjectName = "AcDbPolyline" Then<br/> High = SsetObj.Item(I).Elevation<br/> ElseIf SsetObj.Item(I).ObjectName = "AcDb2dPolyline" Then<br/> High = SsetObj.Item(I).Elevation<br/> End If<br/> Set ENT = SsetObj.Item(I)<br/> '亮显要处理的曲线以方便输入曲线代表高程<br/> Color3 = SsetObj.Item(I).color<br/> SsetObj.Item(I).color = Color1<br/> SsetObj.Item(I).Update<br/> ENT.Highlight True<br/> If High <= 0 Then<br/> High = ThisDrawing.Utility.GetReal("输入等高线高程:")<br/> End If<br/> If High > 0 Then<br/> Set ObjCurve.Entity = ENT<br/> sPt = ObjCurve.StartPoint<br/> ePt = ObjCurve.EndPoint<br/> Length = ObjCurve.Length<br/> ThisDrawing.ModelSpace.AddText Trim(Str(High)), sPt, Htext<br/> ThisDrawing.ModelSpace.AddText Trim(Str(High)), ePt, Htext<br/> If Length > Dist Then<br/> mLength = 0<br/> Do<br/> mLength = mLength + Dist<br/> If mLength < Length Then<br/> Pt = ObjCurve.GetPointAtDistance(mLength)<br/> ThisDrawing.ModelSpace.AddText Trim(Str(High)), Pt, Htext<br/> Else<br/> Exit Do<br/> End If<br/> Loop<br/> End If<br/> ENT.Highlight False<br/> SsetObj.Item(I).color = Color2<br/> High = 0<br/> Else<br/> SsetObj.Item(I).color = Color3<br/> End If<br/> End If<br/> Next I<br/> SsetObj.Clear<br/>End Sub</p>
页:
[1]