Skip to content

Жизненный цикл изделия в рисовалке

Evgeniy Malyarov edited this page Jan 16, 2017 · 6 revisions

Рассмотрим метод redraw() объекта Scheme. Этот метод перерисовывает все контуры изделия. Не занимается привязкой узлов. Предполагается, что взаимное перемещение профилей уже обработано

Первое замечание: когда графический движок рисует изделие, координаты вершин профилей не меняются.
Мы задали их заранее явно в таблице Координаты, либо с помощью некого Инструмента.
Еще раз, то же самое другими словами: Метод redraw() - довольно тупой. Чтобы получить корректный эскиз, надо позаботиться о правильных координатах элементов

  • Браузер с некоторой периодичностью генерирует событие requestAnimationFrame. Если страница не нагружена тяжелыми вычислениями, это событие возникает 60 раз в секунду. Если страница занята занята расчетами цены, спецификации и прочими обработками событий, requestAnimationFrame возникает реже - мы наблюдаем так называемые лаги. Scheme подписывается на requestAnimationFrame своим методом redraw() и внутри этого метода:

  • Для каждого рамного контура, вызывает его метод redraw(). Контур должен сам позаботиться о своих профилях, заполнениях и вложенных контурах

Второе замечание: Scheme не рисует профили, размерные линии и заполнения, а только отдаёт приказы сделать это своим контурам

  • Когда перерисованы все контуры изделия
    • Еще раз пробегает по рамным контурам и перерисовывает их размерные линии
    • Перерисовывает габаритные и пользовательские размерные линии изделия

В методе redraw() изделия больше ничего нет. Опускаемся на уровень ниже

Перерисовка контура

Mетод redraw() объекта Contour выполняет следующие действия:

  • Сбрасывает кеш габаритов контура
  • Чистит визуализацию
  • Пробегает по всем профилям контура и вызывает их метод redraw() - на этом шаге мы имеем каркас из профилей без заполнений
  • Ищет замкнутые области. В них могут располагаться вложенные створки или заполнения. Если обнаружена новая замкнутая область, в неё вставляется заполнение с параметрами по умолчанию для системы
  • Если текущий контур является вложенным, рисует направление открывания
  • Вызывает метод redraw() вложенных контуров
  • Излучает событие contour_redrawed, за которым могут следить инструменты и прочие внешние обработчики

Третье замечание: Contour не рисует профили и заполнения, а только отдаёт приказы сделать это своим элементам

В методе redraw() контура больше ничего нет. Опускаемся на уровень ниже

Перерисовка элемента профиля

Clone this wiki locally