⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 baseview.cpp

📁 快速原型制造分层切片源代码,适用于高温合金.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	else
	{
		m_scanSpeed=m_scanSpeedX;
		m_laserPower=m_laserPowerXDir;
	}

	InitializePathParam();
	
	pDoc->m_pathData.WritePathDataIntoFIFO(m_centerPosX, m_centerPosY);

//	if((WaitForTimeslice()) > 1)
	{
		m_prevTime = m_curTime;
		pDoc->m_pathData.SendDataToController();
	}
}

bool CBaseView::QueryStopMsg()
{
	CStlDoc* pDoc=GetDocument( );
	ASSERT(pDoc);

	if(pDoc->m_pathData.m_IPInfo.GetFlagBit(4))
	{
		if(m_bStop)	//push stop key
		{
			m_bStop = FALSE;
			pDoc->m_pathData.ClearInstruction();
		}

		return TRUE;
	}
	else
	{
		return FALSE;	
	}
}

void CBaseView::MsgProcFunc()
{
	MSG	message;
	while(::PeekMessage(&message, NULL, 0, 0, PM_REMOVE))
	{
		::TranslateMessage(&message);
		::DispatchMessage(&message); 
	}
}

void CBaseView::SlsScheduler()
{
	CStlDoc* pDoc=GetDocument( );
	ASSERT(pDoc);

	while(TRUE)
	{
		MsgProcFunc();

		if(QueryStopMsg())
		{
			m_bStartup = FALSE;
			break;
		}

		PathLayout();

		RandomRotation();
		pDoc->UpdateAllViews(NULL, ID_HINT_SINGLE_SLICE);

		if(pDoc->m_pathData.m_IPInfo.GetFlagBit(7))
		{
			ShowCurManuInfo();
		}
	}

	AfxMessageBox("制造过程结束!");
}

void CBaseView::ShowCurManuInfo()
{
	CStlDoc* pDoc=GetDocument();
	CSlsApp* pSlsApp = ( CSlsApp* )AfxGetApp();
	CMainFrame* pMainWnd = ( CMainFrame* )pSlsApp->m_pMainWnd;
	CDialogBar* pDialog = &(pMainWnd->m_wndEntityDialogBar);
	CStatusBar* pStatus = &(pMainWnd->m_wndStatusBar);

	CString str;
	DWORD axisZPos = _inpd(0x8324);
	double curHeight = axisZPos/400.0 + m_startHeight;
	int curLayers = int(curHeight/m_layerThickness);

	int flag;
	flag = pDoc->m_pathData.m_IPInfo.GetFlagBit(4);
	if(!flag)
	{
		str.Format("%7.2f", curHeight);
		pDialog->SetDlgItemText(IDC_CUR_HEIGHT, str);
		pDialog->SetDlgItemInt(IDC_CUR_LAYERS, curLayers);

		flag = pDoc->m_pathData.m_IPInfo.GetFlagBit(9);
		if(flag)
		{
			str.Format("%s", "正在制造基底!");
			pStatus->SetPaneText(0, str);
		}
		else
		{
			flag=pDoc->m_pathData.m_IPInfo.GetFlagBit(7);
			if(flag)
			{
				str.Format("%s", "正在进行叠层制造过程!");
				pStatus->SetPaneText(0, str);
			}
			else
			{
				str.Format("%s", "正在进行单层制造过程!");
				pStatus->SetPaneText(0, str);
			}
		}
	}
	else
	{
		str.Format("%s", "制造过程结束!");
		pStatus->SetPaneText(0, str);
	}
}

long  CBaseView::WaitForTimeslice( void )
{
	 time( &m_curTime );

	 return (m_curTime - m_prevTime);
}

