-
Notifications
You must be signed in to change notification settings - Fork 19
Жизненный цикл изделия в рисовалке
Рассмотрим метод redraw()
объекта Scheme. Этот метод перерисовывает все контуры изделия. Не занимается привязкой узлов. Предполагается, что взаимное перемещение профилей уже обработано
Первое замечание: когда графический движок рисует изделие, координаты вершин профилей не меняются.
Мы задали их заранее явно в таблицеКоординаты
, либо с помощью некогоИнструмента
.
Еще раз, то же самое другими словами: Методredraw()
- довольно тупой. Чтобы получить корректный эскиз, надо позаботиться о правильных координатах элементов
-
Браузер с некоторой периодичностью генерирует событие
requestAnimationFrame
. Если страница не нагружена тяжелыми вычислениями, это событие возникает 60 раз в секунду. Если страница занята занята расчетами цены, спецификации и прочими обработками событий,requestAnimationFrame
возникает реже - мы наблюдаем так называемыелаги
. Scheme подписывается наrequestAnimationFrame
своим методомredraw()
и внутри этого метода: -
Для каждого рамного контура, вызывает его метод
redraw()
. Контур должен сам позаботиться о своих профилях, заполнениях и вложенных контурах
Второе замечание:
Scheme
не рисует профили, размерные линии и заполнения, а только отдаёт приказы сделать это своим контурам
- Когда перерисованы все контуры изделия
- Еще раз пробегает по рамным контурам и перерисовывает их размерные линии
- Перерисовывает
габаритные
ипользовательские
размерные линии изделия
В методе redraw()
изделия больше ничего нет. Опускаемся на уровень ниже
Mетод redraw()
объекта Contour выполняет следующие действия:
- Сбрасывает кеш габаритов контура
- Чистит визуализацию
- Пробегает по всем профилям контура и вызывает их метод
redraw()
- на этом шаге мы имеем каркас из профилей без заполнений - Ищет замкнутые области. В них могут располагаться вложенные створки или заполнения. Если обнаружена новая замкнутая область, в неё вставляется заполнение с параметрами по умолчанию для системы
- Если текущий контур является вложенным, рисует направление открывания
- Вызывает метод
redraw()
вложенных контуров - Излучает событие
contour_redrawed
, за которым могут следить инструменты и прочие внешние обработчики
Третье замечание:
Contour
не рисует профили и заполнения, а только отдаёт приказы сделать это своим элементам
В методе redraw()
контура больше ничего нет. Опускаемся на уровень ниже