drawnow

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

Описание

пример

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

пример

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

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

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

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

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

Примеры

свернуть все

Создайте анимацию линии, растущей, когда это накапливает 2 000 точек данных. Используйте 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