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

📄 finiteelementview.cpp

📁 自编的有限元方法解决弹性力学平面问题的软件。有图形显示
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			pDC->TextOut(start.x+(j+1)*4*m_line,start.y+(i+1)*m_line,str);
		}
	}
	//-----------------------------------------
	start=CPoint(start.x+3*m_line,start.y+m_line*pDoc->m_structure.m_element_num+2*m_line);
	pDC->TextOut(start.x-3*m_line,start.y,"结构中所有结点信息:");
	pDC->TextOut(start.x-3*m_line,start.y+m_line,"结点号  结点坐标  支承情况   荷载情况");
	for(i=0;i<pDoc->m_structure.m_node_num;i++)
	{
		pNode=(CNode*)(pDoc->m_structure.m_nodeArray.GetAt(i));
		sprintf(str,"结点%d:",pNode->m_node_id);
		pDC->TextOut(start.x-m_line*3,start.y+m_line*2*(i+1),str);
		for(j=0;j<2;j++)
		{
			sprintf(str,"%7.5e",pNode->m_nodexy[j]);
			pDC->TextOut(start.x,start.y+m_line*(2*i+1)+(j+1)*m_line,str);
			sprintf(str,"%d",pNode->m_supportinfo[j]);
			pDC->TextOut(start.x+m_line*7,start.y+m_line*(2*i+1)+(j+1)*m_line,str);
			sprintf(str,"%7.5e",pNode->m_loadinfo[j]);
			pDC->TextOut(start.x+m_line*10,start.y+m_line*(2*i+1)+(j+1)*m_line,str);
		}
	}


}

void CFiniteElementView::DisplayStructureGraph(CDC *pDC, CFiniteElementDoc *pDoc)
{
	SetScrollSizes(MM_TEXT, CSize(40*m_line,2*m_page));
	CElement* pElement;
	int i,j;
	int dx;
	char str[20];
	CPoint cp1,cp2,cp3,start;
	CPoint tempoint;
	CPen pen;
	CFont* pOldFont;
	int scale=1;
	start=CPoint(5*m_line,5*m_line);
	//----------------------
	if(!pDC->IsPrinting())
	{
		CRect rect;
		GetClientRect(&rect);
		pDC->SelectStockObject(GRAY_BRUSH);
		pDC->Rectangle(&CRect(0,0,rect.right,m_page*2));
		pDC->SelectStockObject(WHITE_BRUSH);
		pDC->Rectangle(CRect(start.x-2*m_line,start.y-2*m_line,
			start.x+35*m_line,2*m_page-10*m_line));
	}
	//------------------------------
	pen.CreatePen(PS_SOLID,(int)(m_line/10),RGB(128,0,255));
	pDC->SetTextColor(RGB(128,0,128));
	pOldFont=pDC->SelectObject(&m_title_font);
	//-------------------------------
	pDC->TextOut(start.x+5*m_line,start.y,"数据文件所确定的结构图形如下");
	pDC->SelectObject(pOldFont);
	pDC->SelectObject(&pen);
	start=CPoint(start.x,start.y+m_line*6*pDoc->m_structure.m_node_num/3);
	for(i=0;i<pDoc->m_structure.m_elementArray.GetSize();i++)
	{
		pElement=(CElement*)(pDoc->m_structure.m_elementArray.GetAt(i));
		for(;;)
		{
			cp1=CPoint((int)(pElement->m_pNode[0]->m_nodexy[0]*scale),
				(int)(pElement->m_pNode[0]->m_nodexy[1]*scale*(-1)))+CPoint(8*m_line,0)+start;
			cp2=CPoint((int)(pElement->m_pNode[1]->m_nodexy[0]*scale),
				(int)(pElement->m_pNode[1]->m_nodexy[1]*scale*(-1)))+CPoint(8*m_line,0)+start;
			cp3=CPoint((int)(pElement->m_pNode[2]->m_nodexy[0]*scale),
				(int)(pElement->m_pNode[2]->m_nodexy[1]*scale*(-1)))+CPoint(8*m_line,0)+start;
			if(max(abs(cp1.x-cp2.x),abs(cp1.y-cp2.y))<5*m_line)scale+=2;
			else break;
		}	
		pDC->MoveTo(cp1);
		pDC->LineTo(cp2);
		pDC->LineTo(cp3);
		pDC->LineTo(cp1);
		dx=(m_line/5);
		pDC->Ellipse(cp1.x-dx,cp1.y-dx,cp1.x+dx,cp1.y+dx);
		pDC->Ellipse(cp2.x-dx,cp2.y-dx,cp2.x+dx,cp2.y+dx);
		pDC->Ellipse(cp3.x-dx,cp3.y-dx,cp3.x+dx,cp3.y+dx);
		//---------标注单元号---------
		pDC->SetTextColor(RGB(240,0,0));
		tempoint=CPoint(CPoint(cp1+cp2+cp3).x/3,CPoint(cp1+cp2+cp3).y/3);
		pDC->Ellipse(tempoint.x-(int)(m_line/2),tempoint.y-(int)(m_line/2),
			tempoint.x+(int)(m_line/2),tempoint.y+(int)(m_line/2));
		sprintf(str,"%d",pElement->m_element_id);
		pDC->DrawText(str,&CRect(tempoint.x-(int)(m_line/2),tempoint.y-(int)(m_line/2)
			,tempoint.x+(int)(m_line/2),tempoint.y+(int)(m_line/2)),DT_CENTER);
		//--------标注结点号-----------
		sprintf(str,"%d",pElement->m_pNode[0]->m_node_id);
		pDC->TextOut(cp1.x,cp1.y,str);
		sprintf(str,"%d",pElement->m_pNode[1]->m_node_id);
		pDC->TextOut(cp2.x,cp2.y,str);
		sprintf(str,"%d",pElement->m_pNode[2]->m_node_id);
		pDC->TextOut(cp3.x,cp3.y,str);
		//-----------------------------
	}
	start=CPoint(start.x,start.y+m_line*3);
	pDC->SetTextColor(RGB(128,0,200));
	pDC->TextOut(start.x,start.y,"1号单元的刚度矩阵如下:");
	//=============================================
	double ** elestiffmatrix;
	elestiffmatrix=new double*[6];//刚度矩阵
	for(i=0;i<6;i++)
	{
		elestiffmatrix[i]=new double[6];
	}
	if(pDoc->m_structure.m_elementArray.GetSize()>0)
		pElement=(CElement*)(pDoc->m_structure.m_elementArray.GetAt(0));
	else 
		return;
	pElement->GetElementStiffMatrix(elestiffmatrix);
	for(i=0;i<6;i++)
	{
		for(j=0;j<6;j++)
		{
			sprintf(str,"%7.4e",elestiffmatrix[i][j]);
			pDC->TextOut(start.x+j*5*m_line,start.y+m_line*(i+2),str);
		}
	}
	for(i=0;i<6;i++)
	{
		delete elestiffmatrix[i];
	}
	delete elestiffmatrix;
	//================================
	/*start=CPoint(start.x,start.y+6*m_line);
	double* loadvector;
	loadvector=new double[20];
	pDoc->m_structure.GetLoadVector(loadvector);
	for(i=0;i<20;i++)
	{
			sprintf(str,"结点%d     :%7.5e",i/2+1,loadvector[i]);
			pDC->TextOut(start.x,start.y+m_line*(i+2),str);
		
	}*/
}

