Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

GMSAPR

.pdf
Скачиваний:
11
Добавлен:
16.03.2016
Размер:
9.01 Mб
Скачать

191

схемы не будет зависеть от особенностей самих элементов. Она не зависит от количества и типов элементов. Ей достаточно научиться работать с базовым классом.

То есть базовый класс обеспечивает некоторый интерфейс взаимодействия редактора и элементов. Если вынести все реализации элементов в отдельные DLL файлы (или COM-объекты), и динамически их подгружать в процессе работы программы, то вообще не потребуется перекомпилировать редактор при пополнении или изменении библиотеки элементов. То же самое и при изменении среды — нам не потребуется перекомпилировать сами элементы. Это работает до тех пор, пока не придётся изменить сам интерфейс. Можно представить себе — сколько это вызовет сложностей. Поэтому к проектированию межмодульных интерфейсов нужно относиться очень внимательно и закладывать всё что планируется в дальнейшем, даже если в первых версиях это не будет реализовано.

Редактор схем

Библиотека элементов

 

 

 

 

 

 

 

 

 

 

Редактор

 

 

Резистор

 

 

 

 

 

 

 

 

 

электрических

 

 

Индуктивность

 

схем

 

 

 

 

 

 

 

 

 

 

. . .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Конденсатор

 

 

 

 

 

 

 

 

 

 

 

Рис. 1. Компоненты САПР электрических схем

При модульном построении программных систем, разработчики могут независимо друг от друга разрабатывать различные компоненты, предварительно договорившись лишь об интерфейсе. При этом нет необходимости предоставлять исходный код другим разработчикам — достаточно лишь выслать DLL-библиотеку. Это обеспечивает дополнительную гарантию сохранения тайны интеллектуальной собственности.

192

Мы просто скопируем DLL-библиотеку c новым элементом в нужный каталог (или зарегистрируем COM-компонент) и он становится доступным в редакторе схем.

193

Приложение 2. Основные рекомендации по проектированию пользовательских интерфейсов

При работе с пользовательской частью необходимо всегда помнить, что не пользователь — придаток программы, а программа — удобный инструмент в руках пользователя.

Пользователя нужно ценить и создавать ему максимальные удобства при работе с приложением. К сожалению, часто при проектировании различных САПР, разработчики забывают о простейших принципах построения пользовательского интерфейса, думая — «наш пользователь – профессионал, разберётся». При этом они забывают, что хорошо продуманный и спроектированный интерфейс не только добавит приятных эмоций при работе с программой, но и сократит количество ошибок, а так же время, затрачиваемое на ту или иную операцию. Можно значительно улучшить юзабилити4 любой программы, придерживаясь некоторых простых принципов.

1. Любое сообщение, даже об ошибке должно быть максимально информативным и вежливым. Если ошибка произошла по вине программы, а не пользователя, должно быть слово «Извините» (Sorry), если требуется попросить пользователя выполнить некоторые действия, можно воспользоваться словом «Пожалуйста» (Please) и т.д. Сравним:

«Data-cable is not plugged!»

«Data-cable is not plugged. It may caused by <причины>. Please, sure cable connection.»

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

4Международный стандарт ISO 9241-11 определяет юзабилити как «cтепень, в которой продукт может быть использован определёнными пользователями при определённом контексте использования для достижения определённых целей с должной эффективностью, продуктивностью и удовлетворённостью»

194

2.При создании диалогов, старайтесь, чтобы назначение каждого элемента было максимально интуитивным. Помните, что человек за один взгляд способен, в среднем, различить не более семи объектов (пунктов меню, пиктограмм и т.п.). Соответственно, диалоги не должны напоминать рубку управления космическим кораблём. Можно разбить диалог на несколько более мелких или сделать кнопку «Advanced» («Дополнительные настройки»).

3.Человек читает информацию слева-направо и сверху-вниз. Если диалог требует определённых последовательных действий над различными элементами управления, старайтесь размещать их именно в том порядке, в котором требуется (или предполагается) производить действия.

3.Пишите надписи над элементами управлениями (полями ввода) – предназначение, единицы измерения и прочее. Всегда контролируйте введённое значение и выдавайте внятные сообщения об ошибках. Лучше не использовать отрицания в подписях и элементах меню.

