Skip to content

Фасад на углах, непрерывное рисование линий, заявка с разбором отказа и правки 26.09 - #91

Merged
MicNau merged 4 commits into
Mobilefrom
claude/shpuk-desktop-project-6hvyiy
Sep 26, 2026
Merged

MicNau merged 4 commits into
Mobilefrom
claude/shpuk-desktop-project-6hvyiy

Conversation

@MicNau

@MicNau MicNau commented Sep 26, 2026

Copy link
Copy Markdown
Owner

Четыре коммита: правки 26.09 (баги и изменения), запрет дорожкам проходить через дом и террасу, плюс два ранних — разбор отказа заявки и выгрузка запроса в файл.

Баги

Отделка заползала на соседнюю стену. Угловой столб — один меш на оба фасада угла, и красился он целиком. Теперь его геометрия один раз перекладывается по группам граней (_facadeFaceGroups: ±X, ±Z, прочие), и каждая грань берёт отделку той стены, в чьей плоскости лежит. В смету грань идёт половиной площади столба в свою отделку.

Незакрашенный уголок фронтона над угловым модулем. Это угловой столб на уровне карниза мансарды (0.2 м), и он не красился никогда: сбоку у него только пояс карниза, а тот сам не сегмент, фронтон и простенок касаются столба лишь торцами. Теперь грань в плоскости пояса следует за поясом (пояса красятся первыми), грань в плоскости фронтона — за фронтоном над столбом или простенком под ним.

Ступени при загрузке проекта. Заготовка ступеней (DEFAULT_STEPS_RECT) лежит в состоянии всегда и уходила в снимок, даже когда раздел не включали. Теперь ступени и ограждение пишутся, только если раздел включён. Проекты, сохранённые раньше, лишние ступени сохранят.

Коллизии грядок. Та же невидимая заготовка ступеней участвовала в проверке — грядка по умолчанию вставала прямо на неё и считалась «в коллизии» с самого начала. Теперь ступени мешают только при включённом разделе. Поворот грядки теперь тоже проверяется: вокруг центра, затем вокруг каждого угла; мешает везде — грядка остаётся как была, с подсказкой.

Изменения

  • Линии рисуются непрерывно. Каждый клик добавляет вершину; закончить — правой кнопкой (клик без протяжки; протяжка правой по-прежнему двигает вид), Esc или повторным кликом в последнюю точку — на телефоне правой кнопки нет. Клик по готовой точке, пока ничего не рисуем, только выделяет её. Во время рисования клик по точке соединяет с ней, начало своей линии замыкает контур. Меню браузера по правой кнопке над видом подавлено. Подсказки переписаны; редакция подсказки вошла в ключ памяти (D_HINT_REV), чтобы на телефоне новую увидели и те, кто видел старую.
  • Забор не проходит через дом и террасу (fenceSegBlocked): пересечение контуров и те же 3 м допуска, что у точек; при протяжке точка упирается.
  • Дорожка тоже не проходит через дом и террасу (pathSegBlocked), но подходит к ним вплотную — она к ним и ведёт. Проверяется только ось: заходит ли она внутрь контура. Полоса по ширине, легшая под стену или настил, по-прежнему не строится (pathLinesVisible) — это же выручает старые проекты с дорожкой насквозь.
  • Ступени по умолчанию той же фирмы и цвета, что доска террасы. Сперва товар из default_steps_id, если совпал; иначе поиск в каталоге ступеней по фирме (первое слово названия — поля производителя в API нет) и цвету; иначе default_steps_id как есть. Подбор идёт и при открытии раздела ступеней, попадает в смету, ручной выбор не перетирает. Каталог для подбора берётся без пользовательских фильтров (_ensureCatalogSection(id, {raw: true})) — «Пустотелая» у террасы отсекла бы полнотелые ступени.
  • Плашки размеров не лежат на объекте: прямоугольник подписан под своим экранным габаритом (у края кадра — над ним), отрезок — сбоку, со сдвигом поперёк линии.
  • «Высота террасы» вместо «Высота настила»; у террасы по умолчанию выбрана «Пустотелая».
  • Минимальная сторона террасы 1 м.
  • «Удалить всё» без окна подтверждения (заодно починена скобка: S.activeSteps = 0 сбрасывался при очистке любого раздела).
  • «Терраса у бассейна» скрыта из меню; код раздела оставлен, старые проекты открываются.
  • В заявке галочка согласия со ссылкой на политику компании; без неё «Отправить» заблокирована.

Заявка (ранние коммиты)

  • Причина отказа сервера показывается. Менеджер ресурсов выбрасывал тело ответа, пользователь видел «попробуйте ещё раз». Теперь окно показывает текст сервера, у 429 и 413 свои сообщения; если забракована только смета (calculation), заявка уходит повторно без неё.
  • Кнопка «Сохранить запрос в файл» после отказа: тело запроса как есть, ответ сервера и откуда отправляли.
  • В PROJECT_FORMAT.md уточнено: у кусков фронтона x бывает отрицательным (фронтон шире стены на свес кровли), требование неотрицательности относится только к y.

Не сделано — нужен бэкенд

Фильтры «Заполнение: Плетёные / Доски ДПК» у забора и «Вертикальная / Горизонтальная» у фасада: в API нет характеристик, по которым их отбирать.

Замеры

Одна стена под отделкой — у соседней грани угла полосы нет; у мансарды (type_10) угловой столб на уровне карниза окрашен вместе с фасадом. Дорожка: 4 клика — одна ломаная из 4 точек, правая кнопка заканчивает, клик по точке выделяет её, Delete удаляет. Забор и дорожка через дом — отказ с сообщением; дорожка к стене и к террасе вплотную, вдоль стены и мимо — можно; точка забора при протяжке упирается. Грядка по умолчанию больше не «в коллизии», поворот у соседа уходит на свободный угол. Ступени под доску TalverWood «Венге» — TalverWood «Венге» (а не «Серый» из default_steps_id), с ценой в смете; ручной выбор сохраняется. Терраса не меньше 1×1 м. Плашка террасы на 14 px ниже нижнего угла, ни одна ручка под ней. Без галочки согласия кнопка заблокирована. Ошибок консоли нет.

Cache-bust: state.js?v=75, canvas.js?v=65, viewer3d-core.js?v=161, editor3d.js?v=19, nav-desktop.js?v=137, nav-mobile.js?v=5, project-io.js?v=7, ResourceManager.js?v=12, styles-desktop.css?v=49, styles-mobile.css?v=3.

🤖 Generated with Claude Code

https://claude.ai/code/session_013c9N76tZZnqcQLUUSc5okD


Generated by Claude Code

Сервер присылает причину текстом, а менеджер ресурсов выбрасывал тело ответа и
возвращал null: пользователь видел «попробуйте ещё раз» и понять ничего не мог.
Теперь ответ разбирается, окно заявки показывает текст сервера, консоль — код и
тело; у 429 и 413 свои сообщения.

Если сервер забраковал именно calculation, заявка уходит повторно без него:
ссылка на проект — суть заявки, PDF со сметой — дополнение.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013c9N76tZZnqcQLUUSc5okD
Кнопка «Сохранить запрос в файл» появляется в окне заявки после отказа сервера:
в файле тело запроса как есть, ответ сервера (код 0 — ответа не было вовсе) и
откуда отправляли. Тело берётся из последней попытки, а не собирается заново.

Заодно нашлась причина отказа на больших проектах: у кусков фронтона координата
x отрицательная — треугольник фронтона шире своей стены на свес кровли с каждой
стороны (−300 … длина стены + 300). Геометрия верна, слишком строгой была
спецификация: требование неотрицательных координат относится только к y.
PROJECT_FORMAT.md поправлен.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013c9N76tZZnqcQLUUSc5okD
Фасад. Угловой столб — один меш на оба фасада угла и красился целиком, поэтому
отделка одной стены выходила на соседнюю. Теперь столб красится по граням:
грань берёт отделку стены, в чьей плоскости лежит. Столб на уровне карниза
мансарды не красился никогда (соседей-сегментов сбоку у него нет) — теперь
следует за поясом карниза и за фронтоном над ним.

Линии. Дорожка и забор рисуются непрерывно, до правой кнопки, Esc или повторного
клика в последнюю точку; клик по готовой точке только выделяет её. Забор не
проходит через дом и террасу и не подходит к ним ближе 3 м.

Коллизии грядок: невидимая заготовка ступеней больше не мешает, поворот
проверяется. Ступени без включённого раздела не попадают в снимок проекта.
Ступени по умолчанию подбираются той же фирмы и цвета, что доска террасы.

Мелочи: «Высота террасы», «Пустотелая» по умолчанию, терраса не меньше 1×1 м,
плашки размеров не закрывают ручки, «Удалить всё» без подтверждения, бассейн
скрыт из меню, галочка согласия в заявке.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013c9N76tZZnqcQLUUSc5okD
Как и забор, дорожка теперь не пересекает дом и террасу — и при рисовании, и
при протяжке точки. В отличие от забора, подходить к ним вплотную можно: дорожка
к ним и ведёт. Проверяется только ось — заходит ли она внутрь контура; полоса по
ширине, легшая под стену или настил, по-прежнему не строится.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013c9N76tZZnqcQLUUSc5okD
@MicNau
MicNau merged commit 37b51e0 into Mobile Sep 26, 2026
3 checks passed
@MicNau
MicNau deleted the claude/shpuk-desktop-project-6hvyiy branch September 26, 2026 19:11

This branch was successfully deployed

1 active deployment
github-pages — 784fb74f Deployed Sep 26, 2026 by MicNau via deploy #192
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants