Трасса: предпросмотр и создание
Трасса — несколько участков одной операцией: от узла, врезки в трубу или пустого места через изломы до узла, трубы или нового узла. Перед записью окно «Новая трасса» показывает участки, длины, врезки и результат проверок.
Возможности
- Начало и конец трассы — узел сети, врезка в трубу (труба разрезается, в точке врезки появляется узел) или пустое место (там создаётся новый узел выбранного на панели типа).
- Изломы между ними — промежуточные точки участка. Щелчок по узлу или трубе завершает трассу, в пустом месте её завершает Enter или двойной щелчок.
- Режим трубы на панели: «Двухтрубная, общая» (одна запись на подачу и обратку), «П и О раздельно» (две трубы с общей трассой), «Только подача», «Только обратка».
- Привязки: к узлам и трубам, к направлению соседней трубы (∥ и ⊥), к шагу угла; с масштаба 15 — к контурам зданий и осям улиц подложки. Shift — строго 90°, Alt — без привязок.
- Ввод с клавиатуры во время рисования: цифры — длина отрезка, Tab — угол, Enter — завершить, Backspace — убрать последнюю точку, Esc — сбросить, G — точка по координатам.
- Окно «Новая трасса» до записи: участки с признаком и длиной, врезки, фрагмент, источник паспорта, ошибки и предупреждения.
Как это работает
Предпросмотр без записи. Enter отправляет трассу на сервер с признаком dry_run: сервер проверяет точки, считает длины и откатывает транзакцию. Окно «Новая трасса» показывает этот отчёт; номера объектов в нём условные. Предпросмотр работает и при выключенной на сервере правке.
Запись — одна операция. «Создать» отправляет ту же трассу без dry_run. Все узлы (nodes), участки (linesobj), паспорта труб (heatpipesections) и разрезы труб при врезке записываются в одной транзакции и одной записью журнала отмены (операция «Трасса»). Ctrl+Z убирает всю трассу целиком.
Длины и признаки. Длина участка считается по местной системе координат (SRID 9998), как в десктопе, а не по сфере. Признак трубы: «общий» в двухтрубном режиме, «подающий» и «обратный» в остальных; в режиме «П и О раздельно» на каждый отрезок создаются две трубы с одной геометрией.
Паспорт. Копируется с участка, примыкающего к тем же узлам, иначе с ближайшего в радиусе 300 м; если рядом ничего нет — умолчания таблицы. Новые узлы получают код от ближайшего узла.
Проверки. Сервер не даст создать участок короче 0,1 м, трассу больше 500 точек, трассу с концами в разных фрагментах. Точка ближе 0,3 м к узлу становится этим узлом. При врезке труба режется, паспорт и оборудование переходят на половины. После записи открывается «Проверка после правки».
Что нужно для работы
- Право создавать участки; для нового конечного узла — право создавать узлы его вида (потребитель — «потребители», источник — «источники»); для врезки — право перемещать участки.
- Флаги API
MUTATIONS_ENABLEDиTOPOLOGY_MUTATIONS_ENABLED. - Фрагмент новых объектов: если на карте несколько фрагментов, выберите его на панели или начните трассу от узла или трубы.
Шаги
Включите редактор и инструмент «Трасса» (L). На панели выберите режим трубы («Двухтрубная, общая», «П и О раздельно», «Только подача», «Только обратка») и тип конечного узла — здесь «Потребитель». Кнопка с домиком включает и выключает привязку к зданиям подложки.

Щёлкните по трубе — начало трассы станет врезкой. Дальше ставьте изломы щелчками. Строка состояния внизу подсказывает следующий шаг, у курсора — длина и поворот отрезка.

Последнюю точку в пустом месте поставьте щелчком и нажмите Enter (или дважды щёлкните). Откроется окно предпросмотра: участки с признаком и длиной, врезка, фрагмент, результат проверок; плашка сверху напоминает, что карточка потребителя создастся вместе с трассой. «Назад к трассе» — дорисовать, «Сбросить трассу» — отказаться.

«Создать» записывает трассу одной операцией. Уведомление показывает, сколько участков и узлов создано, общую длину и врезку; в нём же — «Отменить». Сразу открывается панель проверки связности.

Примеры
На копии базы Алматы, фрагмент 74:
- Трасса «пусто → излом → пусто» из трёх щелчков: один участок 244,44 м, признак «общий», два новых узла. Сферическое расстояние по тем же точкам отличается от длины в базе меньше чем на 1 % — длина в базе по местной системе.
- Трасса из двух точек в 150 м восточнее: предпросмотр — один участок 123,82 м, паспорт с ближайшего участка в радиусе 300 м.
- На кадрах трасса начата врезкой в подготовленный участок и закончена новым узлом-потребителем: врезка разрезает трубу, на её месте появляется узел.
Если не получается
- «Щёлкните узел или трубу — трасса будет в их фрагменте…» — на карте несколько фрагментов: выберите фрагмент новых объектов на панели редактора или начните трассу от узла или трубы.
- Окно «Новая трасса» с красными пунктами — трасса не прошла проверку: «Назад к трассе», Backspace убирает последнюю точку.
- Точка встала не туда, куда щёлкнули, — сработала привязка к узлу, трубе или зданию. Alt при щелчке — без привязок; привязку к зданиям выключает кнопка с домиком.
- «Сначала завершите рисование или измерение» — закройте панель «Измерения».
- Трасса легла не туда — привязка к зданиям подложки сдвигает точку к контуру. Выключите её кнопкой с домиком на панели или держите Alt.
- Ошибка при записи при пройденном предпросмотре — кто-то успел изменить трубу врезки (конфликт версий): обновите карту и нарисуйте трассу заново.
Для разработчика
POST /api/v1/topology/chains—{points: [{kind: node|tap|new|vertex, lng, lat, node_id?, line_id?, node_type?}], pipe_mode: common|pair|supply|return, fileid, dry_run, versions}→created_nodes,created_lines,segments,taps,total_length_m,issues,operation_id. 422validation— ошибки трассы, 409fragment_required— не выбран фрагмент.- Сервер:
database/topology_cad.py(create_chain, константыALMOST_NODE_M,MIN_LINE_LENGTH_M,MAX_CHAIN_POINTS), паспорт —_create_line_passportвdatabase/topology.py. - Веб:
composables/useTraceDraw.ts(точки, ввод длины и угла),composables/useSnapIndex.tsиGET /api/v1/topology/snap-data(привязка),composables/useContextSnap.ts(здания и улицы),components/ChainPreviewDialog.vue. - Тесты:
tests/utils/cadSnap.spec.ts,tests/composables/useContextSnap.spec.ts, APItests/test_cad_topology.py; e2e — первый тестe2e/functions/network-editor.spec.tsсверяет геометрию, узлы, длину и тип через API.
