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

📄 oopfeview.cpp

📁 一个计算悬臂梁的有限元vc源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	fout<<sText<<endl;
}

void COOPFEView::DXFPline(ofstream &fout, double dX, double dY, double dX1, double dY1,double dWidth)
{
	fout<<"  0"<<endl;
	fout<<"POLYLINE"<<endl;
	fout<<"  8"<<endl;
	fout<<"0"<<endl;
	fout<<" 66"<<endl;
	fout<<"1"<<endl;
	fout<<" 40"<<endl;
	fout<<"0.0"<<endl;
	fout<<" 41"<<endl;
	fout<<"0.0"<<endl;
	fout<<"  0"<<endl;
	fout<<"VERTEX"<<endl;
	fout<<"  8"<<endl;
	fout<<"0"<<endl;
	fout<<" 10"<<endl;
	fout<<dX<<endl;
	fout<<" 20"<<endl;
	fout<<dY<<endl;
	fout<<" 40"<<endl;
	fout<<dWidth<<endl;
	fout<<" 41"<<endl;
	fout<<dWidth<<endl;
	fout<<"  0"<<endl;
	fout<<"VERTEX"<<endl;
	fout<<"  8"<<endl;
	fout<<"0"<<endl;
	fout<<" 10"<<endl;
	fout<<dX1<<endl;
	fout<<" 20"<<endl;
	fout<<dY1<<endl;
	fout<<"  0"<<endl;
	fout<<"SEQEND"<<endl;
	fout<<"  8"<<endl;
	fout<<"0"<<endl;
}

void COOPFEView::OnOutputDxfMoment() 
{
	// TODO: Add your command handler code here
	COOPFEDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);

	int loop,loop1,iBuf,nEle,nEleNode,aiNode[8];
	double adM[11],adQ[11],dN,dMaxMoment;
	double dScaleMomentToD,dScaleMomentToDXF,dTextHeight;
	double dCos,dSin,dLength,dAngle;
	CTypedPtrArray <CPtrArray,CBaseElement*>& apEle=pDoc->m_glEle.m_apEle;
	CNode& Node=pDoc->m_glEle.m_Node;
	double dXi0,dXj0,dXk0,dYi0,dYj0,dYk0;
	double adX[13],adY[13];
	CString sText;
	CString sFileName;
	ofstream fout;

	if(!pDoc->m_glEle.m_bFlagForceAnalyzed) return;
	
	CFileDialog dlg(FALSE);
	char sFilter[]="DXF(*.dxf)\0*.dxf\0\0";
	dlg.m_ofn.lpstrFilter=sFilter;

	if(dlg.DoModal()==IDOK){
		sFileName=dlg.GetPathName();
		if(sFileName.GetLength()==0) return;
		if(sFileName.Find(".dxf")<0) sFileName+=".dxf";
		fout.open(sFileName);
	}

	fout<<"  0"<<endl;
	fout<<"SECTION"<<endl;
	fout<<"  2"<<endl;
	fout<<"ENTITIES"<<endl;

	OutputDxfElement(fout);

	dMaxMoment=0.0;
	nEle=apEle.GetSize();
	for(loop=0;loop<nEle;loop++){
		iBuf=apEle[loop]->GetElementType();
		if(iBuf==BEAM||iBuf==BEAM_HINGE){
			((CBeam*)apEle[loop])->GetSectionForce(dN,adQ,adM);
			for(loop1=0;loop1<11;loop1++){
				if(adM[loop1]<0.0){
					if(dMaxMoment<-adM[loop1]) dMaxMoment=-adM[loop1];
				}
				else{
					if(dMaxMoment<adM[loop1]) dMaxMoment=adM[loop1];
				}
			}
		}
	}
	dScaleMomentToD=m_nMaxMomentDot/dMaxMoment;
	dScaleMomentToDXF=dScaleMomentToD/m_dScaleRtoD;

	for(loop=0;loop<nEle;loop++){
		iBuf=apEle[loop]->GetElementType();
		if(iBuf==BEAM||iBuf==BEAM_HINGE){
			((CBeam*)apEle[loop])->GetSectionForce(dN,adQ,adM);
			dLength=((CBeam*)apEle[loop])->GetLength();
			apEle[loop]->GetNode(aiNode,nEleNode);
			dXi0=Node.GetX(aiNode[0]);
			dYi0=Node.GetY(aiNode[0]);
			dXj0=Node.GetX(aiNode[1]);
			dYj0=Node.GetY(aiNode[1]);
			dCos=(dXj0-dXi0)/dLength;
			dSin=(dYj0-dYi0)/dLength;
			
			adX[0]=dXi0;
			adY[0]=dYi0;
			for(loop1=0;loop1<11;loop1++){
				dXk0=dXi0+(dXj0-dXi0)*loop1/10.0;
				dYk0=dYi0+(dYj0-dYi0)*loop1/10.0;
				adX[loop1+1]=dXk0+adM[loop1]*dSin*dScaleMomentToDXF;
				adY[loop1+1]=dYk0-adM[loop1]*dCos*dScaleMomentToDXF;
			}
			adX[12]=dXj0;
			adY[12]=dYj0;
			for(loop1=0;loop1<12;loop1++){
				DXFLine(fout,adX[loop1],adY[loop1],adX[loop1+1],adY[loop1+1]);
			}

			dTextHeight=m_nFontSize/m_dScaleRtoD;
			dAngle=atan2(dYj0-dYi0, dXj0-dXi0)*180.0/PI;	
			sText.Format("%0.3f",adM[0]);
			DXFText(fout,adX[1],adY[1],dTextHeight,dAngle,sText);
			sText.Format("%0.3f",adM[5]);
			DXFText(fout,adX[6],adY[6],dTextHeight,dAngle,sText);
			sText.Format("%0.3f",adM[10]);
			DXFText(fout,adX[11],adY[11],dTextHeight,dAngle,sText);
		}
	}
	fout<<"  0"<<endl;
	fout<<"ENDSEC"<<endl;
	fout<<"  0"<<endl;
	fout<<"EOF"<<endl;
	fout.close();
}

