Сообщество программистов Autodesk в СНГ

ADN Club => VBA => Тема начата: Anatoly от 14-03-2021, 00:38:29

Название: Нужен алгоритм перенумеровки вершин замкнутой полилинии
Отправлено: Anatoly от 14-03-2021, 00:38:29
Речь не идет о переделке самой полилинии.
Надо переставить индексы вершин в массиве, указав, что индекс Х заменится на индекс У.
Полилиния может быть по часовой стрелке или против.
Пример 1
5 вершин, по часовой стрелке
4-я становится 1-ой, 5-я 2-ой....3-я 5-ой
Пример 2
5 вершин, по часовой стрелке
5-я становится 1-ой, 4-я 2-ой....1-я 5-ой
Пример 3
5 вершин, против часовой стрелки
5-я становится 1-ой, 4-я 2-ой....1-я 5-ой
Название: Re: Нужен алгоритм перенумеровки вершин замкнутой полилинии
Отправлено: Александр Ривилис от 14-03-2021, 00:43:18
1. Прочитать все координаты полилинии через свойство Polyline.Coordinates
2. Упорядочить их так как тебе нужно
3. Записать все координаты полилинии через свойство Polyline.Coordinates
Название: Re: Нужен алгоритм перенумеровки вершин замкнутой полилинии
Отправлено: Anatoly от 14-03-2021, 09:22:35
Я наверное, не точно объяснил, что надо.
У меня есть массив с координатами вершин.
Мне надо переписать индексы массива.
Например, было
|1|X1|Y1|
.....
|5|X5|Y5|

Стало
|1|X4|Y4|
.....
|3|X5|Y5|
|5|X2|Y2|
т.е. надо, чтобы 4-я стала 1-ой,  тогда 5-я станет2-ой, 3-я 5-ой и т.д.
Название: Re: Нужен алгоритм перенумеровки вершин замкнутой полилинии
Отправлено: Владимир Шу от 14-03-2021, 10:11:13
Сделай двойную коллекцию вершин и начни с нужной по счету.
Название: Re: Нужен алгоритм перенумеровки вершин замкнутой полилинии
Отправлено: Anatoly от 14-03-2021, 10:51:48
Сделал так.
Дано:
UB - верхняя граница массива (количество вершин)
Vold - прежний индекс вершины
Vnew- новый индекс вершины
delta =Vold-Vnew

Цикл по вершинам
Vnew текущ.=Vold текущ. - delta
Если Vnew текущ. <= 0 то Vnew текущ. = UB - ABS(Vnew текущ.)