- •Санкт-Петербургский государственный электротехнический университет
- •______________________________________________________________________ Кафедра моэвм
- •Санкт-Петербург
- •2007 Введение
- •Взаимодействие между пользователем и компьютером
- •Основные принципы создания интерфейса
- •Проектирование эргономичного интерфейса
- •Размещение информации на экране
- •Использование цвета
- •Выделение элементов интерфейса
- •Непротиворечивость и стандартизация
- •Отображение текстовой информации
- •Ввод текстовой информации
- •Дизайн заголовков и полей
- •Средства управления графическим интерфейсом
- •Принципы создания и проектирования меню
- •5. Дескрипторная графика
- •5.1. Назначение дескрипторной графики
- •5.2. Иерархия графических объектов
- •5.3. Текущий графический объект; указатели на объекты
- •5.4. Доступ к значениям свойств графических объектов
- •5.5. Свойства осей
- •5.6. Свойства графических окон
- •5.6.1. Расположение и вид графических окон
- •5.6.2. Способы графического вывода
- •5.6.3. Цветовая палитра
- •5.6.4. Печать графического окна
- •5.7. Базовые графические объекты.
- •5.7.1. Текстовый объект, вывод текста и математических формул в графическое окно.
- •5.7.2. Размещение текстового объекта, определение его размеров и положения.
- •5.7.3. Размещение текста на трехмерных графиках.
- •5.7.4. Изменение вида текстового объекта.
- •5.7.5. Указание положения текстового объекта и надписи при помощи свойств. Пример: "бегущая строка".
- •5.7.6. Вывод многострочного текста.
- •5.7.7. Примечание про логическое индексирование.
- •5.7.8. Заголовок и подписи осей это текстовые объекты, потомки осей.
- •6. Приложения с gui
- •6.1. Создание приложения hello в среде guide
- •6.2. Запуск приложения без среды guide и редактирование
- •6.3. Как работает приложение, созданное в среде guide?
- •7. Заключение
5.7.6. Вывод многострочного текста.
Для получения многострочного текста следует задавать желаемый текст массивом строк, либо массивом ячеек, каждая ячейка которого содержит одну строку текста.
Предположим, мы хотим разместить на осях в точке с координатами (0.5, 0.5) текст так, как показано на следующем рисунке:
С использованием массива ячеек это можно сделать следующим образом (для создания массива ячеек применяются фигурные скобки):
figure
axes
str = {'first line'; 'second line'; 'third line'};
hT = text(0.5, 0.5, str, 'FontSize', 20)
Разумеется, можно было не создавать специальной переменной str, а сразу использовать массив ячеек при создании текстового ообъекта:
hT = text(0.5, 0.5, {'first line'; 'second line'; 'third line'}, 'FontSize', 20)
Вместо массива ячеек можно задействовать массив строк, который создается из отдельных строк или строковых переменных при помощи функции char (она автоматически добавляет в конец каждой строки пробелы так, чтобы образующие массив строки оказались равной длины):
figure
axes
str = char('first line', 'second line', 'third line')
hT = text(0.5, 0.5, str, 'FontSize', 20)
В двух примерах, приведенных выше, создавался один текстовый объект, указатель на который записывался в переменную hT. Если в качестве координат текста указать векторы, длина которых совпадает с числом строк многострочного текста, то получится столько текстовых объектов, сколько строк в тексте:
figure
axes
str = {'first text object'; 'second text object'; 'third text object'}
hTT = text([0.1 0.3 0.5], [0.2 0.4 0.6], str, 'FontSize', 20)
Теперь hTT является вектором указателей на три текстовых объекта, свойства которых можно изменять независимо, например:
set(hTT(1), 'Color', 'r', 'FontWeight', 'bold')
set(hTT(2), 'BackgroundColor', 'y', 'Color','b')
set(hTT(3), 'EdgeColor', 'm', 'LineWidth',5)
Аналогичным образом можно использовать массив строк для создания нескольких текстовых объектов при помощи одной функции text. Кроме того, допускается использование символа вертикальной черты | в качестве разделителя строк. Т.е. в приведенном выше примере вместо str = {'first text object'; 'second text object'; 'third text object'} можно было написать:
str = char('first text object','second text object', 'third text object')
или
str = 'first text object|second text object|third text object'
и результат был бы тем же самым.
Приведем пример, в котором на оси выводится матрица
следующим образом:
Сначала создается двумерный массив M, в который заносятся заданные элементы матрицы. Затем при помощи функции size в переменные m и n записывается число его строк и столбцов. Далее в графическом окне располагаются оси со следующими свойствами: пределы по оси абсцисс от 0 до n+1, по оси ординат - от 0 до m+1, подписи осей совпадают с номерами строк и столбцов, ось абсцисс расположена сверху, а ось ординат направлена вниз. Далее в цикле проходим по столбцам матрицы. На каждом шаге цикла текущий столбец числовых значений матрицы преобразуем в массив строк функцией num2str и создаем столько текстовых объектов, сколько элементов в столбце (т.е. столько, сколько строк в матрице). Массив строк указываем в функции text для создания текстовых объектов и записываем указатели на полученные объекты в соответствующие позиции двумерного массива указателей hT.
M = [1 2 3 4; 5 6 7 8; 9 10 11 12]
[m, n] = size(M);
figure
axes('XLim', [0 n+1], 'YLim', [0 m+1],...
'XTick', 1:n, 'YTick', 1:m,...
'YDir', 'reverse', 'XAxisLocation', 'top')
hT = zeros(m, n)
for j=1:n
C = M(:, j)
hT(:, j) = text(j*ones(1, m), 1:m, num2str(C),...
'HorizontalAlignment', 'center', 'FontSize', 30)
end
В результате на оси выводится матрица и в двумерный массив hT заносятся указатели на все созданные текстовые объекты. Этот массив можно использовать для дальнейшей работы с ними. Например, если требуется изменить цвет элементов второй строки на красный, то достаточно выполнить:
set(hT(2,:), 'Color', 'r')
Если требуется выделить элементы, меньшие двух, синим цветом, от трех до семи - зеленым, а большие семи - красным так, как показано на рисунке ниже, то удобно применить логическое индексирование к массиву hT:
set(hT(M>7), 'Color', 'r')
set(hT(M>=3&M<=7), 'Color', 'g')
set(hT(M<3), 'Color', 'b')