Получение значений и установка значений свойств

Автоматически вычисляемые свойства

Определенные свойства имеют зависимости от значения других свойств. MATLAB® автоматически вычисляет значения этих свойств и обновляет их значения на основе текущей графической модели. Например, пределы по осям влияют на значения, используемые для меток деления на оси, которые, в свою очередь, влияют на метки метки деления на оси.

Когда вы запрашиваете расчетное свойство, MATLAB выполняет неявный drawnow, чтобы гарантировать, что все значения свойств актуальны прежде, чем возвратить значение свойства. Запрос вызывает полное обновление всех зависимых свойств и обновление экрана.

MATLAB вычисляет значения определенных свойств на основе других значений, от которых зависит то свойство. Например, функции построения графика автоматически создают оси с пределами по осям, метками в виде галочки и размером, подходящим для отображенных на графике данных и размера фигуры.

Графика MATLAB выполняет полное обновление, при необходимости, прежде, чем возвратить значение из расчетного свойства гарантировать, что возвращенное значение актуально.

ОбъектАвтоматически вычисляемые свойства

Оси

CameraPosition, CameraTarget, CameraUpVector, CameraViewAngle

 

Position, OuterPosition, TightInset

 

'XLim', 'YLim', 'ZLim'

 

XTick, YTick, ZTick, XMinorTick, YMinorTick, ZMinorTick

 

XTickLabel, YTickLabel, ZTickLabel, TickDir

 

SortMethod

Текст

Extent

Неэффективные циклы получения и установки свойств

Когда вы устанавливаете значения свойств, вы изменяете состояние графической модели и отмечаете его как бывший должный быть обновленными. Когда вы запрашиваете автоматически вычисленное свойство, 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 зависит от других значений, таких как разрешение экрана, размер фигуры и пределы по осям, так запрос этого свойства может вызвать полное обновление.

  • Каждый набор свойства Position делает полное обновление необходимым, когда следующие добираются свойства Extent, происходит.

Производительность лучше потому что этот код:

  • Запросы все значения свойств в одном цикле и хранилищах эти значения в массиве.

  • Наборы все значения свойств в отдельном цикле.

  • Вызовы drawnow после второго цикла заканчиваются.

Изменение текстовой степени, чтобы вращать метки

В случаях, где вы изменяете текстовое свойство Extent вращать метки осей, более эффективно использовать свойства XTickLabelRotation осей, YTickLabelRotation и ZTickLabelRotation.

Для просмотра документации необходимо авторизоваться на сайте