AutoCAD中获得曲线长度的VBA代码

2012年03月14日 程序设计 暂无评论
Option Explicit
Function TotLen(oSset As AcadSelectionSet) As Double
Dim oEnt As AcadEntity
For Each oEnt In oSset
    If TypeOf oEnt Is AcadPolyline Or _
    TypeOf oEnt Is AcadLWPolyline Or _
    TypeOf oEnt Is AcadLine Then
        TotLen = TotLen + oEnt.Length
    ElseIf TypeOf oEnt Is AcadArc Then
        TotLen = TotLen + oEnt.ArcLength
    ElseIf TypeOf oEnt Is AcadCircle Then
        TotLen = TotLen + oEnt.Circumference
    ElseIf TypeOf oEnt Is AcadSpline Then
        TotLen = TotLen + GetCurveLength(oEnt)
    ElseIf TypeOf oEnt Is AcadEllipse Then
        TotLen = TotLen + GetCurveLength(oEnt)
    End If
Next oEnt
End Function
Function GetCurveLength(oEnt As AcadEntity) As Double
Dim sVar
sVar = 0
Dim strCom As String
With ThisDrawing
.SetVariable "USERR1", sVar
.SendCommand "(vl-load-com)" & vbCr
strCom = "(setvar " & Chr(34) & "USERR1" & Chr(34) & Chr(32) & "(vlax-curve-getdistatparam (vlax-ename->vla-object (handent " & Chr(34) & oEnt.Handle & Chr(34) & ")) (vlax-curve-getendparam (vlax-ename->vla-object (handent " & Chr(34) & oEnt.Handle & Chr(34) & ")))))" & vbCr
.SendCommand strCom
GetCurveLength = .GetVariable("USERR1")
End With
End Function
Sub TryIt()
Dim oSset As AcadSelectionSet
Dim oEnt
Dim fcode(0) As Integer
Dim fData(0) As Variant
Dim dxfCode, dxfdata
Dim i As Integer
Dim SetName As String
' create filter
fcode(0) = 0
' include the following entity types:
' LINE, LWPOLYLINE, POLYLINE, SPLINE, ARC, CIRCLE, ELLIPSE:
fData(0) = "*LINE,ARC,CIRCLE,ELLIPSE"
'
dxfCode = fcode
dxfdata = fData
'
SetName = "$Total$"
' delete all selection sets to make sure that named selection does not exist
          With ThisDrawing.SelectionSets
               While .Count > 0
                    .Item(0).Delete
               Wend
          End With
' add empty selection into selectionsets collection
Set oSset = ThisDrawing.SelectionSets.Add(SetName)
' select on screen
oSset.SelectOnScreen dxfCode, dxfdata
' display result
If oSset.Count > 0 Then
MsgBox CStr(Round(TotLen(oSset), 3)), vbInformation, "Total Length"
Else
MsgBox "0 selected, try again"
End If
End Sub

给我留言

Copyright © 懒猫窝窝 保留所有权利.   主题设计 AB模板网

用户登录