Научная статья на тему 'Проектирование абстрактной линии в графическом приложении Schematic'

Проектирование абстрактной линии в графическом приложении Schematic Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
80
17
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ПРОГРАММИРОВАНИЕ / PROGRAMMING / АРХИТЕКТУРА ПРИЛОЖЕНИЙ / APPLICATION ARCHITECTURE / ГРАФИКА / JAVA / GRAPHIC

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Устимов Д.В.

В статье рассмотрены основные этапы и принципы проектирования интерфейсов графических объектов, а также описание алгоритма для работы с вершинами абстрактных линий.

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

THE DESIGNING OF THE ABSTRACT LINE IN THE GRAPHIC APPLICATION SCHEMATIC

The article describes the main steps and principles of the designing graphic object interfaces and the algorithm to work with the vertices of abstract lines.

Текст научной работы на тему «Проектирование абстрактной линии в графическом приложении Schematic»

УДК 004.921

Д.В. Устимов

аспирант, кафедра «Конструирование и технологии радиоэлектронных средств», Арзамасский политехнический институт (филиал) ФГБОУ ВПО «Нижегородский государственный технический университет им. Р.Е. Алексеева»

ПРОЕКТИРОВАНИЕ АБСТРАКТНОЙ ЛИНИИ В ГРАФИЧЕСКОМ ПРИЛОЖЕНИИ SCHEMATIC

Аннотация. В статье рассмотрены основные этапы и принципы проектирования интерфейсов графических объектов, а также описание алгоритма для работы с вершинами абстрактных линий.

Ключевые слова: программирование, архитектура приложений, графика, Java.

D.V. Ustimov, Arzamas Polytechnic Institute (branch) Nizhny Novgorod State Technical University n.a. R.E. Alexeev

THE DESIGNING OF THE ABSTRACT LINE IN THE GRAPHIC APPLICATION SCHEMATIC

Abstract. The article describes the main steps and principles of the designing graphic object interfaces and the algorithm to work with the vertices of abstract lines.

Keywords: programming, application architecture, graphic, Java.

Автоматизация проектирования занимает особое место среди информационных технологий. Во-первых, автоматизация проектирования - синтетическая дисциплина, ее составными частями являются многие другие современные информационные технологии. Во-вторых, знание основ автоматизации проектирования и умение работать со средствами САПР требуется практически любому инженеру-разработчику.

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

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

Однако большинство современных CAD-систем ориентированы исключительно на PC-платформу, несмотря на интенсивное развитие и широкое распространение мобильных устройств - смартфонов и планшетных компьютеров под управлением операционной системы Android.

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

Для дальнейшего развития приложения необходимо оптимизировать ключевые процессы работы с графическими объектами, в том числе разработать единый интерфейс для однотипных графических объектов. «Расслоение» системы, по мнению автора, поможет достигнуть требуемого поведения приложения. Концепция слоев (layers) - одна из общеупотребительных моделей, используемых разработчиками программного обеспечения для разделения сложных

систем на более простые части. Описывая систему в терминах архитектурных слоев, удобно воспринимать составляющие ее подсистемы в виде «слоеного пирога». Слой более высокого уровня пользуется службами, предоставляемыми нижележащим слоем, но тот не «осведомлен» о наличии соседнего верхнего слоя [1, с. 43].

Однако самое трудное при использовании архитектурных слоев - это определение содержимого и границ ответственности каждого слоя [1, с. 44]. Решение данного вопроса находится в анализе предметной области. Для приложения Schematic рассмотрим прецедент создания и редактирования линии, как графического объекта. Когда пользователь выбирает линию в качестве объекта, который должен быть добавлен на рабочее поле, он совершает одиночное касание (single tap) экрана планшета для добавления первой вершины линии в точку касания. Для добавления каждой следующей вершины пользователь должен снова совершить одиночное касание экрана. Однако если касание было произведено вблизи одной из существующих вершин линии, то система должна удалить эту вершину из линии. Можно удалять вершины до тех пор, пока не останется хотя бы одна.

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

Таким образом, можно представить базовый объект для линии в виде абстрактного класса с коллекцией вершин и некоторым набором свойств, позволяющих задавать условия взаимодействия с вершинами и самим объектом [2].

Однако коллекция вершин также может быть использована и для представления таких графических объектов, как полигон, прямоугольник или эллипс, вписанный в прямоугольник. Поскольку принципы добавления и удаления вершин в указанные выше графические объекты с точки зрения пользователя одинаково для всех фигур, то разрешение на добавление или удаление вершин должно описываться свойствами объекта (табл. 1).

Таблица 1 - Условия обработки вершин

Графический объект Добавление вершины Удаление вершины

Линия Разрешено всегда Разрешено, если vertices.size() > 1

Кривая Безье Разрешено, если vertices.size()* < 4

Полигон Разрешено всегда

Прямоугольник Разрешено, если vertices.size() < 2 Запрещено

Эллипс

*где vertices.size() - размер коллекции с вершинами.

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

public abstract class AbsLine {

protected List<Vertex> vertices = new ArrayList<Vertex>(); public abstract boolean isVertexCanBeDeleted(); public abstract boolean isVertexCanBeAdded(); public Vertex findVertex(final float x, final float y, final float tolerance) {...};

}

Метод findVertex() должен вернуть вершину, которая находится в точке с координатами (x, y) с заданной погрешностью - tolerance.

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

1. Получить вершину объекта в точке касания экрана (x, y) с заданной погрешностью определения - tolerance, вызвав метод findVertex() абстрактной линии.

2. Если вершина найдена, вызвать метод isVertexCanBeDeleted(), который вернёт булево значение в соответствии с таблицей 1 (условие удаления вершины). В случае если метод возвращает истинное значение (true), то следует удалить найденную вершину.

3. Если вершина не найдена, вызвать метод isVertexCanBeAdded(), который вернёт булево значение в соответствии с таблицей (условие добавления вершины). В случае если метод возвращает истинное значение (true), то следует создать вершину с координатами (x, y) и поместить её в коллекцию вершин графического объекта.

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

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

Список литературы:

1. Фаулер, М. Архитектура корпоративных программных приложений: пер. с англ. / Мартин Фаулер. - М.: Вильямс, 2006. - 544 с.

2. Ласло, М. Вычислительная геометрия и компьютерная графика на C++: пер. с англ. / М. Ласло. - М.: БИНОМ, 1997. - 304 с.

i Надоели баннеры? Вы всегда можете отключить рекламу.