Определенные свойства имеют зависимости от значения других свойств. MATLAB® автоматически вычисляет значения этих свойств и обновляет их значения на основе текущей графической модели. Для примера пределов по осям влияют на значения, используемые для меток деления на оси, что, в свою очередь, влияет на метки метки деления на оси.
Когда вы запрашиваете вычисляемое свойство, MATLAB выполняет неявное drawnow
чтобы убедиться, что все значения свойств актуальны перед возвращением значения свойства. Запрос вызывает полное обновление всех зависимых свойств и обновление экрана.
MATLAB вычисляет значения определенных свойств на основе других значений, от которых зависит это свойство. Для примера функций построения графика автоматически создайте ось с пределами по осям, тактам метками и размером, соответствующим нанесенным на график данным и размеру фигуры.
MATLAB при необходимости графика выполняет полное обновление перед возвратом значения из вычисляемого свойства, чтобы убедиться, что возвращаемое значение актуально.
Объект | Автоматически вычисляемые свойства |
---|---|
Оси |
|
| |
| |
| |
| |
| |
Текст |
|
Когда вы задаете значения свойств, вы изменяете состояние графической модели и помечаете его как нуждающийся в обновлении. Когда вы запрашиваете свойство autocalculed, 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
.