Подписи на линиях

Имеем длинную линию (газопровод или т.п.) Вдоль этой линии выставлены подписи. Добавляем с ctrl точку в конец линии и все подписи улетают :open_mouth: :cry:

Процитирую своё собственное письмо на help@vingeo.com от :exclamation: 15 декабря 2005г.


Имеется целый ряд давних “болезней” с подписями длин линий (и, очевидно, точек тоже). Тема не раз поднималась и на форуме.

  • Добавление/удаление узлов в полилинию

  • Разделение объекта в произвольном узле

  • Соединение двух объектов с подписями
    Фактически, после таких операций, подписи приходится просто удалять и создавать всё заново, что КРАЙНЕ неприятно, особенно для объектов с большим количеством узлов.
    В Инфо, естественно, мы видим не те длины, что на экране (по
    количеству сегментов полилинии, по крайней мере).

  • Редактирование положения узлов
    Синхронно сдвигаются все подписи одновременно, что тоже красоты не добавляет.

Программа, сохраняет положение подписей относительно центра объекта, и это вполне приемлимо в большинстве случаев.
Но в случае длин/номеров точек желательно сохранять позицию
конкретной i-той подписи относительно i-го сегмента/узла полилинии.
Ну или если не сохранять, то динамически обновлять с учетом этой специфики. Лишние/недостающие подписи, возникающие в процессе редактирования желательно автоматически удалять или вставлять.

Конец цитаты.
[/quote]

Как ни прискорбно - но эту немаловажную просьбу с успехом игнорируют.

Но все пришло к тому что это делать надо. На данный момент стала очень острая проблема стыковки и связки в одно целое большого количества планшетов, которые естественно рисуют разные люди.

И теряние часов на восстановление подписей, мягко говоря неприемлимо

К сожалению, проблема связана со способом, каким Дигитал хранит положение подписей. Если проанализировать формат файла dmf, то можно увидеть, что сохраняются не абсолютные координаты месположения подписей, а дельты, координаты относительно центра объектов. Естественно, при изменении формы объекта его центр пересчитывается, подписи “ползут”.
Такое положение вещей вобщем-то логично для полигонов, контуров зданий, для линейных же объектов приводит к вышеописаным проблемам.
Таким образом, надо менять формат, или хотя бы внутреннюю обработку подписей вести в абсолютных, а при записи/чтении возвращаться к принятой схеме. Словом, проблема. :frowning:

:exclamation: Однако , если говорить только о подписях длин линий и номеров точек, реализовать их правильную обработку можно и нужно чисто алгоритмически! Ведь каждому сегменту/узлу соответствует своя подпись, остается только их переставить требуемым образом при редактировании объекта(ов).

Категорически поддерживаю!
Сам не раз подымал эту давнюю проблему в разных темах!

В случае деления линии на части - подписи остаются на месте, слава Богу. При этом они, естественно, дублируются, оставаясь подписанными у обоих частей.
Это тоже не может не раздражать.

Проблема неоднозначная, конечно. Алгоритмизировать ее решение непросто. Нужно менять формат DMF-а…

Предлагаю хотя бы ввести настройку типа “Не перемещать подписи при редактировании узлов”

Алгоритм не так сложен как кажется. Речь (опять таки!) лишь о частном случае - параметрах -10, -9. С остальными все не так просто. :frowning:

Исходим из того, что нам доступно два состояния объекта - до и после изменения узла.

Тогда для предыдущего состояния объекта:

  • вычисляем и запоминаем для каждой подписи АБСОЛЮТНЫЕ координаты
  • запоминаем разницу поворота подписи и дир угла каждого сегмента (для длин линий, параметр -10)

Затем применяем к новому состоянию объекта:

  • для каждой подписи вычисляем новые относительные координаты
  • если изменился дир угол сегмента, вносим также разницу в поворот (для длин)

При добавлении/удалении узла принцип тот же, необходимо только учесть добавленую или удаленную подпись. Аналогично соединение/расчленение.

Такой подход позволит свести возню с подписями к минимуму. Основная часть подписей останется на своих местах. :slight_smile:

Слишком запутанное решение. Предлагаю так
При выделении объекта сохраняется его центр. После изменения все подписи смещаются обратно на дельту между старым и новым центром. Всё просто и эффективно. И в форматах ничиго меннять не надо. подписи которые будут на изменяемых сегментах я с удовольствием буду двигать сам.

Не пойдет! :slight_smile: Это как раз текущая реализация, именно так сейчас дигитал и действует.

Например, полилиния из двух сегментов, подписи длин линий:

          10           10
    o---------o*----------o

Изменяем узел:

              o
              |
10   *    10
              |
 о---------о

о узел
---- линия

  • цетр размаха

Идет. я проверял :slight_smile:
Просто надо учитывать изменяемый сегмент или нет. На изменяемых естественно надо доворачивать и передвигать руками. на статических всё будет стоять на своих местах

Нет. Так как раз Digitals не действует. При изменении центра размаха объекта положение подписей не пересчитывается, а так как позиции подписей -это не абсолютные координаты, а смещения относительно центра размаха объекта, то при этом и происходит смещение подписей.

На мой взгляд самое простое и эффективное решение предложил Dkrav. Хотя конечно, в идеале, неплохо бы ввести понятие “якоря” для подписей, который мог бы цеплятся не только к центру размаха объекта но и к каждому сегменту/узлу.

Хм.. Ну собственно я выше об этом и написал, а потом сам себя перехитрил в процессе полемики. :slight_smile:
ОК, вносим дельту, остальное поправим руками.

Пересчет позиций подписей при редактировании точек объекта уже работает. Теперь подписи остаются на своих местах и не сползают при добавлении/удалении точек. Скачивайте новую версию.