4.Выравнивайте все элементы управления ровно относительно горизонтальных и вертикальных осей границ, и/или их размеров – сбой даже в один пиксел будет создавать впечатление «неопрятного» диалога. Помните, что качество вещей (и ПО) определяются в деталях – даже просто криво наклеенная наклейка сразу выдаёт товары «третьих» стран.

5.Если есть возможность, делайте интерфейс сенситивным (sensitive — дословно чувствительный), то есть, элементы управления должны подсвечиваться при наведении на него курсора мыши.

6.Используйте предзаголовки у диалогов — в верхней части диалога пишется (как правило, два-три предложения) для чего диалог предназначен и что предстоит сделать пользователю.

7.Если есть возможность – используйте контекстную справку (по нажатию F1) к элементам управления (или, хотя бы, окна).

8.Настройте переход между элементами управления по нажатию табуляции.

195

Правило для внутренней реализации: все сообщения в программе должны быть вынесены в ресурсы (.rc-файл, раздел StringTable). Это значительно облегчает локализацию программы для различных регионов мира. Кроме того, не нужно рыскать по коду в поисках некоторого сообщения – его всегда можно будет найти в StringTable.

196

8 Методические указания к выполнению лабораторных работ

Лабораторные работы предназначены для закрепления лекционного материала. Задания на лабораторные работы заключаются в модификации проектов-заготовок с тем, чтобы придать им новые возможности. Проектызаготовки содержаться в одноименных RAR архивах. Для их модификации архив необходимо распаковать на своем жестком диске, затем запустить Visual C++ 2005 и открыть файл проекта с расширением .sln. После открытия проектазаготовки надо внести в него дополнения, которые описаны в задании на лабораторную работу.

8.1Задание на лабораторную работу №1 — Изучение программы

BMViewer.

В данной лабораторной работе необходимо:

1)Изучить основные принципы работы программы BMViewer и ответить на все вопросы:

MDI-архитектура;

Двойная буферизация (виртуальные экраны);

Особенности вывода графики на экран с использованием GDI;

Основы ООП — объекты, инкапсуляция, наследование и полиморфизм;

Хранение растровых изображений в памяти и структура BMPфайлов;

Графические фильтры и преобразования растровых картинок.

2)Добавить пункт меню, кнопку в панели инструментов и диалог, необходимый для выполнения лабораторной работы №2. При создании диалогов обратить внимание на их проектирование: диалоги должны быть понятными для любого пользователя и выполнены аккуратно.

197

8.2Задание на лабораторную работу №2 — простейшие растровые преобразования

Необходимо модифицировать программу BMViewer с целью обеспечения описанной в назначенном варианте функциональности.

Варианты на лабораторную работу №2:

1.Обеспечить поворот изображения на углы 90º, 180º, 270º. Угол поворота выбирается из диалога. Формула поворота должна быть единой для всех углов (с использованием тригонометрических функций).

Обеспечить возможность (посредством выбора в диалоге) замены цветовых каналов (Например, если пользователь захочет преобразовать красный в зелёный, зелёный в синий, а синий, соответственно, в красный).

Должна быть возможность применения замены каналов только для половины изображения (посредством выбора такого режима в диалоге).

2.Обеспечить масштабирование изображений. Тип масштабирования — по соседнему пикселу (by neighbor).

Должна быть возможность преобразования итогового изображения, когда чётные строки будут чуть светлее, а нечётные — чуть темнее исходного изображения. Кроме того должна быть возможность применения данного преобразования только к половине изображения (все режимы задаются в диалоге).

Подсказка: Нужно реализовать попиксельный обход нового изображения. Значения нового цвета можно получить исходя из дробных координат рассчитываемого пиксела в исходном изображении.

Коорд. в исходном изображении = Коорд. в новом изображении / Масштаб.

Масштабирование по соседнему пикселу — новый пиксел имеет цвет ближайшего пиксела.

3.Обеспечить размытие исходного изображения без использования матриц. Вычисления должны проводиться по исходному изображению. В

198

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

Кроме того, должен быть режим «преобразования только половины изображения».