void COOPFEView::OutputDxfElement(ofstream &fout)
{
	COOPFEDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);

	int nEle,nEleNode,aiNode[8];
	int loop,loop1,iBuf;
	double adX[8],adY[8];
	CString sText;
	CTypedPtrArray <CPtrArray,CBaseElement*>& apEle=pDoc->m_glEle.m_apEle;
	CNode& Node=pDoc->m_glEle.m_Node;
	
	nEle=apEle.GetSize();
	for(loop=0;loop<nEle;loop++){
		apEle[loop]->GetNode(aiNode,nEleNode);
		for(loop1=0;loop1<nEleNode;loop1++){
			adX[loop1]=Node.GetX(aiNode[loop1]);
			adY[loop1]=Node.GetY(aiNode[loop1]);
		}
		iBuf=nEleNode-1;
		for(loop1=0;loop1<iBuf;loop1++){
			DXFLine(fout,adX[loop1],adY[loop1],adX[loop1+1],adY[loop1+1]);
		}
		if(apEle[loop]->GetElementType()==PLANE_8NODE_ELE)
			DXFLine(fout,adX[7],adY[7],adX[0],adY[0]);
	}
}

void COOPFEView::OnOutputDxfShear() 
{
	// TODO: Add your command handler code here
	COOPFEDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);

	int loop,loop1,iBuf,nEle,nEleNode,aiNode[8];
	double adM[11],adQ[11],dN,dMaxShear;
	double dScaleShearToD,dScaleShearToDXF,dTextHeight;
	double dCos,dSin,dLength,dAngle;
	CTypedPtrArray <CPtrArray,CBaseElement*>& apEle=pDoc->m_glEle.m_apEle;
	CNode& Node=pDoc->m_glEle.m_Node;
	double dXi0,dXj0,dXk0,dYi0,dYj0,dYk0;
	double adX[13],adY[13];
	CString sText;
	CString sFileName;
	ofstream fout;

	if(!pDoc->m_glEle.m_bFlagForceAnalyzed) return;

	CFileDialog dlg(FALSE);
	char sFilter[]="DXF(*.dxf)\0*.dxf\0\0";
	dlg.m_ofn.lpstrFilter=sFilter;

	if(dlg.DoModal()==IDOK){
		sFileName=dlg.GetPathName();
		if(sFileName.GetLength()==0) return;
		if(sFileName.Find(".dxf")<0) sFileName+=".dxf";
		fout.open(sFileName);
	}
	
	fout<<"  0"<<endl;
	fout<<"SECTION"<<endl;
	fout<<"  2"<<endl;
	fout<<"ENTITIES"<<endl;

	OutputDxfElement(fout);

	dMaxShear=0.0;
	nEle=apEle.GetSize();
	for(loop=0;loop<nEle;loop++){
		iBuf=apEle[loop]->GetElementType();
		if(iBuf==BEAM||iBuf==BEAM_HINGE){
			((CBeam*)apEle[loop])->GetSectionForce(dN,adQ,adM);
			for(loop1=0;loop1<11;loop1++){
				if(adQ[loop1]<0.0){
					if(dMaxShear<-adQ[loop1]) dMaxShear=-adQ[loop1];
				}
				else{
					if(dMaxShear<adQ[loop1]) dMaxShear=adQ[loop1];
				}
			}
		}
	}
	dScaleShearToD=m_nMaxShearDot/dMaxShear;
	dScaleShearToDXF=dScaleShearToD/m_dScaleRtoD;

	for(loop=0;loop<nEle;loop++){
		iBuf=apEle[loop]->GetElementType();
		if(iBuf==BEAM||iBuf==BEAM_HINGE){
			((CBeam*)apEle[loop])->GetSectionForce(dN,adQ,adM);
			dLength=((CBeam*)apEle[loop])->GetLength();
			apEle[loop]->GetNode(aiNode,nEleNode);
			dXi0=Node.GetX(aiNode[0]);
			dYi0=Node.GetY(aiNode[0]);
			dXj0=Node.GetX(aiNode[1]);
			dYj0=Node.GetY(aiNode[1]);
			dCos=(dXj0-dXi0)/dLength;
			dSin=(dYj0-dYi0)/dLength;
			
			adX[0]=dXi0;
			adY[0]=dYi0;
			for(loop1=0;loop1<11;loop1++){
				dXk0=dXi0+(dXj0-dXi0)*loop1/10.0;
				dYk0=dYi0+(dYj0-dYi0)*loop1/10.0;
				adX[loop1+1]=dXk0+adQ[loop1]*dSin*dScaleShearToDXF;
				adY[loop1+1]=dYk0-adQ[loop1]*dCos*dScaleShearToDXF;
			}
			adX[12]=dXj0;
			adY[12]=dYj0;
			for(loop1=0;loop1<12;loop1++){
				DXFLine(fout,adX[loop1],adY[loop1],adX[loop1+1],adY[loop1+1]);
			}

			dTextHeight=m_nFontSize/m_dScaleRtoD;
			dAngle=atan2(dYj0-dYi0, dXj0-dXi0)*180.0/PI;	
			sText.Format("%0.3f",adQ[0]);
			DXFText(fout,adX[1],adY[1],dTextHeight,dAngle,sText);
			sText.Format("%0.3f",adQ[10]);
			DXFText(fout,adX[11],adY[11],dTextHeight,dAngle,sText);
		}
	}
	fout<<"  0"<<endl;
	fout<<"ENDSEC"<<endl;
	fout<<"  0"<<endl;
	fout<<"EOF"<<endl;
	fout.close();	
}

