📄 mainfrm.cpp
字号:
if(!pDoc->m_bDone)
{
if(!OnAnalyzeName())
return;
}
if(pDoc->m_nShow!=SHOWBLOCKCOORDS)
{
pDoc->m_nShow=SHOWBLOCKCOORDS;
pDoc->UpdateAllViews(NULL,TXTVIEW,NULL);
}
SwitchToView(theApp.m_pTextTemplate,RUNTIME_CLASS(CTXTView));
if (pDoc->m_bSaveTip)
pDoc->OnSaveDocument(NULL);
}
void CMainFrame::OnNumber()
{
CLSDoc * pDoc=GetDocument();
if(!pDoc->m_bDone)
{
if(!OnAnalyzeName())
return;
}
if(pDoc->m_nShow!=SHOWALLPROPERTY)
{
pDoc->m_nShow=SHOWALLPROPERTY;
pDoc->UpdateAllViews(NULL,TXTVIEW,NULL);
}
SwitchToView(theApp.m_pTextTemplate,RUNTIME_CLASS(CTXTView));
if (pDoc->m_bSaveTip)
pDoc->OnSaveDocument(NULL);
}
void CMainFrame::OnAllindex()
{
CLSDoc * pDoc=GetDocument();
if(!pDoc->m_bDone)
{
if(!OnAnalyzeName())
return;
}
if(pDoc->m_nShow!=SHOWALLINDEX)
{
pDoc->m_nShow=SHOWALLINDEX;
pDoc->UpdateAllViews(NULL,TXTVIEW,NULL);
}
SwitchToView(theApp.m_pTextTemplate,RUNTIME_CLASS(CTXTView));
}
void CMainFrame::OnTypeindex()
{
CLSDoc * pDoc=GetDocument();
if(!pDoc->m_bDone)
{
if(!OnAnalyzeName())
return;
}
if(pDoc->m_nShow!=SHOWTYPEINDEX)
{
pDoc->m_nShow=SHOWTYPEINDEX;
pDoc->UpdateAllViews(NULL,TXTVIEW,NULL);
}
SwitchToView(theApp.m_pTextTemplate,RUNTIME_CLASS(CTXTView));
}
void CMainFrame::OnRollover() // 连结度指数
{
CLSDoc * pDoc=GetDocument();
if(!pDoc->m_bDone)
{
if(!OnAnalyzeName())
return;
}
CString result;
result.Format("\r\n\t*** 景观连结度类指数 ***\r\n\r\n景观名\t颜色值\t斑块平均最短距离(Ds)\t相邻度指数(Ls)\t斑块相互作用指数(Rs)\r\n\r\n");
for(int i=0;i<pDoc->m_BlockTypes.GetSize();i++)
{
CString tmpstr;
tmpstr.Format("%s\t%d\t%25.4f\t%25.4f\t%30.4f\r\n",
pDoc->m_BlockTypes[i].Name,
pDoc->m_BlockTypes[i].Val,
pDoc->m_Results.MinDistance[i],
pDoc->m_Results.Neighbour[i],
pDoc->m_Results.Interaction[i]);
result=result+tmpstr;
}
CResultDlg resultdlg(this,result);
resultdlg.DoModal();
}
void CMainFrame::OnShape() // 形状类指数
{
CLSDoc * pDoc=GetDocument();
if(!pDoc->m_bDone)
{
if(!OnAnalyzeName())
return;
}
CString result;
result.Format("\r\n\t*** 景观形状类指数 ***\r\n\r\n景观名\t颜色值\t分维指数(D)\t形状指数(S2)\r\n\r\n");
for(int i=0;i<pDoc->m_BlockTypes.GetSize();i++)
{
CString tmpstr;
tmpstr.Format("%s\t%d\t%12.4f\t%12.4f\r\n",
pDoc->m_BlockTypes[i].Name,
pDoc->m_BlockTypes[i].Val,
pDoc->m_Results.Split[i],
pDoc->m_Results.Shape[i]);
result=result+tmpstr;
}
CResultDlg resultdlg(this,result);
resultdlg.DoModal();
}
void CMainFrame::OnAll()
{
CLSDoc * pDoc=GetDocument();
if(!pDoc->m_bDone)
{
if(!OnAnalyzeName())
return;
}
if(pDoc->m_nShow!=SHOWBLOCKALL)
{
pDoc->m_nShow=SHOWBLOCKALL;
pDoc->UpdateAllViews(NULL,TXTVIEW,NULL);
}
SwitchToView(theApp.m_pTextTemplate,RUNTIME_CLASS(CTXTView));
if (pDoc->m_bSaveTip)
pDoc->OnSaveDocument(NULL);
}
void CMainFrame::OnFlocculusArea()
{
CLSDoc * pDoc=GetDocument();
double MaxArea=pDoc->m_nWidth*pDoc->m_nHeight;
double MaxBlockNum=pDoc->m_BlockNum;
if(!pDoc->m_bDone)
{
if(!OnAnalyzeName())
return;
}
CString minmax;
minmax.Format("斑块面积最小值为:%ld,最大值为:%ld,平均值为:%.4f。",
pDoc->m_nMinBlockArea,pDoc->m_nMaxBlockArea,MaxArea/MaxBlockNum);
CFlocDlg flocdlg(this,minmax);
UINT back=flocdlg.DoModal();
if(back!=IDOK)
return;
UINT SlipNum=flocdlg.m_nSlipNum;
long *Slips=flocdlg.m_Slips;
long * resultarray=pDoc->CalcFloc(SlipNum,Slips,1);
CString result;
result.Format("\t\t=== 面积谱分析 ===\r\n\r\n分为 %d 段\t 0 - %8ld\t",SlipNum,Slips[0]);
CString tmpstr;
for(UINT i=0;i<SlipNum-2;i++)
{
tmpstr.Format("%8ld - %8ld\t",Slips[i]+1,Slips[i+1]);
result+=tmpstr;
}
tmpstr.Format("%8ld 以上(不含 %ld )\r\n",Slips[SlipNum-2],Slips[SlipNum-2]);
result+=tmpstr;
result+="\r\n\r\n***** 总体分析 *****\r\n该段斑块数目";
for(UINT j=0;j<SlipNum;j++)
{
tmpstr.Format("\t%19ld",resultarray[j]);
result+=tmpstr;
}
result+="\r\n占总斑块数比例";
for(UINT j1=0;j1<SlipNum;j1++)
{
tmpstr.Format("\t%19.4f",double(resultarray[j1])/MaxBlockNum);
result+=tmpstr;
}
result+="\r\n该段面积之和";
for(UINT k=0;k<SlipNum;k++)
{
tmpstr.Format("\t%19ld",resultarray[SlipNum+k]);
result+=tmpstr;
}
result+="\r\n占总面积比例";
for(UINT k1=0;k1<SlipNum;k1++)
{
tmpstr.Format("\t%19.4f",double(resultarray[SlipNum+k1])/MaxArea);
result+=tmpstr;
}
BYTE typenum=pDoc->m_BlockTypes.GetSize();
for(UINT l=1;l<=typenum;l++)
{
double blocknum=pDoc->m_BlockTypes[l-1].Number;
double area=pDoc->m_BlockTypes[l-1].Area;
tmpstr.Format("\r\n\r\n***** 第 %2d 类分析 *****",l);
result+=tmpstr;
result+="\r\n该段斑块数目";
for(UINT m=0;m<SlipNum;m++)
{
tmpstr.Format("\t%19ld",resultarray[2*l*SlipNum+m]);
result+=tmpstr;
}
result+="\r\n占该类数目比例";
for(UINT m1=0;m1<SlipNum;m1++)
{
tmpstr.Format("\t%19.4f",
double(resultarray[2*l*SlipNum+m1])/blocknum);
result+=tmpstr;
}
result+="\r\n占总数目比例";
for(UINT m2=0;m2<SlipNum;m2++)
{
tmpstr.Format("\t%19.4f",
double(resultarray[2*l*SlipNum+m2])/MaxBlockNum);
result+=tmpstr;
}
result+="\r\n该段面积之和";
for(UINT n=0;n<SlipNum;n++)
{
tmpstr.Format("\t%19ld",resultarray[(2*l+1)*SlipNum+n]);
result+=tmpstr;
}
result+="\r\n占该类面积比例";
for(UINT n1=0;n1<SlipNum;n1++)
{
tmpstr.Format("\t%19.4f",double(resultarray[(2*l+1)*SlipNum+n1])/area);
result+=tmpstr;
}
result+="\r\n占总面积比例";
for(UINT n2=0;n2<SlipNum;n2++)
{
tmpstr.Format("\t%19.4f",double(resultarray[(2*l+1)*SlipNum+n2])/MaxArea);
result+=tmpstr;
}
}
CResultDlg resultdlg(this,result,TRUE,1,typenum,resultarray,flocdlg.m_nSlipNum);
resultdlg.DoModal();
}
void CMainFrame::OnFlocculusLeng()
{
CLSDoc * pDoc=GetDocument();
if(!pDoc->m_bDone)
{
if(!OnAnalyzeName())
return;
}
double MaxLeng=0;
double MaxBlockNum=pDoc->m_BlockNum;
BYTE typenum=pDoc->m_BlockTypes.GetSize();
for(BYTE in=0;in<typenum;in++)
{
MaxLeng+=pDoc->m_BlockTypes[in].Length;
}
CString minmax;
minmax.Format("斑块周长最小值为:%ld,最大值为:%ld,平均值为:%.4f。",
pDoc->m_nMinBlockLeng,pDoc->m_nMaxBlockLeng,MaxLeng/MaxBlockNum);
CFlocDlg flocdlg(this,minmax);
UINT back=flocdlg.DoModal();
if(back!=IDOK)
return;
UINT SlipNum=flocdlg.m_nSlipNum;
long *Slips=flocdlg.m_Slips;
long * resultarray=pDoc->CalcFloc(SlipNum,Slips,2);
CString result;
result.Format("\t\t=== 周长谱分析 ===\r\n\r\n分为 %d 段\t 0 - %8ld\t",SlipNum,Slips[0]);
CString tmpstr;
for(UINT i=0;i<SlipNum-2;i++)
{
tmpstr.Format("%8ld - %8ld\t",Slips[i]+1,Slips[i+1]);
result+=tmpstr;
}
tmpstr.Format("%8ld 以上(不含 %ld )\r\n",Slips[SlipNum-2],Slips[SlipNum-2]);
result+=tmpstr;
result+="\r\n\r\n***** 总体分析 *****\r\n该段斑块数目";
for(UINT j=0;j<SlipNum;j++)
{
tmpstr.Format("\t%19ld",resultarray[j]);
result+=tmpstr;
}
result+="\r\n占总斑块数比例";
for(UINT j1=0;j1<SlipNum;j1++)
{
tmpstr.Format("\t%19.4f",double(resultarray[j1])/MaxBlockNum);
result+=tmpstr;
}
result+="\r\n该段周长之和";
for(UINT k=0;k<SlipNum;k++)
{
tmpstr.Format("\t%19ld",resultarray[SlipNum+k]);
result+=tmpstr;
}
result+="\r\n占总周长比例";
for(UINT k1=0;k1<SlipNum;k1++)
{
tmpstr.Format("\t%19.4f",double(resultarray[SlipNum+k1])/MaxLeng);
result+=tmpstr;
}
for(UINT l=1;l<=typenum;l++)
{
double blocknum=pDoc->m_BlockTypes[l-1].Number;
double leng=pDoc->m_BlockTypes[l-1].Length;
tmpstr.Format("\r\n\r\n***** 第 %2d 类分析 *****",l);
result+=tmpstr;
result+="\r\n该段斑块数目";
for(UINT m=0;m<SlipNum;m++)
{
tmpstr.Format("\t%19ld",resultarray[2*l*SlipNum+m]);
result+=tmpstr;
}
result+="\r\n占该类数目比例";
for(UINT m1=0;m1<SlipNum;m1++)
{
tmpstr.Format("\t%19.4f",
double(resultarray[2*l*SlipNum+m1])/blocknum);
result+=tmpstr;
}
result+="\r\n占总数目比例";
for(UINT m2=0;m2<SlipNum;m2++)
{
tmpstr.Format("\t%19.4f",
double(resultarray[2*l*SlipNum+m2])/MaxBlockNum);
result+=tmpstr;
}
result+="\r\n该段周长之和";
for(UINT n=0;n<SlipNum;n++)
{
tmpstr.Format("\t%19ld",resultarray[(2*l+1)*SlipNum+n]);
result+=tmpstr;
}
result+="\r\n占该类周长比例";
for(UINT n1=0;n1<SlipNum;n1++)
{
tmpstr.Format("\t%19.4f",double(resultarray[(2*l+1)*SlipNum+n1])/leng);
result+=tmpstr;
}
result+="\r\n占总周长比例";
for(UINT n2=0;n2<SlipNum;n2++)
{
tmpstr.Format("\t%19.4f",double(resultarray[(2*l+1)*SlipNum+n2])/MaxLeng);
result+=tmpstr;
}
}
CResultDlg resultdlg(this,result,TRUE,2,typenum,resultarray,flocdlg.m_nSlipNum);
resultdlg.DoModal();
}
void CMainFrame::OnInfo()
{
CLSDoc * pDoc=GetDocument();
if(!pDoc->m_bDone)
{
if(!OnAnalyzeName())
return;
}
CInfoDlg infodlg;
if(infodlg.DoModal()!=IDOK)
return;
long width=pDoc->m_nWidth;
long height=pDoc->m_nHeight;
UINT segleng=infodlg.m_nSegNum;
pDoc->m_nInfoLeng=segleng;
pDoc->m_bInfo=TRUE;
pDoc->m_InfoLines.RemoveAll();
if(infodlg.m_bMulti)
{
if(infodlg.m_bLine)
{
double leng=double(height)/double(infodlg.m_nLine+1);
Line tmpLine;
for(UINT i=1;i<=infodlg.m_nLine;i++)
{
tmpLine.x1=0;
tmpLine.y1=i*leng+0.5;
tmpLine.x2=width;
tmpLine.y2=i*leng+0.5;
pDoc->m_InfoLines.Add(tmpLine);
}
}
if(infodlg.m_bCol)
{
double leng=double(width)/double(infodlg.m_nCol+1);
Line tmpLine;
for(UINT i=1;i<=infodlg.m_nCol;i++)
{
tmpLine.x1=i*leng+0.5;
tmpLine.y1=0;
tmpLine.x2=i*leng+0.5;
tmpLine.y2=height;
pDoc->m_InfoLines.Add(tmpLine);
}
}
}
else
{
pDoc->m_InfoLines.SetSize(1);
if(infodlg.m_bXY)
{
pDoc->m_InfoLines[0].x1=infodlg.m_nX1;
pDoc->m_InfoLines[0].y1=infodlg.m_nY1;
pDoc->m_InfoLines[0].x2=infodlg.m_nX2;
pDoc->m_InfoLines[0].y2=infodlg.m_nY2;
}
else
{
pDoc->m_bMouseLine=TRUE;
return;
}
}
OnViewPicturewindow();
pDoc->UpdateAllViews(NULL,PICVIEW,NULL);
CString strResult;
strResult.Format("\r\n\t\t****** 信息熵指数 ******\r\n\r\n");
for(UINT ii=0;ii<pDoc->m_InfoLines.GetSize();ii++)
{
CString tmpstr;
tmpstr.Format("\t\t==== 第 %d 条样线 ====\r\n\r\n样段数",ii+1);
strResult+=tmpstr;
for(UINT jj=0;jj<pDoc->m_BlockTypes.GetSize();jj++)
{
strResult+="\t";
strResult+=pDoc->m_BlockTypes[jj].Name;
}
strResult+="\r\n";
CArray<float,float> nResult;
pDoc->CalcInfoIndex(pDoc->m_InfoLines[ii],nResult);
for(UINT kk=0;kk<nResult.GetSize();kk++)
{
if(kk%(pDoc->m_BlockTypes.GetSize()+1)==0)
strResult+="\r\n";
tmpstr.Format("%7.4f\t",nResult[kk]);
strResult+=tmpstr;
}
strResult+="\r\n\r\n";
}
CResultDlg resultdlg(this,strResult);
resultdlg.DoModal();
}
void CMainFrame::OnSpace()
{
CLSDoc * pDoc=GetDocument();
if(!pDoc->m_bDone)
{
if(!OnAnalyzeName())
return;
}
UINT width=pDoc->m_nWidth;
UINT height=pDoc->m_nHeight;
BYTE typenum=pDoc->m_BlockTypes.GetSize();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -