部分关键代码如下:
'对选定曲线进行等分(总点数)
Dim clsClip As New dClipBord
Dim dSet As AcadSelectionSet
Dim clsSet As New dSelectionSet
Dim clsEnt As New dEntity
Dim Ent As AcadEntity '对象
Dim dCount As Long '段数,运行之后就明确了
Dim dObj As Object '绘出的新对象
Dim PointX() As Double, PointY() As Double, PointZ() As Double
Dim dStr As String '用于存放坐标字串:
dStr = ""
Dim dTimes As Long
Dim TempStr As String
Dim clsStr As New dString
Dim F() As Double
Dim startTan(0 To 2) As Double: startTan(0) = 0: startTan(1) = 0: startTan(2) = 0:
Dim endTan(0 To 2) As Double: endTan(0) = 0: endTan(1) = 0: endTan(2) = 0
Dim clsMath As New dMath
dCount = UserForm1.TextBox5
clsSet.CreateSelectionCurveSet dSet '选取曲线对象
If dSet.Count = 0 Then Exit Sub
For Each Ent In dSet
dTimes = dTimes + 1
'dStr = vbCr
clsEnt.EntItoXYZ Ent, dCount, PointX, PointY, PointZ
'根据类型作曲线
Select Case Ent.ObjectName
Case "AcDb3dPolyline" '如是三维多线段
clsMath.P3DtoPoint PointX, PointY, PointZ, F, 0
clsStr.XYZtoStr PointX, PointY, PointZ, TempStr
Set dObj = ThisDrawing.ModelSpace.Add3DPoly(F)
Case "AcDbSpline" '如果是样条曲线
clsMath.P3DtoPoint PointX, PointY, PointZ, F, 0
clsStr.XYZtoStr PointX, PointY, PointZ, TempStr
Set dObj = ThisDrawing.ModelSpace.AddSpline(F, startTan, endTan)
Case "AcDb2dPolyline" '如是二维多线段
clsMath.P3DtoPoint PointX, PointY, PointZ, F, 0
Set dObj = ThisDrawing.ModelSpace.AddPolyline(F)
clsEnt.SetHeight dObj, PointZ(0)
clsStr.XYtoStr PointX, PointY, TempStr
Case Else '其余全按多线段进行处理
clsMath.P2DtoPoint PointX, PointY, F, 0
Set dObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(F())
clsEnt.SetHeight dObj, PointZ(0)
clsStr.XYtoStr PointX, PointY, TempStr
End Select
clsEnt.EqualFormat Ent, dObj
Ent.Delete
dStr = dStr + TempStr + vbCr + "" + vbCr
Next Ent
'去掉最后一个回车符
dStr = Left(dStr, Len(dStr) - 1)
clsClip.PutClipBord dStr