void COOPFEView::OnOutputDxfTensionStress() 
{
	// TODO: Add your command handler code here
	COOPFEDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);

	bool bBuf;
	int loop,loop1,iBuf,nEle,aiNode[8];
	double adGaussX[9],adGaussY[9];
	double adEleNodeX[8],adEleNodeY[8];
	double adMainStress[9],adMainStress1[9],adMainStressAngle[9];
	double dMaxStress,dMinStress;
	double dMaxStressWidth,dScaleStressWidth,dStressWidth;
	double dCos,dSin,dLength;
	double dMaxX,dMinX,dMaxY,dMinY;
	double dTextHeight;
	double dX,dY,dX1,dY1;
	CString sText;
	CTypedPtrArray <CPtrArray,CBaseElement*>& apEle=pDoc->m_glEle.m_apEle;
	CNode& Node=pDoc->m_glEle.m_Node;
	CString sFileName;
	ofstream fout;

	if(!pDoc->m_glEle.m_bFlagForceAnalyzed) return;

	CFileDialog dlg(FALSE);
	char sFilter[]="DXF(*.dxf)\0*.dxf\0\0";
	dlg.m_ofn.lpstrFilter=sFilter;

	if(dlg.DoModal()==IDOK){
		sFileName=dlg.GetPathName();
		if(sFileName.GetLength()==0) return;
		if(sFileName.Find(".dxf")<0) sFileName+=".dxf";
		fout.open(sFileName);
	}

	dTextHeight=m_nFontSize/m_dScaleRtoD;
	dMaxStressWidth=dTextHeight;
		
	fout<<"  0"<<endl;
	fout<<"SECTION"<<endl;
	fout<<"  2"<<endl;
	fout<<"ENTITIES"<<endl;

	OutputDxfElement(fout);

	nEle=apEle.GetSize();
	dMinStress=dMaxStress=0.0;
	bBuf=false;
	for(loop=0;loop<nEle;loop++){
		if(apEle[loop]->GetElementType()==PLANE_8NODE_ELE){
			((CPlane8NodeEle*)apEle[loop])->
				GetMainStress(adMainStress,adMainStress1,adMainStressAngle);
			for(loop1=0;loop1<9;loop1++){
				if(adMainStress[loop1]>0.0){
					dMinStress=dMaxStress=adMainStress[loop1];
					bBuf=true;
					break;
				}
				if(adMainStress1[loop1]>0.0){
					dMinStress=dMaxStress=adMainStress1[loop1];
					bBuf=true;
					break;
				}
			}
		}
		if(bBuf) break;
	}

	for(loop=0;loop<nEle;loop++){
		if(apEle[loop]->GetElementType()==PLANE_8NODE_ELE){
			((CPlane8NodeEle*)apEle[loop])->
				GetMainStress(adMainStress,adMainStress1,adMainStressAngle);
			for(loop1=0;loop1<9;loop1++){
				if(adMainStress[loop1]>0){
					if(dMaxStress<adMainStress[loop1])
						dMaxStress=adMainStress[loop1];
					if(dMinStress>adMainStress[loop1])
						dMinStress=adMainStress[loop1];
				}
				if(adMainStress1[loop1]>0){
					if(dMaxStress<adMainStress1[loop1])
						dMaxStress=adMainStress1[loop1];
					if(dMinStress>adMainStress1[loop1])
						dMinStress=adMainStress1[loop1];
				}
			}
		}
	}

	if(dMaxStress-dMinStress>0.0)
		dScaleStressWidth=dMaxStressWidth/(dMaxStress-dMinStress);

	for(loop=0;loop<nEle;loop++){
		if(apEle[loop]->GetElementType()==PLANE_8NODE_ELE){
			apEle[loop]->GetNode(aiNode,iBuf);
			for(loop1=0;loop1<8;loop1++){
				adEleNodeX[loop1]=Node.GetX(aiNode[loop1]);
				adEleNodeY[loop1]=Node.GetY(aiNode[loop1]);
			}
			
			dMaxX=dMinX=adEleNodeX[0];
			dMaxY=dMinY=adEleNodeY[0];
			for(loop1=1;loop1<8;loop1++){
				if(dMaxX<adEleNodeX[loop1]) dMaxX=adEleNodeX[loop1];
				if(dMinX>adEleNodeX[loop1]) dMinX=adEleNodeX[loop1];
				if(dMaxY<adEleNodeY[loop1]) dMaxY=adEleNodeY[loop1];
				if(dMinY>adEleNodeY[loop1]) dMinY=adEleNodeY[loop1];
			}
			if((dMaxX-dMinX)>(dMaxY-dMinY)){
				dLength=(dMaxX-dMinX)/8.0;
			}
			else{
				dLength=(dMaxY-dMinY)/8.0;
			}
			((CPlane8NodeEle*)apEle[loop])->
				GetGaussPtGCoordinate(adGaussX,adGaussY);
			((CPlane8NodeEle*)apEle[loop])->
				GetMainStress(adMainStress,adMainStress1,adMainStressAngle);
			for(loop1=0;loop1<9;loop1++){
				if(adMainStress[loop1]>0.0){
					dCos=cos(adMainStressAngle[loop1]);
					dSin=sin(adMainStressAngle[loop1]);
					dX=adGaussX[loop1]-dCos*dLength;
					dY=adGaussY[loop1]-dSin*dLength;
					dX1=adGaussX[loop1]+dCos*dLength;
					dY1=adGaussY[loop1]+dSin*dLength;
					dStressWidth=(adMainStress[loop1]-dMinStress)*dScaleStressWidth;
					DXFPline(fout,dX,dY,dX1,dY1,dStressWidth);
				}
				if(adMainStress1[loop1]>0.0){
					dCos=cos(adMainStressAngle[loop1]);
					dSin=sin(adMainStressAngle[loop1]);
					dX=adGaussX[loop1]+dSin*dLength;
					dY=adGaussY[loop1]-dCos*dLength;
					dX1=adGaussX[loop1]-dSin*dLength;
					dY1=adGaussY[loop1]+dCos*dLength;
					dStressWidth=(adMainStress1[loop1]-dMinStress)*dScaleStressWidth;
					DXFPline(fout,dX,dY,dX1,dY1,dStressWidth);
				}
			}
		}
	}

	dX=m_dMinX-13.0*dTextHeight;
	dX1=m_dMinX-10.0*dTextHeight;
	for(loop=0;loop<9;loop++){
		dY=dY1=m_dMinY+1.5*dTextHeight*loop;
		dStressWidth=dMaxStressWidth*loop/8.0;
		DXFPline(fout,dX,dY,dX1,dY1,dStressWidth);
		sText.Format("%0.3f",dMinStress+(dMaxStress-dMinStress)*loop/8.0);
		DXFText(fout,dX1+dTextHeight,dY1,dTextHeight,0.0,sText);
	}

	fout<<"  0"<<endl;
	fout<<"ENDSEC"<<endl;
	fout<<"  0"<<endl;
	fout<<"EOF"<<endl;
	fout.close();	
}

void COOPFEView::OnOutputDxfCompressionStress() 
{
	// TODO: Add your command handler code here
	COOPFEDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);

	bool bBuf;
	int loop,loop1,iBuf,nEle,aiNode[8];
	double adGaussX[9],adGaussY[9];
	double adEleNodeX[8],adEleNodeY[8];
	double adMainStress[9],adMainStress1[9],adMainStressAngle[9];
	double dMaxStress,dMinStress;
	double dMaxStressWidth,dScaleStressWidth,dStressWidth;
	double dCos,dSin,dLength;
	double dMaxX,dMinX,dMaxY,dMinY;

⌨️ 快捷键说明

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