Сплайн / Сглаживание

Добавьте пожалуйста в шаблоны сбора СПЛАЙН или ПОЛИГОН/ПОЛИЛИНИЯ СГЛАЖЕННАЯ. Сглаживание реализовано только для слоя, а необходимо еще уметь сглаживать отдельные объекты слоя.

А чем не устраивает команда Правка|Сгладить?

От части этим:
.exe (255 KB)

а вот так ведет себя сплайн:

Вставляйте перед сглаживанием с нужным шагом точки в контур объекта. Команда Правка>Добавить точки. Затем выполняйте сглаживание нужное число раз. Затем скопируйте объект в чистую карту, и запустите Карта>Генерализация, с указанием точности 0.1-0.2 мм. И получите красивый, сглаженный объект с небольшим числом точек.

Издеваетесь?

Ну так все вышеописанное не нужно делать с каждым объектом. Эти операции можно выполнить уже после сбора всех объектов нужного слоя. Со сплайнами Digitals работать не умеет, как, впрочем, и большинство ГИС. Все объекты заданы последовательностью координат, точки объектов соединяются отрезками. Это линейная интерполяция. Быстро, просто и реализовано в любом графическом движке.

Для сплайнов обычно используется кубическая интерполяция, с использованием контрольных точек кривой. Координаты этих точек, плюс параметры сплайна и хранят САПР программы, типа автокада. Тут уже не все так просто. Сплайны не поддерживаются большинством графических движков и большинством ГИС программ. При экспорте, например, в shp все сплайны придется преобразовывать в ломанные кривые.

Скажите откуда такая острая необходимость в сплайнах. Вы же наверняка не проектируете кузова автомобилей в Digitals? :slight_smile:

Сомневаетесь? :slight_smile:

Давайте рассмотрим на примере топографической съемки

Рисую край откоса по пикетам

полилиния по пикетам - 10 сек
+2 сек - правка/добавить точки, правка/сгладить
в результате узлов в объекте больше, отклонение на пикете - 2 м
Если не добавлять узлы, то сглаживание ничем не улучшает ситуацию, так как все равно имеем ломаную полилинию, а плюс ко всему еще получаем отклонение в 2 метра.

35 сек еще уходит на ручное редактирование - добавление и растаскивание узлов в нужных местах
+2 сек - сгладить
итого 45-50 сек

50 секунд уходит на то, чтобы отрисовать откос дугами (CTRL+A) при этом мне всегда нужно просчитывать промежуточные узлы, чтобы дуга формировалась как надобно и редактирования зачастую потом тоже необходимо
итого около 80 сек.

если тип слоя установить в полигон/полилиния (гладкая), время на сбор - 10 сек (как в первом случае), и отклонение на пикете тоже 2 м

Рисуя сплайном у меня уходит около 15 сек и нет никакого отклонения на пикете - линия проходит четенько там, где она и должна быть.

Отсюда видна разница?

И почему бы тогда по вашей координатной идеологии не сглаживать полилинию так, чтобы она визуально не съезжала с тех узлов, по которым собрана?
А чтобы не было проблем с последующим отображение и экспортом сплайна - я ж не против - можно сразу преобразовывать его в полилинию и включать тоже сглаживание :slight_smile: ну как в тех же вышеупомянутых САПР.

Это все равно, что выиграть войну не убив ни одного человека :slight_smile: Как же полилиния сгладится, если не изменять позиции ее узлов?

Вы забыли про Карта>Генерализация это уберет лишние точки.

Ну тогда прибавляйте еще секунд 15

Но ведь выиграть :wink:
example.exe (253 KB)

Пример хороший, спасибо :slight_smile: Снова вернулись к тому, с чего начали. В примере сплайн в автокаде, который строится по контрольным точкам. В Digitals же только координатная геометрия, никаких тебе сплайнов. Чтобы сделать простой скрипт, выполняющий описанные выше операции для сглаживания полилиний нужно, чтобы команда Карта>Генерализация работала не только для всей карты, но и лишь для помеченных объектов. И вынести эту команду в список функций скрипта, чтобы сразу задавать точность генерализации, минуя диалоговое окно. Тогда операцию сглаживания полилинии можно будет выполнять нажатием одной кнопки, контролируя процесс сглаживания шагом добавляемых точек и точностью генерализации.

Такой вариант устроит?

P.S. Номер этого сообщения 666. Осторожней отвечайте :slight_smile:

Так исходя их этого лучше доработать команду - СГЛАДИТЬ - чтобы она не смещала точки - а добавляла точки в виде аппроксимации полинома третьей степени (ИМХО - самым простым в данном случае и подходящим для этой задачи). :blush:

Я вместе с Вами праздновала Ваш 500 юбилей, теперь вместе с Вами попала под :open_mouth:

В примере не сплайн, а сглаживание полилинии - поэтому на 666 сообщение Вы имеете -1 жизнь :wink:

Меня устроит вариант, который будет адекватно срабатывать и занимать минимум времени :slight_smile:

Оптимальным был бы конечно же сплайн. Потому что элементарно хочется в процессе сбора видеть что у тебя получается, а не баловаться потом с редактированием объектов. В предложенном варианте я не вижу ничего нового, экспериментировать с N-ым количеством сглаживаний/добавлений и генерализаций - это не серьезно.

Опять таки пример:


Здесь синий - исходная полилиния, зеленый - сплайн, красный - результат сглаживания полилинии. Отличие на начальном и конечном сегментах между сглаживание и сплайном достигается изменением направления касательных. Как видно в середине объекта результат практически идентичный. А самое главное, что обе линии проходят через необходимые мне пикеты.

Понимаю, что сплайн Вас не устраивает. Поэтому давайте искать выход - чтобы и вам, и нам :slight_smile:

Не матюкайтесь! :slight_smile:
Треба знайти і почитати свої конспекти по вишмату…

Просто движение этих касательных и определяет вид сплайна и степень полинома и потом хранит эту формулу вмест с объектом (это что касается САПР - как Саша и говорил). Это абсолютно другая концепция хранения и представления данных - именно поэтому то - САПР, то ГИС, а это - Диджиталс :!:
Поэтому ИМХО - выход - это есть слой типа Полигон/полилиния (гладкая) - вот тут можно задавать - какой полином использовать при аппроксимации.
Плюс - при Правка - сгладить - иметь диалог в виде выбора - сплайн или не сплайн или ещё что-то - но потом приводить объект к табличному виду хранения данных в структуре DMF файла. Это единственное видимое решение со стороны НЕ разработчика. :blush: Прошу простить меня за мой дилетантский подход. :blush:

Я уже как то боролся с этим :slight_smile:
В итоге написал програмку для сглаживания линий не меняя узлов исходных объектов. Оно конечно не сплайн но линия становится “мягче”. Если интересует могу её положить сюда :slight_smile: Безвозмездно - тоесть дадом :laughing:

Уже заинтересовало :slight_smile:

Вот оно :slight_smile:
Принцип действия прост :slight_smile: Выделили объект нажали первую кнопочку. Появился новый сглаженый объект.

Если объект большой (100+ точек) жмем вторую кнопочку. Для того чтобы объект появился надо нажать - вырезать - вставить (сам не знаю почему оно так себя ведет :unamused: ).
Curve.exe (323 KB)

ВЕЩЬ!!!

Мне нравится :slight_smile: спасибо!