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

Copyright 2015-2017 The MathWorks, Inc.

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

Copyright 2015 The MathWorks, Inc.

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

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

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

Copyright 2015 The MathWorks, Inc.

Больше о

свернуть все

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

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

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

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

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

Советы

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

Смотрите также

| |

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

Была ли эта тема полезной?