Міжнародна конференція розробників
і користувачів вільного програмного забезпечення

Разработка графического движка Kuzyagraph для учебной оболочки Kuzya

Владимир Шевчик, Львовский национальный университет имени Ивана Франка

Выполняя лабораторные работы или обучаясь программированию дома, часто возникает потребность в визуализации результатов вычисления или просто в графическом представлении некоторых элементов. Если нам необходимо вывести график одной или нескольких функций, то можно без всяких затруднений использовать дополнительное программное обеспечение, такое как Octavе, LabPlot. Мощная функциональность этих программ может предоставить очень большие возможности. Вывод графических элементов также не является большой проблемой, потому что мы можем выбрать любую из многочисленных графических библиотек. Но использование внешних программ и библиотек создает дополнительные трудности, которые зачастую слишком серьезные для начинающих.

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

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

Основой библиотеки является класс низкоуровневой графики QPainter, который есть часть кросс-платформенной библиотеки Qt4. Он включает максимально оптимизированные функции, которые выполняют основную работу в создании GUI-программы. Для этого он может использовать простые линии либо сложные формы, такие как сектора и хорды. Как правило, он опирается на “естественные” системы координат, но может также делать определенные преобразования. QPainter может рисовать на любом объекте, наследуемом от класса QPaintDevice. Совместное использование QPainter возможно только внутри виртуального метода paintEvent: инициализация, предоставление определенных настроек (например, установление пера или кисти) объекта класса QPainter и вывод на форму. Данный класс имеет все необходимые инструменты для того, чтобы реализовать полноценную графику.

Для того чтобы графическая библиотека не зависела от языка программирования и операционной системы в которой она используется, было решено сделать отдельную программу-модуль вывода графики и общаться с ней при помощи стандартного ввода/вывода. Модуль был назван Kuzyagrpaph. Таким образом, при запуске Kuzyagrpaph в консоли появится пустое окно графического модуля и строка запроса на ввод команды. Введя соответствующую команду и нажав клавишу enter, мы сразу же получим соответствующий рисунок в окне вывода.

Данные будут приниматься до момента, когда модуль получит команду, которая прекращает прием данных, но не закрывает окно вывода. Чтобы закрыть это окно нужно нажать клавишу enter.

Для работы с Kuzyagraph в языках C/C++ и Pascal были созданы файл объявления функций graphics.h и юнит graph.ppu, в которых размещен набор функций для работы с графическим модулем.

Всего было реализован 35, на наш взгляд, наиболее необходимых функций. Этот список по возможности расширяется. Все названия мы позаимствовали у Turbo C и Turbo Pascal. Это было сделано для того, чтобы можно было без проблем переносить программы, разработанные в этих оболочках. В школе и на первых курсах университета довольно часто студентов учат именно на этих программах, следовательно полное соответствие позволит безболезненно перейти к использованию нашей оболочки.

Для освоения фундаментальных основ была реализована классическая черепашья графика Turbo Pascal, что позволяет пошагово анализировать написанный программный текст и способствует лучшему усвоению алгоритмов программирования.

Базовые команды для работы с черепашьей графикой:

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

Материалы к докладу