exponenta event banner

drawnow

Обновление цифр и обратные вызовы процессов

Описание

пример

drawnow обновляет рисунки и обрабатывает все отложенные обратные вызовы. Эта команда используется для изменения графических объектов и немедленного просмотра обновлений на экране.

пример

drawnow limitrate ограничивает число обновлений 20 кадрами в секунду. Если с момента последнего обновления прошло менее 50 миллисекунд или если средство визуализации графики занято предыдущим изменением, то drawnow отменяет новые обновления. Используйте эту команду, если выполняется обновление графических объектов в цикле без необходимости просмотра каждого обновления на экране. Пропуск обновлений может ускорить анимацию. Обработка ожидающих обратных вызовов позволяет взаимодействовать с фигурами во время анимации.

drawnow nocallbacks откладывает обратные вызовы, такие как ButtonDownFcn обратный вызов, до следующего полного drawnow команда. Этот параметр используется для предотвращения прерывания обратного вызова кода. Отложенные обратные вызовы временно отключают взаимодействие фигур, например щелчки мышью или изменение размера фигуры. Отложенные обратные вызовы не влияют на скорость анимации.

drawnow limitrate nocallbacks ограничивает число обновлений до 20 кадров в секунду и пропускает обновления, если средство визуализации занято. Этот синтаксис также предотвращает прерывание обратного вызова кода, что временно отключает взаимодействие фигур.

drawnow update пропускает обновления, если средство визуализации занято и откладывает обратные вызовы. Этот синтаксис не рекомендуется. Используйте limitrate вместо этого.

drawnow expose обновляет цифры, но откладывает обратные вызовы. Этот синтаксис не рекомендуется. Используйте nocallbacks вместо этого.

Примеры

свернуть все

Создайте анимацию роста линии по мере накопления 2000 точек данных. Использовать drawnow для отображения изменений на экране после каждой итерации в цикле.

h = animatedline;
axis([0 4*pi -1 1])
x = linspace(0,4*pi,2000);

for k = 1:length(x)
    y = sin(x(k));
    addpoints(h,x(k),y);
    drawnow
end

Создайте анимацию роста линии по мере накопления 10 000 точек. Поскольку существует 10 000 точек, рисование каждого обновления на экране происходит медленно. Создание более быстрой и плавной анимации путем ограничения числа обновлений с помощью drawnow limitrate. Затем выведите последние обновления на экран путем вызова drawnow после окончания цикла.

h = animatedline;
axis([0 4*pi -1 1])
x = linspace(0,4*pi,10000);

for k = 1:length(x)
    y = sin(x(k));
    addpoints(h,x(k),y);
    drawnow limitrate
end
drawnow

Вычислите все данные до цикла анимации.

h = animatedline;
axis([0 4*pi -1 1])
x = linspace(0,4*pi,10000);
y = sin(x);

for k = 1:length(x)
    addpoints(h,x(k),y(k));
    drawnow limitrate
end
drawnow

При длительных вычислениях предварительный расчет данных может повысить производительность. Предварительное вычисление минимизирует время вычислений, позволяя выполнять вычисления без перерывов. Кроме того, это помогает обеспечить плавность анимации, фокусируясь только на графическом коде в цикле анимации.

Подробнее

свернуть все

Действия, эквивалентные drawnow

Эти действия эквивалентны вызову полного drawnow команда:

  • Возврат к подсказке MATLAB ®.

  • Использование getframe, pause, и waitfor функции.

  • Использование функций, ожидающих ввода пользователем, таких как waitforbuttonpress, input, keyboard, или ginput.

Совет

  • nocallbacks параметр всегда добавляет прерывание обратных вызовов в очередь. Если вы хотите отменить прерывание обратных вызовов, то используйте Interruptible и BusyAction вместо этого свойства.

Представлен до R2006a