Текст доклада

РАЗРАБОТКА ИНСТРУМЕНТА РЕДАКТИРОВАНИЯ КАРТ
РАСКРОЯ
Студент группы РИС-12-1 ПНИПУ В.А. Рутин
Научный руководитель – канд. техн. наук, доцент Р.Т.Мурзакаев
Введение
Немаловажной
составляющей
любого
приложения
является
дружественный и удобный интерфейс [1]. Одними из наиболее
функциональных и полезных элементов графического интерфейса
являются редакторы – инструменты, позволяющие визуализировать и
наглядно представить результат работы программы. Разработку такого
инструмента на примере программного комплекса «ITAS Nesting»
рассмотрим подробнее.
Целью данной статьи является описание разработки класса на языке
Java, предназначенного для визуального отображения деталей с
возможностью их перемещения.
Выделим следующие задачи:
 масштабирование и перемещение видимой области;
 поддержка корректности перемещения деталей по листу.
Описание деталей
В общем случае можно считать, что детали состоят из следующих
геометрических примитивов: отрезков, дуг, окружностей [2] (см. рис. 1).
Поэтому, каждую деталь необходимо хранить как список ее частей –
геометрических примитивов. При отображении детали будем считывать
списки дуг, окружностей и отрезков, и «рисовать» отдельно каждую часть.
Рис. 1. Чертеж детали.
Реализация масштабирования и перемещения видимой области
Для реализации масштабирования и перемещения видимой области
выделим два наиболее подходящих способа:
1) использование стандартного класса AffineTransform, реализующего
метод аффинных преобразований над двумерным пространством;
2) написание собственных методов масштабирования и перемещения.
При реализации масштабирования видимой области посредством
стандартного класса AffineTransform при больших коэффициентах
масштабирования «прорисовка» деталей имеет большую погрешность,
вследствие чего наблюдается разрыв контура детали в местах стыковки ее
частей (см. рис. 2).
Рис. 2. Разрыв контура детали при использовании класса
AffineTransform.
Следовательно, использование данного класса будет уместно в
проектах, где точность расчетов не так важна, например, в играх. В
остальных случаях необходимо использовать иной способ решения данной
задачи.
Для реализации масштабирования и перемещения видимой области
введем дополнительные поля класса: scale и shift. Первый будет хранить
коэффициент масштабирования, второй – вектор перемещения.
Поле scale необходимо изменять в процессе «скроллинга» колесика
мыши. Учитывая, что коэффициент вращения колеса мыши слишком
большой, его необходимо делить на некоторую константу, например,
десять, чтобы масштабирование видимой области происходило плавно.
Отметим, что данная операция будет производиться относительно
положения курсора (рис. 3, а), а не относительно начала координат
используемого двумерного пространства (рис. 3, б).
б
а
2
Рис 3. Результат масштабирования относительно мыши a) и
относительно начала координат б).
При нажатой правой кнопки мыши будем перемещать все детали и
лист на отношение разности координат мыши до и после перемещения к
текущему коэффициенту масштабирования.
Перемещение деталей и анализ столкновений.
Перемещать детали будем тем же способом, каким перемещали
видимую область. При этом необходимо отслеживать пересечения деталей
друг с другом и с краями листа. Подзадача пересечения объектов сводится
к подзадаче пересечения геометрических примитивов и нахождения
расстояния между ними [2], и в данной статье не рассматриваются.
Если при перемещении детали (рис. 4, а) или группы деталей
обнаружим, что она пересекается с какой-либо другой деталью, группой
деталей или с краем листа, то построим вектор «выталкивания» из контура
объектов, с которыми обнаружены пересечения (рис. 4, б), а потом
переместим выделенные детали на этот вектор (рис. 4, в). После
перемещения контура выделенных деталей на вектор выталкивания
повторно проверим пересечения деталей, и если такая коллизия
обнаружена – переместим выделенные детали на вектор, обратный вектору
смещения, то есть возвратим в первоначальное положение (рис. 4, г).
а
б
в
г
Рис. 4.Различные варианты выталкивания деталей.
3
Причина использования механизма выталкивания достаточно проста:
необходимо, чтобы детали совмещались точно друг с другом и
«скользили» по границам других деталей и краев листа. При перемещении
деталей без механизма выталкивания между ними будет оставаться
небольшой зазор, образующийся из-за погрешности измерения координат
мыши.
Заключение
Реализован класс, позволяющий визуализировать карты раскроя,
масштабировать и перемещать изображения деталей и листа, перемещать
детали с учетом непересечения контуров и «скольжения» относительно
друг друга, относительно краев листа, а так же с возможностью точного
позиционирования деталей относительно друг друга. Класс использован
при создании редактора карт раскроя программного комплекса «ITAS
Nesting» [3].
Библиографический список
1. Файзрахманов
Р.
А.,
Архипов
А.
В.
Проектирование
автоматизированных информационных систем на основе объектно
ориентированного подхода [Текст]. // учебное пособие; М-во
образования и науки Российской Федерации, Гос. образовательное
учреждение высш. проф. образования «Пермский гос. технический унт»
2. Мезенцев А.С., Шилов В.С. Интерпретация данных о деталях для
алгоритмов решения задач двумерного раскроя-упаковки [Текст]. //
Вестник ПНИПУ. Электротехника, информационные технологии,
системы управления. 2013. – № 7. – C. 137-143.
3. Мурзакаев Р. Т., Лялин Д. А. Алгоритм уплотнения карты раскроя на
основе двумерной гравитационной имитационной модели [Текст]. //
Современная наука: актуальные проблемы теории и практики.
Естественные и технические науки. 2013. №9-10. С. 34-41
4