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

📄 mainfrm.cpp

📁 数据结构链表的演示程序
💻 CPP
📖 第 1 页 / 共 5 页
字号:

	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 + -