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.

Совет

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

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