4.Необходимо закрасить все красные участки изображения выбранным из диалога цветом. То есть диалог должен позволять задать конечный цвет посредством вызова стандартного диалога CColorDialog.

Кроме того, должен быть режим «преобразования только половины изображения».

Придумать критерий определения «красности» пиксела.

5.Отразить исходное изображение по диагонали, например, крайний левый верхний пиксел должен стать крайним правым нижним и т.д. Выбор диагонали обеспечить в диалоге.

Кроме того, должна быть возможность инвертирования цветов (выбор этого режима (с инвертированием или без) должен предлагаться пользователю

вдиалоге).

Кроме того, должна быть возможность преобразования только половины изображения.

6. Обеспечить преобразование изображения в чёрно-белый режим, в режим оттенков серого и 256-цветный режим. Выбор режима предлагать пользователю в диалоге.

Кроме того, должна быть возможность преобразования только половины изображения.

8.3Задание на лабораторную работу №3 —преобразования №2

Вданной лабораторной работе требуется модифицировать программу BMViewer для обеспечения следующей функциональности:

1. Реализовать алгоритм медианного фильтра удаления шума (гл. 6.12).

2. Реализовать алгоритм автоматического выравнивания контраста

(гл. 6.5).

199

3.Реализовать гистограммы для отдельных цветовых каналов (гл. 6.5). Для этого предусмотреть на диалоге переключатель каналов (красный, зелёный, синий).

4.Реализовать билинейный тип масштабирования изображения. Подсказка: Нужно реализовать попиксельный обход нового изображения.

Значения нового цвета можно получить исходя из дробных координат рассчитываемого пиксела в исходном изображении.

Коорд. в исходном изображении = Коорд. в новом изображении / Масштаб.

Получив дробные координаты, мы берём пропорционально цвета соседних пикселов. То есть, если получились координаты (x,y) — (7.4, 2.3), то берём у 7-го пиксела 0.4 от значения каждого из каналов и прибавляем 0.6 от значения соответствующих каналов 8-го пиксела. То же самое делаем и по Y- координате.

8.4Задание на лабораторную работу №4 — работа с OpenGL в программе FirstGL

Необходимо изучить и модифицировать программу FirstGL с целью обеспечения описанной в назначенном варианте функциональности.

Варианты на лабораторную работу №4:

1.Модель солнечной системы: вращающиеся по некоторой орбите шары вокруг центрального желтого шара – солнца. Вокруг одной планеты должен вращаться тор (имитация Сатурна). Вокруг синего шара-планеты Земля должна вращаться серая Луна.

2.Модель атома — вращающиеся по некоторой орбите шары-электроны вокруг ядра, состоящего из двух протонов и двух нейтронов. Протоны должны быть бирюзовыми, нейтроны – серыми, электроны желтыми. В процессе вращения электроны должны плавно изменять свой радиус (примерно на 10% от их исходного радиуса как большую, так и в меньшую сторону).

200

3.Планета Сатурн — шар с вращающимися вокруг торами. Шар тоже должен двигаться по некоторой траектории. Торы должны периодически увеличивать и уменьшать свой радиус (примерно на 10% от их исходного радиуса, как в большую, так и в меньшую сторону).

4.Набор геометрических фигур, то разбегающихся от центра, то к нему приближающихся. При этом должно происходить вращение относительно внутренних осей. Все фигуры должны иметь разные цвета, задающиеся случайным образом при запуске программы. Фигуры должны двигаться асинхронно (с разной скоростью).

5.Два пульсирующих шара (изменяется радиусы шаров), их центры должны находиться рядом и немного колебаться, но не отдаляясь друг от друга на большое расстояние. Когда у одного шара радиус увеличивается – у другого уменьшается, то есть они периодически поглощаются друг другом.

6.Три тора должны быть сцеплены как звенья цепи, вращаясь вокруг центра центрального звена. Цепь должна двигаться по области отрисовки по некоторой ломаной линии, не выходящий за пределы окна. Очередной отрезок ломаной линии должен генерироваться динамически.

Во всех вариантах обеспечить расчёт и вывод пользователю параметра FPS (Frames per second). Кроме того, задать несколько разноцветных источников света.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]