void CFiniteElementView::DisplayAnalysisData(CDC *pDC, CFiniteElementDoc *pDoc)
{
	SetScrollSizes(MM_TEXT, CSize(40*m_line,3*m_page));
	CNode* tempNode;
	CElement* tempEle;
	int i;
	char tempstr[50];
	CPoint start(5*m_line,5*m_line);
	CFont* pOldFont;
	pOldFont=pDC->SelectObject(&m_title_font);
	pDC->SetTextColor(RGB(128,0,128));
	//----------------------
	if(!pDC->IsPrinting())
	{
		CRect rect;
		GetClientRect(&rect);
		pDC->SelectStockObject(GRAY_BRUSH);
		pDC->Rectangle(&CRect(0,0,rect.right,m_page*3));
		pDC->SelectStockObject(WHITE_BRUSH);
		pDC->Rectangle(CRect(start.x-2*m_line,start.y-2*m_line,
			start.x+35*m_line,3*m_page-10*m_line));
	}
	//------------------------------

	pDC->TextOut(start.x+5*m_line,start.y,"静力分析结果数据");
	pDC->SelectObject(pOldFont);
	pDC->TextOut(start.x,start.y+2*m_line,"各结点位移如下:");
	for(i=0;i<pDoc->m_structure.m_node_num;i++)
	{
		tempNode=(CNode*)(pDoc->m_structure.m_nodeArray.GetAt(i));
		sprintf(tempstr,"结点号:%d\0",tempNode->m_node_id);
		pDC->TextOut(start.x,start.y+m_line*(2*i+3),tempstr);
		sprintf(tempstr,"X位移:%7.5e\0",tempNode->m_displace[0]);
		pDC->TextOut(start.x+2*m_line,start.y+m_line*(2*i+4),tempstr);
		sprintf(tempstr,"Y位移:%7.5e\0",tempNode->m_displace[1]);
		pDC->TextOut(start.x+10*m_line,start.y+m_line*(2*i+4),tempstr);

	}
	start=CPoint(start.x,start.y+m_line*(pDoc->m_structure.m_node_num+2)*2);
	pDC->TextOut(start.x,start.y,"单元应力情况分析:");
	for(i=0;i<pDoc->m_structure.m_element_num;i++)
	{
		tempEle=(CElement*)(pDoc->m_structure.m_elementArray.GetAt(i));
		sprintf(tempstr,"单元号:%d\0",tempEle->m_element_id,tempEle->m_element_id);
		pDC->TextOut(start.x,start.y+m_line*(i*5+1),tempstr);
		sprintf(tempstr,"单元面积  :%7.5e",tempEle->m_area);
		pDC->TextOut(start.x,start.y+m_line*(i*5+2),tempstr);

		sprintf(tempstr,"X 应力分量:%7.5e\0",tempEle->m_sigmaX);
		pDC->TextOut(start.x,start.y+m_line*(i*5+3),tempstr);
		sprintf(tempstr,"X 应力分量:%7.5e\0",tempEle->m_sigmaY);
		pDC->TextOut(start.x,start.y+m_line*(i*5+4),tempstr);
		sprintf(tempstr,"剪切力分量:%7.5e\0",tempEle->m_taoXY);
		pDC->TextOut(start.x,start.y+m_line*(i*5+5),tempstr);
		sprintf(tempstr,"最大主应力:%7.5e\0",tempEle->m_maxMainStress);
		pDC->TextOut(start.x+10*m_line,start.y+m_line*(i*5+3),tempstr);
		sprintf(tempstr,"最小主应力:%7.5e\0",tempEle->m_minMainStress);
		pDC->TextOut(start.x+10*m_line,start.y+m_line*(i*5+4),tempstr);
		sprintf(tempstr,"主平面角 :%7.5e\0",tempEle->m_mainPlaneAngle);
		pDC->TextOut(start.x+10*m_line,start.y+m_line*(i*5+5),tempstr);
	}
}
void CFiniteElementView::DisplayFirst(CDC *pDC)
{
	SetScrollSizes(MM_TEXT, CSize(40*m_line,10*m_line));
	CPoint start(5*m_line,5*m_line);
	//---------没有打印时页面边框--------
	if(!pDC->IsPrinting())
	{
		CRect rect;
		GetClientRect(&rect);
		pDC->SelectStockObject(GRAY_BRUSH);
		pDC->Rectangle(&rect);
		pDC->SelectStockObject(WHITE_BRUSH);
		pDC->Rectangle(CRect(start.x-2*m_line,start.y-2*m_line,
			start.x+25*m_line,start.y+10*m_line));
	}
	//--------------
	CFont* pOldFont;
	pOldFont=pDC->SelectObject(&m_title_font);
	pDC->SetTextColor(RGB(128,0,128));
	pDC->TextOut(start.x,start.y,"当前没有输入数据,请打开数据文件");
	pDC->TextOut(start.x,start.y+2*m_line,"打开后,从查看菜单中选择要看的数据结果。");
	pDC->SelectObject(pOldFont);
	pDC->TextOut(start.x,start.y+6*m_line,"[石油大学 数理系 无线电物理实验室所有]");
	pDC->TextOut(start.x,start.y+7*m_line,"                                2004-3");
}

