МД (Методология создания твердотельных моделей с использованием технологий аддитивного производства), страница 21
Описание файла
Файл "МД" внутри архива находится в следующих папках: Методология создания твердотельных моделей с использованием технологий аддитивного производства, Пузынина М.В. PDF-файл из архива "Методология создания твердотельных моделей с использованием технологий аддитивного производства", который расположен в категории "". Всё это находится в предмете "дипломы и вкр" из 8 семестр, которые можно найти в файловом архиве ДВГУПС. Не смотря на прямую связь этого архива с ДВГУПС, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст 21 страницы из PDF
ПОдслайсинг слоевSlicerHeight=height;FindSeparatePoint();FindSeparateLayerOutLine();tempLoop=OutLineSeparation;tempLoopID=OutLineSeparationID;SlicerHeight=height+LayerHeight;FindSeparatePoint();FindSeparateLayerOutLine();tempLoop2=OutLineSeparation;tempLoopID2=OutLineSeparationID;146///Цикл поиска степени похожестиfloat minDeltaOnLoop=300;for (int i=0;i<tempLoop2.size();i++){float minDelta=300;for (int j=0;j<tempLoop.size()-1;j++){if (tempLoopID[j+1]==tempLoopID[j]){if (OffsetByLine(tempLoop[j],tempLoop[j+1],tempLoop2[i])<minDelta)///На кадом этапе определяется переменная - MinDelta - после поискапо всем вершинам - это найденное максимальное значение отклонения для каждой точки от исходных линийminDelta=OffsetByLine(tempLoop[j],tempLoop[j+1],tempLoop2[i]);}}if (minDelta<minDeltaOnLoop) minDeltaOnLoop=minDelta;}cout<<"Adaptive = "<<minDeltaOnLoop<<endl;//Принятие решения о одинаковости слоев.
Если величина отклонения меньше 0.001 мм,тогда контуры слоев одинаковы. В таком случае, возможно увеличение толщины слоя в два разаот исходногоif (minDeltaOnLoop<=0.00001) {height+=LayerHeight;OutLineLoop.push_back(tempLoop2);OutLineLoopID.push_back(tempLoopID2);else{OutLineLoop.push_back(tempLoop);OutLineLoopID.push_back(tempLoopID);}}OutLineSeparation.clear();OutLineSeparationID.clear();SlicerHeight=tempSliceHight; }float LenghtOfLine(point a, point b){return sqrt(pow((a.X-b.X),2)+pow((a.Y-b.Y),2));}void exportGcode(){ofstream fout ("Export.gcode");fout << "M140 S50.000000"<<endl<<"M109 T0 S190.000000"<<endl<<"T0"<<endl<<"M190 S50.000000"<<endl<<"G21;metric values"<<endl<<"G90;absolute positioning"<<endl<<"M83;set extruder to absolute mode"<<endl<<"M107;start with the fan off"<<endl<<"G28 X0 Y0 ;move X/Y to min endstops"<<endl<<"G28 Z0;move Z to min endstops"<<endl<<"G1 Z15.0 F9000 ;move the platform down 15mm"<<endl<<"G92 E0;zero the extruded length"<<endl<<"G1 F200 E3;extrude 3mm of feed stock"<<endl<<"G92 E0;zero the extruded length again"<<endl<<"G1 F9000"<<endl<<"M107"<<endl;float centX=92.22;float centY=86.75;for (int j=0;j<OutLineLoop.size();j++){fout<<";LAYER:"<<j<<endl;fout<<"G0 F9000 X"<<OutLineLoop.at(j).at(0).X+centX<<"Y"<<OutLineLoop.at(j).at(0).Y+centY<<" Z"<<OutLineLoop.at(j).at(0).Z<<endl;fout<<";TYPE:WALL-OUTER"<<endl;Y"<<OutLineLoop.at(j).at(0).Y+centY<<" E"<<LenghtOfLine()<<endl;for (int i=1;i<OutLineLoop.at(j).size()-1;i++){if (OutLineLoopID.at(j).at(i-1)==OutLineLoopID.at(j).at(i)){fout<<"G1 F1200 X"<<OutLineLoop.at(j).at(i).X+centX<<"Y"<<OutLineLoop.at(j).at(i).Y+centY<<"E"<<(LenghtOfLine(OutLineLoop.at(j).at(i),OutLineLoop.at(j).at(i-1))/63.697)<<endl;}}fout<<"G1 F1200 X"<<OutLineLoop.at(j).at(OutLineLoop.at(j).size()-1).X+centX<<"Y"<<OutLineLoop.at(j).at(OutLineLoop.at(j).size()-1).Y+centY<<" E0.1"<<endl; }fout.close ();cout<<"Save to file is OK!"<<endl;}147///Функция проверки нажатия клавиш, вызывает описанный выше функционал программыstatic void key(unsigned char key, int x, int y){string NewFile;WIN32_FIND_DATA FindFileData;HANDLE hf;switch (key){case 27 :case 'q':exit(0);break;case 'p':case 231:PlateBaseBody();break;case 'w':case 246:glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);break;case 'W':case 214:glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);break;case 'a':case 244:FindSeparatePoint();FindSeparateLayerOutLine();break;case 's':case 251:FindSeparatePoint();break;case 'd':case 226:FindSeparateLayerOutLine();break;case 'o':case 249:cout<<"File in roots dir:"<<endl;hf=FindFirstFile("*.stl",&FindFileData);if (hf!=INVALID_HANDLE_VALUE){do{cout<<FindFileData.cFileName<<endl;}while (FindNextFile(hf,&FindFileData)!=0);FindClose(hf);}cout<<"Input File Name"<<endl;cin>>NewFile;ReadSTLFile(NewFile);break;case 'F':case 192:InnerPoints.clear();SetInnerPointsGrid();break;case 'f':case 224:InnerPoints.clear();SetInnerPointsRand();point tmp;break;case 'g':case 239:break;case 'x':148case 247:HideSolid=false;break;case 'X':case 215:HideSolid=true;break;case 'h':case 240:cout<<"s - slice model and generate separate points"<<endl;cout<<"d - connect separate points in loops"<<endl;cout<<"f - generate many points into loops"<<endl;cout<<"e - rotate stl model by axis X"<<endl;cout<<"r - rotate stl model by axis Y"<<endl;cout<<"t - rotate stl model by axis Z"<<endl;cout<<"x - hide solid model"<<endl;cout<<"File in roots dir:"<<endl;hf=FindFirstFile("*.stl",&FindFileData);if (hf!=INVALID_HANDLE_VALUE){do{cout<<FindFileData.cFileName<<endl;}while (FindNextFile(hf,&FindFileData)!=0);FindClose(hf);}cout<<endl;break;case '[':case 245://cout<<offsetUpForLinePerimetr<<endl;offsetUpForLinePerimetr=offsetUpForLinePerimetr-1;if (offsetUpForLinePerimetr<0) offsetUpForLinePerimetr=0;break;case ']':case 250://cout<<offsetUpForLinePerimetr<<endl;offsetUpForLinePerimetr=offsetUpForLinePerimetr+1;if (offsetUpForLinePerimetr>OutLineSeparation.size()) offsetUpForLinePerimetr=OutLineSeparation.size();break;case 'e':case 243:RotateBody(0);break;case 'r':case 234:RotateBody(1);break;case 't':case 229:RotateBody(2);break;case '-':SlicerHeight-=LayerHeight;break;case 'n':case 242:GenerateLoopCycle();break;case 'm':case 252:GenerateLoopCycleAdaptive();break;case '=':SlicerHeight+=LayerHeight;149break;case 'l':case 228:cout<<"Input Layer Height: ";cin>>LayerHeight;break;case 'v':case 236:exportGcode();break;}glutPostRedisplay();}///Функция обработки движения и нажатия клавиш на манипуляторе класса мышь - применяется длявращения сценыvoid mouse(int button, int state, int x, int y){if (button==3) {zoomScene=zoomScene*1.2;}if (button==4) {zoomScene=zoomScene/1.2;}if((button==GLUT_LEFT_BUTTON)&&(state==GLUT_DOWN)){StartAngleCamRotateX=x;StartAngleCamRotateY=y;}if((button==GLUT_LEFT_BUTTON)&&(state==GLUT_UP)){angleCamRotateY=angleCamRotateY+DeltaAngleCamRotateY;angleCamRotateX=angleCamRotateX+DeltaAngleCamRotateX;DeltaAngleCamRotateX=0;DeltaAngleCamRotateY=0;}glutPostRedisplay();}void mouseMov(int x, int y){DeltaAngleCamRotateX=x-StartAngleCamRotateX;DeltaAngleCamRotateY=y-StartAngleCamRotateY;}///Простой программыstatic void idle(void){glutPostRedisplay();}const GLfloat light_ambient[] = { 0.0f, 0.0f, 0.0f, 1.0f };const GLfloat light_diffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f };const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };const GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f };const GLfloat mat_ambient[]= { 0.7f, 0.7f, 0.7f, 1.0f };const GLfloat mat_diffuse[]= { 0.8f, 0.8f, 0.8f, 1.0f };const GLfloat mat_specular[]= { 1.0f, 1.0f, 1.0f, 1.0f };const GLfloat high_shininess[] = { 100.0f };///Точка входа в программу и запуск основной функции – запуск и начало работы программыint main(int argc, char *argv[]){///Инициализация графического окнаglutInit(&argc, argv);glutInitWindowSize(640,480);glutInitWindowPosition(1300-640,10);glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);glutCreateWindow("Slicer TurboMaxHiTechProSpeedUpUltraHighMegaUltra");///Определение функций библиотеки glut.hglutReshapeFunc(resize);glutDisplayFunc(display);glutKeyboardFunc(key);glutMouseFunc(mouse);glutMotionFunc(mouseMov);glutIdleFunc(idle);///Предочистка экранаglClearColor(1,1,1,1);glEnable(GL_CULL_FACE);glCullFace(GL_FRONT);///Настройки ,b,kbjntrb glut.h - нужны для верного отображенияglEnable(GL_DEPTH_TEST);glFrontFace(GL_CW);150///Настройка света и прозрачностиglEnable(GL_BLEND);glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);glEnable(GL_LIGHT0);glEnable(GL_NORMALIZE);glEnable(GL_COLOR_MATERIAL);glEnable(GL_LIGHTING);glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);glLightfv(GL_LIGHT0, GL_POSITION, light_position);glMaterialfv(GL_FRONT, GL_AMBIENT,mat_ambient);glMaterialfv(GL_FRONT, GL_DIFFUSE,mat_diffuse);glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);///Начальные настройки программы при стартеangleCamRotateX=-45;angleCamRotateY=45;zoomScene=1;SlicerHeight=0;countLoops=0;HideSolid=true;cout.precision(6);LayerHeight=0.2;cout<<"Viewer"<<endl;cout<<"s - slice model and generate separate points"<<endl;cout<<"d - connect separate points in loops"<<endl;cout<<"f - generate many points into loops"<<endl;cout<<"e - rotate stl model by axis X"<<endl;cout<<"r - rotate stl model by axis Y"<<endl;cout<<"t - rotate stl model by axis Z"<<endl;cout<<"x - hide solid model"<<endl;cout<<"Shift+x - show solid model"<<endl;cout<<"w - show wireframe model"<<endl;cout<<"Shift+w - hide wireframe model"<<endl;cout<<"o - open file"<<endl;cout<<"a - auto generate one layer"<<endl;cout<<"n - generate loop sequance"<<endl;cout<<"m - generate loop sequance adaptive"<<endl;cout<<"l - input height layer"<<endl;cout<<"v - save to file"<<endl;glutMainLoop();return EXIT_SUCCESS;}151.