 - ' 坐标点排序函数
- ' 语法:SortPoints(Points, SortMode)
- ' Points为坐标点数组
- ' SortMode为排序方式:0=X向,1=Y向,2=Z向
- ' 返回值为排序后的坐标点数组
- Public Function SortPoints(Points As Variant, SortMode As String) As Variant
- Dim NewPoints() As Variant
- ReDim NewPoints(UBound(Points))
- Dim k As Long
- For k = 0 To UBound(NewPoints)
- NewPoints(k) = Points(k)
- Next k
-
- Dim BestPoint As Variant
- Dim Pnt1 As Double
- Dim Pnt2 As Double
- Dim i As Long
- Dim j As Long
- Dim Best_Value As Double
- Dim Best_j As Long
- For i = 0 To UBound(NewPoints) - 1
- Best_Value = NewPoints(i)(SortMode)
- BestPoint = NewPoints(i)
- Best_j = i
- For j = i + 1 To UBound(NewPoints)
- If NewPoints(j)(SortMode) < Best_Value Then
- Best_Value = NewPoints(j)(SortMode)
- BestPoint = NewPoints(j)
- Best_j = j
- End If
- Next j
- NewPoints(Best_j) = NewPoints(i)
- NewPoints(i) = BestPoint
- Next i
- SortPoints = NewPoints
- End Function' 示例
- Sub SortPointsSample()
- Dim Pnts(5) As Variant
- Dim i As Integer
- Dim OldTxt As String
- Dim NewTxt As String
- OldTxt = "未排序坐标:"
- ThisDrawing.Utility.Prompt vbCr & "请按顺序随意点取6个坐标点" & vbCrLf
- For i = 0 To 5
- Pnts(i) = ThisDrawing.Utility.GetPoint(, vbCr & "点取第" & i + 1 & "点坐标点:")
- OldTxt = OldTxt & vbCr & "第" & i + 1 & "点坐标为:" & Pnts(i)(0) & _
- " " & Pnts(i)(1) & " " & Pnts(i)(2)
- Next
- Dim NewPnts As Variant
- NewPnts = SortPoints(Pnts, 0)
- NewTxt = "按X坐标排序的顺序:"
- For i = 0 To 5
- NewTxt = NewTxt & vbCr & "第" & i + 1 & "点坐标为:" & NewPnts(i)(0) & _
- " " & NewPnts(i)(1) & " " & NewPnts(i)(2)
- Next
- MsgBox OldTxt & vbCr & vbCr & NewTxt, , "明经通道VBA示例"
- End Sub
|