bool CBaseView::CreateBaseData(SCANPATH& pathData, int curLayerNum)
{
	CStlDoc* pDoc=GetDocument();
	ASSERT(pDoc);

	pathData.polygons.SetSize(0);	
	pathData.polylines.SetSize(0);	
	
	double curHeight = curLayerNum*m_layerThickness;
	if(curHeight > m_height)	//高度方向上的误差 < 单层厚度/2
	{
		if(fabs(curHeight - m_height) > m_layerThickness/2.0)
		{
			return FALSE;
		}
	}

	C2DPoint vertex;
	C2DRing boundRect;
	C2DContour baseContour; 

	boundRect.SetSize(0);
	baseContour.SetSize(0);

	vertex.m_dX = pDoc->m_pathData.m_Solid.m_xMin;
	vertex.m_dY = pDoc->m_pathData.m_Solid.m_yMin;
	boundRect.Add(vertex);

	vertex.m_dX = pDoc->m_pathData.m_Solid.m_xMax;
	vertex.m_dY = pDoc->m_pathData.m_Solid.m_yMin;
	boundRect.Add(vertex);

	vertex.m_dX = pDoc->m_pathData.m_Solid.m_xMax;
	vertex.m_dY = pDoc->m_pathData.m_Solid.m_yMax;
	boundRect.Add(vertex);

	vertex.m_dX = pDoc->m_pathData.m_Solid.m_xMin;
	vertex.m_dY = pDoc->m_pathData.m_Solid.m_yMax;
	boundRect.Add(vertex);

	boundRect.m_bOuterLoop = TRUE;
	boundRect.Find_Min_Max_Value();

	baseContour.Add(boundRect);
	baseContour.Find_Min_Max_Value();

	baseContour.m_ScanWidth=m_scanWidth;

	if(curLayerNum%2)
	{
		baseContour.ScanPathPerLayer(pathData, PI/2.0);
	}
	else
	{
		baseContour.ScanPathPerLayer(pathData, 0.0);
	}

	return TRUE;
}

void CBaseView::ManuManager(CStlDoc* pDoc)
{
	//初始化参数项
	ReadParamFromAppIniFile();
	InitializePathParam();
	m_CurLayerNum = int(m_startHeight/m_layerThickness);

	//初始化数据项
	if((m_manuMode != SIMULATION) && (m_manuMode != AUTOMANU))
		pDoc->m_pathData.m_pFIFO->InitFIFO();
	
	pDoc->m_pathData.m_scanPath.polygons.SetSize(0);
	pDoc->m_pathData.m_scanPath.polylines.SetSize(0);
	
	//初始化标志位
	pDoc->m_pathData.m_IPInfo.ResetFlagBit(4);
	
	if(m_manuMode != SIMULATION)
	{
		pDoc->m_pathData.m_IPInfo.ResetFlagBit(0);			
		pDoc->m_pathData.m_IPInfo.ResetFlagBit(1);	
		pDoc->m_pathData.m_IPInfo.ResetFlagBit(2); 
		pDoc->m_pathData.m_IPInfo.SetFlagBit(3);			
		pDoc->m_pathData.m_IPInfo.ResetFlagBit(5);
		
		if(m_manuMode == SINGLE)
		{
			pDoc->m_pathData.m_IPInfo.ResetFlagBit(6);			
			pDoc->m_pathData.m_IPInfo.ResetFlagBit(7);
		}
		else
		{
			pDoc->m_pathData.m_IPInfo.SetFlagBit(6);			
			pDoc->m_pathData.m_IPInfo.SetFlagBit(7);
		}

		pDoc->m_pathData.m_IPInfo.ResetFlagBit(8);

		if(m_manuMode == MANUBASE)
		{
			pDoc->m_pathData.m_IPInfo.SetFlagBit(9);
		}
		else
		{
			pDoc->m_pathData.m_IPInfo.ResetFlagBit(9);
		}

		//初始化断点指针
		pDoc->m_pathData.m_IPInfo.m_1thIP = 0;				
		pDoc->m_pathData.m_IPInfo.m_2thIP = 0;
		pDoc->m_pathData.m_IPInfo.m_3thIP = 0;	
	}

	if((m_manuMode == SIMULATION))
	{
		while(pDoc->m_pathData.CreatePathData(++m_CurLayerNum))
		{
			MsgProcFunc();

			if(QueryStopMsg())
				break;

			RandomRotation();
			pDoc->UpdateAllViews(NULL, ID_HINT_SINGLE_SLICE);

			Sleep(2500);
		}
	}
	else
	{
		if(m_manuMode != AUTOMANU)
		{
			//修改U轴和V轴的当前坐标
			if(m_manuMode != SINGLE)
			{
				pDoc->m_pathData.m_axisZPos = 0;
				pDoc->m_pathData.m_axisVPos = 0;
				pDoc->m_pathData.SetAxisInitPos();
			}

			if(!m_bStartup)
			{
				m_bStartup=TRUE;
				SlsScheduler();
			}
		
		}
	}
}

