drawnow

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

Синтаксис

drawnow
drawnow limitrate
drawnow nocallbacks
drawnow limitrate nocallbacks
drawnow update
drawnow expose

Описание

пример

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