void CFiniteElementView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo) 
{
	// TODO: Add your specialized code here and/or call the base class
	
	CScrollView::OnPrepareDC(pDC, pInfo);
	if(pDC->IsPrinting())
	{
		m_line=(int)(m_linebase*pDC->GetDeviceCaps(LOGPIXELSY)/96);
		m_page=(int)(m_pagebase*pDC->GetDeviceCaps(LOGPIXELSY)/96);
		m_title_font.CreateFont(int(m_line*1.2),0,0,0,FW_BOLD,FALSE,FALSE,FALSE,
		GB2312_CHARSET,OUT_TT_PRECIS,CLIP_TT_ALWAYS,
		DEFAULT_QUALITY,DEFAULT_PITCH,"方正姚体");
		m_content_font.CreateFont(int(m_line*0.9),0,0,0,FW_THIN,FALSE,FALSE,FALSE,
		GB2312_CHARSET,OUT_TT_PRECIS,CLIP_TT_ALWAYS,
		DEFAULT_QUALITY,DEFAULT_PITCH,"FIXEDSYS");

	}
	else
	{
		m_line=20;
		m_page=600;
		m_title_font.CreateFont(int(m_line*1.2),0,0,0,FW_BOLD,FALSE,FALSE,FALSE,
		GB2312_CHARSET,OUT_TT_PRECIS,CLIP_TT_ALWAYS,
		DEFAULT_QUALITY,DEFAULT_PITCH,"方正姚体");
		m_content_font.CreateFont(int(m_line*0.9),0,0,0,FW_THIN,FALSE,FALSE,FALSE,
		GB2312_CHARSET,OUT_TT_PRECIS,CLIP_TT_ALWAYS,
		DEFAULT_QUALITY,DEFAULT_PITCH,"FIXEDSYS");
	}
}

⌨️ 快捷键说明

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