Некоторые свойства зависят от значения других свойств. MATLAB ® автоматически вычисляет значения этих свойств и обновляет их на основе текущей графической модели. Например, ограничения осей влияют на значения, используемые для засечек осей, которые, в свою очередь, влияют на метки засечек осей .
При запросе вычисляемого свойства MATLAB выполняет неявное drawnow для обеспечения актуальности всех значений свойств перед возвратом значения свойства. Запрос вызывает полное обновление всех зависимых свойств и обновление экрана.
MATLAB вычисляет значения определенных свойств на основе других значений, от которых зависит это свойство. Например, функции печати автоматически создают оси с предельными значениями осей, метками засечек и размером, соответствующим данным печати и размеру фигуры.
При необходимости графика MATLAB выполняет полное обновление перед возвратом значения из вычисляемого свойства, чтобы убедиться, что возвращенное значение является актуальным.
| Объект | Автоматически вычисляемые свойства |
|---|---|
Оси |
|
| |
| |
| |
| |
| |
Текст |
|
При задании значений свойств изменяется состояние графической модели и помечается как требующая обновления. При запросе автоматически вычисленного свойства MATLAB необходимо выполнить обновление, если графическая модель и графическое оборудование не синхронизированы.
При получении и установке свойств в одном цикле можно создать ситуацию, когда обновления выполняются с каждым проходом через цикл.
get вызывает обновление.
set помечает графическую модель как требующую обновления.
Цикл повторяется с каждым прохождением через петлю. Лучше выполнять все запросы свойств в одном цикле, а затем выполнять все наборы свойств в другом цикле, как показано в следующем примере.
Этот пример получает и задает текст Extent собственность.
| Код с низкой производительностью | Код с более высокой производительностью |
|---|---|
h = gobjects(1,500); p = zeros(500,3); for ix = 1:500 h(ix) = text(ix/500,ix/500,num2str(ix)); end drawnow % Gets and sets in the same loop, % prompting a full update at each pass for ix = 1:500 pos = get(h(ix),'Position'); ext = get(h(ix),'Extent'); p(ix,:) = [pos(1)+(ext(3)+ext(1)), ... pos(2)+ext(2)+ext(4),0]; set(h(ix),'Position',p(ix,:)) end drawnow | h = gobjects(1,500); p = zeros(500,3); for ix = 1:500 h(ix) = text(ix/500,ix/500,num2str(ix)); end drawnow % Get and save property values for ix=1:500 pos = get(h(ix),'Position'); ext = get(h(ix),'Extent'); p(ix,:) = [pos(1)+(ext(3)+ext(1)), ... pos(2)+ext(2)+ext(4),0]; end % Set the property values and % call a drawnow after the loop for ix=1:500 set(h(ix),'Position',p(ix,:)); end drawnow |
Этот код работает плохо, поскольку:
| Производительность выше, поскольку этот код:
|
Extent поворот метокВ случаях изменения текста Extent свойство для поворота меток осей, более эффективно использовать свойства осей XTickLabelRotation, YTickLabelRotation, и ZTickLabelRotation.