МД (1194692), страница 17
Текст из файла (страница 17)
Данная платформа является простой в использовании, подключает все необходимые длякомпиляции проекта библиотеки, перечисленные ранее, и работает, в том числе, на маломощных компьютерах.Данная среда разработки использована для создания оконного приложения сконсольным интерфейсом для реализации адаптивного подхода к динамическизадаваемой толщине слоя при подготовке моделей к трехмерной печати.1104 РЕАЛИЗАЦИЯ ПРОГРАММЫ-СЛАЙСЕРАВ области прототипирования с использованием технологий трехмерной печати на данный момент существует задача подготовки трехмерной модели кпечати. Эта задача представляет собой задачу генерации так называемого gкода по файлу в stl формате, который описывает геометрические параметры печатаемой модели, в том числе параметры заполнения.В основе параметров g-кода для вывода на печать стоит условие разделениямодели на слои.
В процессе разделения, в каждом слое могут присутствоватьобласти различных топологических частей модели: внешний контур, внутренний контур, заливка и т.д. Для каждого из этих объектов используется соответствующая подпрограмма, позволяющая сгенерировать соответствующий g-код.В стандартной реализации существующих на рынке аддитивных технологийпрограмм для генерации gcode, заполнение полостей внутри модели реализуется с помощью создания повторяющихся контуров по определенной повторяющейся геометрической форме. Так, в различных программах встречается способы заливки внутреннего пространства подготовленных к аддитивному производству моделей решеткой под 45градусов, в виде гексагона, полной заливкойи другими способами.В ходе проведения практических экспериментов с трехмерной печатью потехнологии FDM установлено, что возникают случаи, когда множество слоевимеют одинаковое сечение. В таком случае, возможно увеличение расстояниямежду слоями и, соответственно, уменьшение количества затрачиваемого пластика, тем самым уменьшая и общее время печати.
Для этого требуется производить анализ трехмерной модели перед процессом «слайсинга» для определения абсолютно вертикальных мест в модели, чтобы программно уменьшить количество слоев на этом месте.В ходе исследования написана программа, которая уникально обрабатываетсложные элементы stl файла, подготовленного для печати и перевода в g-код, и111позволяет по 3D-модели менять толщину слоя при заполнении и для контурапечати.Реализация данного программного комплекса и его дальнейшая проработкав настоящий момент имеет высокую актуальность, в связи с ростом рынка аддитивного производства, так как в данный момент имеющиеся на рынке ПОпрограммы-слайсеры не могут изменять толщину слоя при сложной топологииконструктивного элемента модели, например, выполнять укрепление стеноктонкостенных объектов [37].Реализация данного программного приложения на концептуальном и программном уровне приведена ниже.4.1 Концептуальное описание работы приложенияДля написания программного использован язык программирования С++, вкачестве платформы программирования применен ПО Code::Blocks.Принципы работы приложения строятся на основе модульности, для обеспечения возможности в дальнейшем добавлять дополнительный функционал.Чтобы не перегружать пользователя приложения функционалом, для экономии системных ресурсов и для минимизации программных вычислений, интерфейс работы с программой реализован через консольное меню, основные функции привязаны к управляющим клавишам и соответствуют требованиям к программе, предъявленным в главе 3.Работа приложения обусловлена лаконичностью функционала.
Чтобы неперегружать пользователя лишними действиями ему предоставляется необходимый минимум операций для выполнения.Минимизация функционала отражает предполагаемое поведение системы –основной задачей приложения выступает послойное деление модели на слои(статическое или динамическое, с учетом геометрии модели) с дальнейшим сохранением в файл в формате g-кода для дальнейшей трехмерной печати, но выполнение этой задачи подразумевает выбор входных данных в виде трехмерной112модели в формате *.stl, определение типа слайсинга, возможность созданиявнутренней сетки заполнения и просмотра прохождения экструдера на каждомслое [38].Описание работы приложения на концептуальном уровне с помощью отражения взаимодействия пользователя и выполняемых системой действий поконкретному сценарию представлено на рисунке 45.Приложение-слайсер для реализацииадаптивного подхода к динамическизадаваемой толщине слояЗагрузка моделиВыбор типа деленияПросмотр сетки заполненияПослойное деление модели (слайсинг)Выбор толщины слояВывод результата операцииПользователь приложенияСохранение результатов в g-кодРабота алгоритма деления на n-ом слоеРисунок 45 – Диаграмма вариантов использованияПредставление совместной работы объектов для достижения общей цели,акцентируя внимание на их ролях, представлено на рисунке 46.
Описание динамических аспектов моделирующей системы отражает минимизацию и простоту приложения.113Главная особенность диаграммы кооперации заключается в возможностипредставить структурные отношения между объектами, участвующими во взаимодействии, а также набор взаимодействующих ролей, используемых вместе,чтобы показать функциональность приложения.Пользователь приложенияКонсольныйинтерфейсУправляющиеподпрограммыОбрабатываемыетрехмерныемодели в формате*.stlОбработкаЗагруженноймоделиРисунок 46 – Диаграмма кооперацииОписание алгоритма действий в рамках варианта поведения системы представлено на рисунке 47.Данная диаграмма покажет все возможные состояния, в которых можетнаходиться система, а так же сам процесс смены состояний в результате внешнего влияния.Загрузка приложенияВыбор трехмерной моделиПроверка загрузки моделиВыбор свойств слайсинга(толщина слоя,тип деления - статический/динамический)Выполнение послойного деления,сохранение результатов в файлРисунок 47 – Диаграмма состояний системы114Конкретный сеанс работы программы представлен в виде диаграммы последовательности действий (рисунок 48).При запуске программы происходит запуск консоли и окна вывода, с возможностью дальнейшей обработки модели с помощью управляющих клавиш.Протокол конкретного сеанса работы приложения представлен в диаграммепоследовательности действий.
В данной диаграмме отображается последовательность посылок сообщений.Пользователь приложенияКонсольУправляющая программаТрехмерная модельАлгоритмыОбработка трехмерной моделиСохранение в виде g-кодаЗапуск приложенияВыбранный файл отсутствуетВыбор файлаПроверка наличия файлаВыбранный файл отсутствуетВыбранный файл отсутствуетВыбор и загрузка трехмерной моделиЗапуск приложенияВыбор файлаПроверка наличия файлаВыбранный файл загруженсигнал о завершениисигнал о завершенииВыбор параметров слайсинга и обработка моделиСлайсинг моделиСохранение массива контуровсигнал о завершениисигнал о завершениисигнал о завершенииРисунок 48 – Диаграмма последовательности действийЕсли диаграмма вариантов использования ставят перед разрабатываемойсистемой цель, то диаграмма деятельности показывает последовательность действий, необходимых для ее достижения.
Действия – элементарные шаги, которые не предполагают дальнейшую декомпозицию.Разложение спецификации исполняемого поведения в виде координированного последовательного и параллельного выполнения подчиненных элементовприложения на составные части представлено на рисунке 49.115НачалоЗапуск приложенияПрогрузка файла вформате *stlЗагрузка трехмерной моделиРабота с параметрами модели (поворот, просмотр слоя и т.д)ВыбордругоймоделиВыбор толщины слояВыбор типа послойного деленияВыборстатическогоалгоритмаВыбордругоймоделиВыбординамическогоалгоритмаСтатический алгоритмДинамический алгоритмОтправка запросана выборалгоритмаОбработкатрехмерноймоделиВывод результата послойного деления модели на экранЗапись данных омодели в виде g-кодаСохранение результата в формате g-кодаЗавершениеработыКонецРисунок 49 – Диаграмма деятельностиВ начале сеанса работы приложения загружается трехмерная модель, выбранная пользователем, с загруженной моделью проводятся операции, такие116как поворот модели, просмотр обхода контура на определенном слое и варианты заливки твердого тела модели.Далее следует выполнение основной части программы – выбор и выполнение вписанных в программу алгоритмов для статистического и адаптивного деления модели на слои с отображением результата и последующим его экспортом в формат g-кода с сохранением.
При выполнении действий, программа также выдает информацию о проведенных действиях в консоль.4.2 Реализация программного кодаПрограммный код приложения написан в модульном виде, для возможностидобавление в дальнейшем дополнительного функционала.Код написан с использованием структур, без применения объектноориентированного подхода как такового, что связано с большим объемом вычислительных алгоритмов, реализация которых возможна без использованияООП.Далее приведены наиболее интересные, по мнению автора, моменты реализации кода программы. Полный программный код приложения с пояснениямиприведен в Приложении А.Представленные ниже два фрагмента программы реализуют две функции,необходимые для генерации точек пересечения секущей плоскости с ребрамимодели и тригонометрическая функция для вычисления точки пересечения отрезка и линии:bool Intersect2Line(float ax1, float ay1, float ax2, float ay2,float bx1, float by1, float bx2, float by2){float v1=(bx2-bx1)*(ay1-by1)-(by2-by1)*(ax1-bx1);float v2=(bx2-bx1)*(ay2-by1)-(by2-by1)*(ax2-bx1);float v3=(ax2-ax1)*(by1-ay1)-(ay2-ay1)*(bx1-ax1);float v4=(ax2-ax1)*(by2-ay1)-(ay2-ay1)*(bx2-ax1);return (v1*v2<0) && (v3*v4<0); }117Тригонометрическая функция для вычисления точки пересечения двух отрезков:bool IntersectLine2Otrezok(float lineP1x, float lineP1y, floatlineP2x, float lineP2y, float otrP1x, float otrP1y, float otrP2x,float otrP2y){float a=FindAngleOtrezok(lineP1x, lineP1y, lineP2x,lineP2y)-FindAngleOtrezok(lineP1x, lineP1y, otrP1x, otrP1y);float b=FindAngleOtrezok(lineP1x, lineP1y, lineP2x,lineP2y)-FindAngleOtrezok(lineP1x, lineP1y, otrP2x, otrP2y);float c=FindAngleOtrezok(lineP2x, lineP2y, lineP1x,lineP1y)-FindAngleOtrezok(lineP2x, lineP2y, otrP1x, otrP1y);float d=FindAngleOtrezok(lineP2x, lineP2y, lineP1x,lineP1y)-FindAngleOtrezok(lineP2x, lineP2y, otrP2x, otrP2y);if (((c>0 && d<0)||(c<0 && d>0))||((a>0 && b<0)||(a<0 &&b>0))) {if ((a<0.001&&a>-0.001)||(b<0.001&&b>0.001)||(c<0.001&&c>-0.001)||(d<0.001&&d>-0.001)){return false; }return true; }return false; }Функция, в перспективе создающая полигон сетки Вороного.
Находится всостоянии разработки. Построение полигона основано на вычислении центрамногоугольника. Строится после успешного завершения для каждой модели:void CreatePligoneForPoint(int currentID){MeabyPoint.clear();point2D tmp;for (int i=0;i<InnerPoints.size();i++){for (int j=i+1;j<InnerPoints.size();j++){if (i==currentID || j==currentID) continue;if (!GetCoordsCentrTreugolnika(InnerPoints[currentID], InnerPoints[i], InnerPoints[j], tmp))continue;MeabyPoint.push_back(tmp); } }cout<<"Create "<<MeabyPoint.size()<<" subPoints"<<endl;for (int i=0;i<MeabyPoint.size();i++){for (int j=0;j<InnerPoints.size();j++){if (j==currentID) continue;float p1x=InnerPoints[currentID].X;float p1y=InnerPoints[currentID].Y;float p2x=InnerPoints[j].X;float p2y=InnerPoints[j].Y;float np1x, np1y, np2x, np2y;GetPerpendicular(p1x,p1y,p2x,p2y,np1x,np1y,np2x,np2y);118if (IntersectLine2Otrezok(np1x,np1y,np2x,np2y,p1x,p1y,MeabyPoint[i].x,MeabyPoint[i].y)){MeabyPoint.erase(MeabyPoint.begin()+i,MeabyPoint.begin()+i+1);i=0;j=0;break; }}}cout<<"After clearing "<<MeabyPoint.size()<<" subPoints"<<endl;TempBasePoint.x=InnerPoints[currentID].X;TempBasePoint.y=InnerPoints[currentID].Y;sort(MeabyPoint.begin(), MeabyPoint.end(),HelpFunctionForSort);PoligoneBase.clear();poligone tmpPoly;for (int i=0;i<MeabyPoint.size();i++){tmp.x=MeabyPoint[i].x;tmp.y=MeabyPoint[i].y;tmpPoly.StackCorners.push_back(tmp);tmp.x,TempBasePoint.y-tmp.y)<<endl;}PoligoneBase.push_back(tmpPoly);}Функция проверки условия принадлежности точки многоугольнику.