DWORD CBaseView::CalculateLaserPower(double val)
{
	DWORD retVal;
	if(val < 8.8)
	{
		retVal=0x000;		
	}
	else
	{
		if(( val >= 8.8) && (val < 10.8))
		{
			retVal=(DWORD)(0x100*(val-8.8)/2.0);		
		}
		else
		{
			if((val >= 10.8) && (val < 15))
			{
				retVal=(DWORD)(0x100*(val-10.8)/4.2)+0x100;		
			}
			else
			{
				if((val >= 15) && (val < 19.6))
				{
					retVal=(DWORD)(0x100*(val-15)/4.6)+0x200;		
				}
				else
				{
					if((val >= 19.6) && (val < 25.1))
					{
						retVal=(DWORD)(0x100*(val-19.6)/5.5)+0x300;		
					}
					else
					{
						if((val >= 25.1) && (val < 28.1))
						{
							retVal=(DWORD)(0x100*(val-19.6)/3.0)+0x400;		
						}
						else
						{
							if((val >= 28.1) && (val < 29.8))
							{
								retVal=(DWORD)(0x100*(val-28.1)/1.7)+0x500;		
							}
							else
							{
								if((val >= 29.8) && (val < 32.1))
								{
									retVal=(DWORD)(0x100*(val-29.8)/2.3)+0x600;		
								}
								else
								{
									if((val >= 32.1) && (val < 34.1))
									{
										retVal=(DWORD)(0x100*(val-32.1)/2.0)+0x700;		
									}
									else
									{
										if((val >= 34.1) && (val < 35.1))
										{
											retVal=(DWORD)(0x100*(val-34.1)/1.0)+0x800;		
										}
										else
										{
											if((val >= 35.1) && (val < 36.0))
											{
												retVal=(DWORD)(0x100*(val-35.1)/0.9)+0x900;		
											}
											else
											{
												if((val >= 36.0) && (val < 36.8))
												{
													retVal=(DWORD)(0x100*(val-36.0)/0.8)+0xa00;		
												}
												else
												{
													if((val >= 36.8) && (val < 37.8))
													{
														retVal=(DWORD)(0x100*(val-36.8)/1.0)+0xb00;		
													}
													else
													{
														if((val >= 37.8) && (val < 39.9))
														{
															retVal=(DWORD)(0x100*(val-37.8)/2.1)+0xc00;		
														}
														else
														{
															if((val >= 39.9) && (val < 40.8))
															{
																retVal=(DWORD)(0x100*(val-39.9)/0.9)+0xd00;		
															}
															else
															{
																if((val >= 40.8) && (val < 41.5))
																{
																	retVal=(DWORD)(0x1ff*(val-40.8)/0.7)+0xe00;
																}
																else
																{
																	if((val >= 41.5) && (val < 42.0))
																	{
																		retVal=0xfff-(DWORD)(0xff*(val-41.5)/0.5);
																	}
																	else
																	{
																		retVal=0xfff;		
																	}
																}
															}
														}
													}
												}
											}
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}

	return retVal;
}

void CBaseView::RandomRotation()
{
	// Virtual function does nothing.
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -