Доступ к значениям свойств

Свойства объектов и запись через точку

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

h = plot(1:10);

h относится к линии, проведенной в графике значений 1 - 10.

Dot notation является новым синтаксисом, чтобы получить доступ к свойствам объектов, запускающимся в R2014b. Этот синтаксис использует переменную объекта и чувствительное к регистру имя свойства, соединенное с точкой (.), чтобы сформировать объектное точечное обозначение имени свойства:

объект.

Если переменная объекта является нескалярной, используйте индексацию, чтобы относиться к отдельному объекту:

объект (n).PropertyName

Скалярная переменная объекта

Если h является строкой, созданной функцией plot, выражение, h.Color является значением свойства Color этой конкретной строки:

h.Color
ans =

         0    0.4470    0.7410

Если вы присваиваете значение цвета переменной:

c = h.Color;

Переменная c является двойным.

whos
  Name      Size            Bytes  Class  

  c         1x3                24  double   
  h         1x1               112  matlab.graphics.chart.primitive.Line 

Можно изменить значение свойства Color этой строки с оператором присваивания:

h.Color = [0 0 1];

Используйте ссылки свойства записи через точку в выражениях:

meanY = mean(h.YData);

Или изменить значение свойства:

h.LineWidth = h.LineWidth + 0.5;

Сошлитесь на другие объекты, содержавшиеся в свойствах с несколькими точечными ссылками:

h.Annotation.LegendInformation.IconDisplayStyle
ans =

on

Установите свойства объектов, содержавшихся в свойствах:

ax = gca;
ax.Title.FontWeight = 'normal';

Нескалярная переменная объекта

Графические функции могут возвратить массив объектов. Например:

y = rand(5);
h = plot(y);
size(h)
ans =

     5     1

Доступ к строке, представляющей первый столбец в y с помощью индекса массива:

h(1).LineStyle = '--';

Используйте функцию set, чтобы установить LineStyle всех строк в массиве:

set(h,'LineStyle','--')

Добавление данных к значениям свойств

С записью через точку можно использовать индексацию “конца”, чтобы добавить данные к свойствам, которые содержат массивы данных, такие как строка XData и YData. Например, этот код обновляет строку XData и YData вместе, чтобы вырастить строку. Необходимо гарантировать размер x-строки, и y-данные являются тем же самым прежде, чем представить с вызовом drawnow или возвратиться к подсказке MATLAB®.

h = plot(1:10);
for k = 1:5
   h.XData(end + 1) = h.XData(end) + k;
   h.YData(end + 1) = h.YData(end) + k;
   drawnow
end

Переменные графического объекта являются указателями

Переменными объекта, возвращенными графическими функциями, является handles. Указатели являются ссылками на фактические объекты. Переменные объекта, которые являются указателями, ведут себя в особенных методах, когда скопировано и когда объект удален.

Копирование переменной объекта

Например, создайте график с одной строкой:

h = plot(1:10);

Теперь скопируйте переменную объекта в другую переменную и установите значение свойства с новой переменной объекта:

h2 = h;
h2.Color = [1,0,0]

При присвоении переменной объекта h h2 создает копию указателя, но не объект, упомянутый переменной. Значение свойства Color, к которому получают доступ от переменной h, эквивалентно, который получил доступ от переменной h2.

h.Color
ans =

     1     0     0

h и h2 относятся к тому же объекту. Копирование переменной объекта указателя не копирует объект.

Удаление переменных объекта

Существует теперь две переменные объекта в рабочей области, которые относятся к той же строке.

whos
  Name      Size            Bytes  Class                
  h         1x1               112  matlab.graphics.chart.primitive.Line
  h2        1x1               112  matlab.graphics.chart.primitive.Line

Теперь закройте фигуру, содержащую линейный график:

close gcf

Объект линии больше не существует, но переменные объекта, которые упомянули строку, действительно все еще существуют:

whos
  Name      Size            Bytes  Class                
  h         1x1               112  matlab.graphics.chart.primitive.Line
  h2        1x1               112  matlab.graphics.chart.primitive.Line

Однако переменные объекта больше не действительны:

h.Color
Invalid or deleted object.
h2.Color = 'blue'
Invalid or deleted object.

Чтобы удалить переменные недопустимого объекта, используйте clear:

clear h h2

Список свойств объектов

Чтобы увидеть свойства, содержащиеся в объекте, используйте функцию get:

get(h)

MATLAB возвращает список свойств объектов и их текущих значений:

    AlignVertexCenters: 'off'
            Annotation: [1x1 matlab.graphics.eventdata.Annotation]
          BeingDeleted: 'off'
            BusyAction: 'queue'
         ButtonDownFcn: ''
              Children: []
              Clipping: 'on'
                 Color: [0 0.4470 0.7410]
...
             LineStyle: '-'
             LineWidth: 0.5000
                Marker: 'none'
...

Вы видите значения для свойств с перечислимым набором возможных значений с помощью функции set:

set(h,'LineStyle')
    '-'
    '--'
    ':'
    '-.'
    'none'

Чтобы отобразить все устанавливаемые свойства включая возможные значения для свойств с перечислимым множеством значений, используйте set с переменной объекта:

set(h)

Изменение свойств с набором и добирается

Можно также получить доступ и изменить свойства с помощью функций get и set.

Базовый синтаксис для того, чтобы установить значение свойства на существующем объекте:

set(object,'PropertyName',NewPropertyValue)

Чтобы запросить текущее значение свойства конкретного объекта, используйте оператор формы:

returned_value = get(object,'PropertyName');

Имена свойства всегда являются векторами символов. Можно использовать одинарные кавычки или переменную, которая является вектором символов. Значения свойств зависят от конкретного свойства.

Много Операции Объекта/Свойства

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

y = rand(5);
h = plot(y);

Установите все строки на красный:

set(h,'Color','red')

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

view1.CameraViewAngleMode = 'manual';
view1.DataAspectRatio = [1 1 1];
view1.Projection = 'Perspective';

Чтобы установить эти значения на текущей системе координат, введите:

set(gca,view1)

Query Multiple Properties

Можно задать массив ячеек имен свойства и использовать его, чтобы получить значения для тех свойств. Например, предположите, что вы хотите запросить значения свойств “режима камеры” осей. Во-первых, задайте массив ячеек:

camModes = {'CameraPositionMode','CameraTargetMode',...
'CameraUpVectorMode','CameraViewAngleMode'};

Используйте этот массив ячеек в качестве аргумента, чтобы получить текущие значения этих свойств:

get(gca,camModes)
ans = 
     'auto' 'auto' 'auto' 'auto'