2013 Электротехника, информационные технологии, системы управления № 8 УДК 514.17
А.С. Мезенцев, В.С. Шилов
Пермский национальный исследовательский политехнический университет,
Пермь, Россия
ИНТЕРПРЕТАЦИЯ ДАННЫХ О ДЕТАЛЯХ ДЛЯ АЛГОРИТМОВ РЕШЕНИЯ ЗАДАЧ ДВУМЕРНОГО РАСКРОЯ-УПАКОВКИ
Статья посвящена разработке препроцессора системы раскроя материала, а именно в ней рассматривается подход к преобразованию данных, получаемых из файлов чертежей, разработанных во внешних CAD-системах, в данные, имеющие нужное для алгоритмов раскроя материала представление. Для данного преобразования предложены два основных алгоритма: алгоритм выделения контуров деталей и алгоритм разбиения контуров на внешний и внутренний. Первый алгоритм предназначен для объединения отдельных примитивов в целые контуры. Второй алгоритм позволяет определять, какие из контуров являются отверстиями в деталях, а какой контур является наружным контуром детали. Рассмотрены возможные исключительные ситуации, возникающие при некорректной входной информации, и способы их распознавания. Предложенные алгоритмы позволяют получать исчерпывающую информацию о геометрии деталей в удобном для последующей обработки виде.
Ключевые слова: раскрой-упаковка, формат dxf, контур детали, теорема Жордана, препроцессор.
А^. Меzentsev, V.S. Shilov
Perm National Research Polytechnic University, Perm, Russian Federation
INTERPRETATION OF SHAPE DATA FOR ALGORITHMS OF SOLVING TWO-DIMENSIONAL LAYOUT TASKS
The article is devoted to the problem of pre-processor development for the system of sheet material layout. Particularly, the approach to transformation of data obtained from files created by third-party CAD systems into the form required by layout algorithms.
For this transformation two main algorithms have been suggested: the shape distinguishing algorithm, and algorithm of separating shapes into inner and outer ones. The first algorithm is purposed for joining individual primitives into the whole shape. The second algorithm allows to determine which of the shapes are the holes in the details and which ones are the outlines. Possible exceptional conditions caused by incorrect input information, and the ways of their detection, have been considered. The proposed algorithms can provide complete information on details shape in the form suitable for the following processing.
Keywords: layout, dxf file format, detail shape, Jordan curve theorem, pre-processor.
Важным направлением снижения себестоимости продукции является оптимизация производства [1, 2]. Для проведения такой оптимизации во многих отраслях промышленности необходимо решение класса задача раскроя-упаковки. Данным задачам посвящено множество научных работ как отечественных [3, 4, 5], так и зарубежных [6, 7, 8] авторов. В существующих работах описывается много алгоритмов, которые позволяют находить достаточно хорошие решения. Однако во всех работах рассматриваются детали, представленные в удобном для алгоритмов виде. На практике чертежи деталей разрабатываются в отдельных CAD-системах, таких как AutoCad, Kompas и аналогичных. После чего данные чертежи загружаются в программную систему, выполняющую автоматический раскрой материала. Таким образом, возникает задача преобразования информации о детали, полученной из файла чертежа, в формат данных, удобный для алгоритмов.
Все алгоритмы раскроя требуют информацию о внешнем контуре детали, заданную последовательным обходом элементов контура по или против часовой стрелки. Кроме того, деталь может содержать отверстия; существует ряд алгоритмов, которые могут размещать детали внутри этих отверстий, для таких алгоритмов также необходима информация и об отверстиях в деталях.
В данной статье будут описаны два основных алгоритма преобразования информации, получаемой из чертежей, в информацию, необходимую для алгоритмов раскроя материала.
Информацию о чертежах в систему раскроя материала, как правило, передают в файлах формата dxf, так как данный формат является открытым, а для его чтения существуют свободно распространяемые бибилиотеки, например библиотека kabeja [9]. Из чертежей данного формата можно получить информацию о примитивах, из которых состоит объект. В данной статье будут рассматриваться только следующие примитивы:
- прямая;
- дуга;
- окружность.
Данные примитивы встречаются наиболее часто, и в большинстве случаев имеет смысл рассматривать только их.
Будем считать, что рассматриваемые контуры не самопересекаются, не пересекаются друг с другом и являются замкнутыми. Для по-
лучения необходимой информации о чертежах по примитивам необходимо выполнить следующие два шага:
1. Выделить все контуры детали.
2. Разделить контуры на внешний (внешняя граница детали) и внутренний (отверстия внутри детали).
Выделение контуров деталей. На первом шаге заметим, что окружность является замкнутым контуром, поэтому сразу добавим окружности в список контуров и исключим их из списка рассматриваемых примитивов.
Блок-схема алгоритма выделения контуров приведена на рисунке.
Рис. Блок-схема алгоритма выделения контуров
Шаги, обозначенные на блок-схеме, рассмотрим более подробно.
Шаг 1. Выбрать любой примитив из списка. Любой из концов примитива выбрать как текущую точку. Другой конец примитива выбрать как начальную точку. Исключить данный примитив из списка.
Шаг 2. Найти в списке примитивов тот, один из концов которого сопадает с текущей точкой. Выбрать другой конец примитива как текущую точку. Исключить примитив из списка.
Шаг 3. Если начальная и конечная точка не совпадают, то вернуться к шагу 2, иначе выбранные на шагах 1-2 примитивы являются замкнутым контуром, а порядок, в котором они выбирались, соответствует порядку обхода по или против часовой стрелки.
Шаг 4. Добавить полученный контур к списку контуров.
Шаг 5. Если остались нерассмотренные примитивы, перейти к шагу 1, иначе - конец алгоритма.
Необходимо отметить, что чертежи могут быть выполены не совсем точно, и точки, которые автор чертежа считает совпадающими, с точки зрения ЭВМ могут находится на небольшом расстоянии. Поэтому при определении совпадения точек необходимо использовать достаточно большую погрешность, например, порядка 0,1 мм.
Предложенный алгоритм имеет квадратичную сложность от числа примитивов. С учетом того, что число примитивов на практике имеет порядок не больше десятки, время работы алгортма оказывается совсем незначительным и измеряется сотыми долями секунды.
Разделение контуров на внутренние и внешние. Внутренним будем считать контур, который целиком лежит внутри какого-то другого контура. Тогда внешним будет контур, который не лежит ни в каком другом контуре. Так как контуры не пересекаются, следовательно, если один контур лежит внутри второго, то и любая точка, принадлежащая первому контуру, лежит внутри второго. Поскольку любой контур может быть описан невыпуклым многоугольником с достаточной степенью точности, то для проверки принадлежности точки контуру можно применить известный алгоритм проверки принадлежности точки невыпуклому многоугольнику, основанный на теореме Жордана [10]. Данный алгоритм можно описать следующими шагами.
Шаг 1. Провести из проверяемой точки луч в произвольном направлении. Обычно для упрощения дальнейших расчетов выбирается направление одной из осей.
Шаг 2. Посчитать количество пересечений луча и многоугольника. Если данное количество нечетное, точка лежит внутри многоугольника, иначе - вне его.
Сам же алгоритм разбиения контуров на внутренние и внешние выглядит следующим образом:
Шаг 1. Выбрать произвольный контур, считать его внешним.
Шаг 2. Последовательно рассматривать оставшиеся контуры и проверять, лежит ли внутри них контур, который на текущем шаге считаем внешним. Если да, то текущий рассматриваемый контур считать внешним.
Тот контур, который после выполнения данного алгоритма остался внешним, и является внешним для детали, все остальные - отверстиями.
На практике чертежи могут содержать ошибки, поэтому необходимо рассмотреть три следующие исключительные ситуации:
1. Контур имеет самопересечения или несколько контуров пересекаются. Данную ситуацию можно распознать по одному из следующих признаков:
- существуют пересекающиеся примитивы;
- из одной точки выходит более двух примитивов.
2. Имеется незамкнутый контур. Ситуация возникнет, если в процессе выделения контуров текущая и начальная точки не совпадают и не осталось нерассмотренных примитивов.
3. Имеется несколько внешних контуров. Ситуация возникает, если после разбиения контуров на внутренние и внешний имеется контур, который не лежит внутри внешнего контура.
Предложенные в данной статье подходы позволяют получить описание деталей в виде, удобном для абсолютного большинства алгоритмов раскроя материала. Рассмотренные алгоритмы реализованы и успешно функционируют в системе раскроя материала Itas Nesting.
Библиографический список
1. Скирюк О.С., Файзрахманов Р.А. Разработка комплексных моделей формирования оптимальной производственной программы в условиях полной неопределенности спроса // Вестник Перм. нац. исслед. политехн. ун-та. - 2012. - № 6. - С. 25-30.
2. Архипов А.В., Файзрахманов Р.А. Модель определения оптимальной производственной программы для непосредственного спроса с учетом дискретного изменения мощностей предприятия // Экономика и финансы. - 2005. - № 11. - 83 с.
3. Месягутов М.А. Задача двухмерной ортогональной упаковки: поиск нижней границы на базе решения одномерной продолженной упаковки // Информационные технологии. - М., 2010. - № 6. - С. 13-23.
4. Стоян Ю.Г., Гиль Н.И. Методы и алгоритмы размещения плоских геометрических объектов. - Киев: Наукова думка, 1976. - 249 с.
5. Мухачева Э.А., Хасанова Э. И. Гильотинное размещение контейнеров в полосе: комбинирование эвристических технологий // Информационные технологии. - М., 2009. - № 11. - С. 8-13.
6. Hifi M. Cutting circles and р1ас^ various-sized into a strip / M. Hifi, R. M'Hallar // СотрШ;еге and Орегайо^ Research. - 2004. - № 31. -P. 675-694.
7. Falkenauer E. The Growing Genetic Algorithms for Bin Packing // Belgian Journal of Operations Research, Statistics and ^трШ^ Science. -1995. - Vol. 35. - P. 64-88.
8. Wascher Gerhard, Haußner Heike, Schumann Holger. An improved typology of cutting and packing problems // European Journal of Operational Research. - 2007. - № 183. - Р. 1109-1130.
9. Обзор библиотеки kabeja [Электронный ресурс]. - URL: http://kabeja.sourceforge.net/docs/devel/devel.html (дата обращения: 29.06.2013).
10. Викентьева О.Л., Соловьев А.Е., Файзрахманов Р.А.. Дискретная математика: учеб. пособие. - Пермь: Изд-во Перм. гос. техн. ун-та, 2009. - 132 c.
Сведения об авторах
Мезенцев Алексей Сергеевич (Пермь, Россия) - аспирант кафедры информационных технологий и автоматизированных систем Пермского национального исследовательского политехнического университета (614990, Пермь, Комсомольский пр., 29, e-mail: [email protected]).
Шилов Вадим Сергеевич (Пермь, Россия) - аспирант кафедры информационных технологий и автоматизированных систем Пермского национального исследовательского политехнического университета (614990, Пермь, Комсомольский пр., 29, e-mail: [email protected]).
About the authors
Mezentsev Alexey Sergeevich (Perm, Russian Federation) is a postgraduate student of the Department of Information Technologies and Computer-Aided Systems, Perm National Research Polytechnic University (614990, 29, Komsomolsky pr., Perm, e-mail: [email protected]).
Shilov Vadim Sergeevich (Perm, Russian Federation) is a post-graduate student of the Department of Information Technologies and Computer-Aided Systems, Perm National Research Polytechnic University (614990, 29, Komsomolsky pr., Perm, e-mail: [email protected]).
Получено 05.09.2013