Сортировка точек 3-d полилинии по возрастанию.
Добрый день! Прошу помощи с кодом, я совсем только на начальном уровне нахожусь.
Дано: имеется в чертеже исходная 3-d полилиния, у которой вершины расположены не по «порядку», то есть не по мере удаления от начальной точки.
Задача – получить 3-d полилинию, у которой исходные вершины будут расположены по порядку (иллюстрация ниже).
Для этого пытаюсь создать функцию, которая будет сортировать коллекцию исходных 3-д точек, входящих в полилинию, по мере увеличения расстояния от каждой точки до начальной точки. И строить 3-д полилинию по новой отсортированной коллекции.
Пробую использовать метод Sort класса System.Array
Далее привожу свой код на vb.net.
Public Function SortColArray(myPolyline3dcol As Point3dCollection) As Point3dCollection
Dim SortCol As New Point3dCollection ' это коллекция для отсортированных по порядку точек
Dim i, j As Integer ' это переменные для счётчика
Dim S1 As Double ' это переменная для расстояния от каждой точки до начальной
'___________________Объявляем массив из индексов точек и соответствующих им расстояний до стартовой точки
Dim ArrayOfDist(S1) As Double ' массив для вычисленных расстояний
Dim ArrayOfPoints(i) As Point3d 'это я пробую объявить массив для 3-д точек
'________________________Начинаем обработку с улавливанием ошибок_____________________________________
Try
For Each my3dpoint As Point3d In myPolyline3dcol 'перебираю каждую точку в исходной несортированной коллекции
For i = 0 To myPolyline3dcol.Count - 1 ' открываю цикл для индексов каждой найденной точки
S1 = Vychisli_S(myPolyline3dcol(0), my3dpoint) 'вычисляю расстояние от найденной точки до начальной точки исходной коллекции
'в отдельной функции, это место работает легко в других моих программах
ArrayOfDist.SetValue(S1, i) 'добавляем вычисленное расстояние в свой массив с текущим индексом
ArrayOfPoints.SetValue(my3dpoint(i), i) 'здесь я пытаюсь закинуть 3-d точку из коллекции в ранее объявленный массив для 3-д точек.
Next
Next
Array.Sort(ArrayOfDist, ArrayOfPoints) 'здесь и должна происходить, как мне кажется, сортировка массива ArrayOfPoints по ключам, содержащимся в массиве ArrayOfDist
' то есть каждому элементу массива точек ArrayOfPoints соответствует свой элемент в массиве расстояний ArrayOfDist. И сортируя по возрастанию массив ArrayOfDist,
' я надеюсь параллельно "расставить по местам" точки в массиве ArrayOfPoints
'_________________________________________далее я пытаюсь добавить каждый элемент массива ArrayOfPoints в коллекцию Point3dCollection
For j = 0 To ArrayOfPoints.Length - 1
'SortCol.Add(myPolyline3dcol(ArrayOfIndex(i)))
SortCol(j) = ArrayOfPoints(j)
Next
Catch ex As system.Exception
ed.WriteMessage("Что-то пошло не так..." & ex.Message) '
End Try
Return SortCol ' тут я возвращаю отсортированную коллекцию, по которой в моем Sub строится и добавляется в чертеж правильная 3-d полилиния, но.....
End Function
Public Function Vychisli_S(p1 As Point3d, p2 As Point3d) As Double
Dim line1 As Line = New Line(New Point3d(p1.X, p1.Y, 0), New Point3d(p2.X, p2.Y, 0))
Dim S1 As Double = line1.Length
Return S1
End Function
В итоге у меня постоянно ловится ошибка «Невозможно сохранить объект в массиве этого типа»
Помогите, пожалуйста, найти решение.