📄 baseview.cpp
字号:
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 + -