Сейчас в рисовалке нет понятия частичного изменения координат. Система пытается пересчитать вершины всех профилей и заполнений на каждое событие mousemove или arrowkeydown. Естественно, не успевает, даже при оптимальных справочниках, не говоря про справочники реальных пользователей. Негативных последствий много:
отрывы угловых и Т-соединений
потери заполнений, перескоки створок
ухудшение эргономики, дёрганье фрагментов изделия
неадекватная работа undo-redo
сложный и непригодный для отладки жизненный цикл пересчета изделия с таймерами внутри
Принято решение, добавить схеме изделия состояние скелетон, а редактирование координат выполнять в два этапа: манипуляции мышью и клавиатурой должны деформировать не само изделие, а его скелет. Координаты скелета даже с тысячей вершин, легко пересчитать за единицы миллисекунд (против сотен миллисекунд полного пересчета изделия). При этом, деформации можно сделать умнее, учесть границы и min-max размеры заполнений и профилей.
Кроме улучшения эргономики редактирования, получаем:
линейный алгоритм пересчета координат и спецификации без таймеров - это реально важно
безотказное undo-redo с именованными событиями
поведение рисовалки станет ближе к ожиданиям пользователей
Сейчас в рисовалке нет понятия частичного изменения координат. Система пытается пересчитать вершины всех профилей и заполнений на каждое событие mousemove или arrowkeydown. Естественно, не успевает, даже при оптимальных справочниках, не говоря про справочники реальных пользователей. Негативных последствий много:
Принято решение, добавить схеме изделия состояние
скелетон
, а редактирование координат выполнять в два этапа: манипуляции мышью и клавиатурой должны деформировать не само изделие, а его скелет. Координаты скелета даже с тысячей вершин, легко пересчитать за единицы миллисекунд (против сотен миллисекунд полного пересчета изделия). При этом, деформации можно сделать умнее, учесть границы и min-max размеры заполнений и профилей. Кроме улучшения эргономики редактирования, получаем: