Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Библиотека matplotlib

Глава 11 из книги "Архитектура приложений с открытым исходным кодом", том 2.

Оригинал: matplotlib
Автор: John Hunter, Michael Droettboom, перевод: А.Панин

11.3. Рефакторинг системы вывода данных

Со временем количество методов API для рисования системы вывода данных неуклонно росло, при этом использовались следующие методы:
draw_arc, draw_image, draw_line_collection, draw_line, draw_lines, draw_point,
draw_quad_mesh, draw_polygon_collection, draw_polygon, draw_rectangle,
draw_regpoly_collection

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

В версии 0.98 библиотеки matplotlib код систем вывода данных подвергся рефакторингу с целью переноса всех функций из систем вывода данных, за исключением необходимых, в основной код библиотеки таким образом, чтобы в составе систем вывода данных остался минимум необходимой функциональности. Количество требуемых методов в рамках API систем вывода данных было значительно сокращено до следующих методов:
  • draw_path: Рисует сложные полигоны с помощью линии и сегментов Безье. Этот интерфейс заменяет множество устаревших методов: draw_arc, draw_line, draw_lines и draw_rectangle.
  • draw_image: Выводит растровые изображения.
  • draw_text: Выводит текст с заданными параметрами шрифта.
  • get_text_width_height_descent: При передаче строки текста возвращает ее метрики.

Возможно реализовать все необходимые функции рисования в рамках новой системы вывода данных, используя только перечисленные методы. (Мы можем пойти еще дальше и выводить текст с помощью метода draw_path, исключив тем самым необходимость в реализации метода draw_text, но мы не захотели реализовывать данное упрощение. Конечно же, в рамках системы вывода данных возможна реализация специфического метода draw_text для вывода "реального" текста.) Эти изменения упростили процесс создания и разработки новой системы вывода. Однако, в некоторых случаях системе вывода данных может потребоваться изменить принцип работы основного кода библиотеки для увеличения производительности операции вывода. Например, при рисовании маркеров (небольших символов, используемых для указания на вершины графика) для большей экономии места удобно однократно записывать изображение маркера в файл, после чего использовать его в необходимых местах, копируя методом "штампа". В этом случае система вывода данных может реализовать метод draw_markers. Если этот метод реализован, система вывода данных будет однократно записывать изображение маркера, после чего будет отправлять гораздо более короткую команду для повторного использования этого изображения во множестве точек. Если же этот метод не реализован, основной код библиотеки просто будет многократно выводить изображение маркера с помощью метода draw_path.

Полный список дополнительных методов API системы вывода данных:
  • draw_markers: Изображает набор маркеров.
  • draw_paths_collection: Изображает набор контуров.
  • draw_quad_mesh: Изображает четырехугольную сетку.

Далее: Преобразования