📄 oopfeview.cpp
字号:
CPen* pOldPen;
pOldPen=pDC->SelectObject(&pen);
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;
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;
aPt[0].x=m_ptBase.x+(int)((dXi0-m_dMinX)*m_dScaleRtoD);
aPt[0].y=m_ptBase.y-(int)((dYi0-m_dMinY)*m_dScaleRtoD);
for(loop1=0;loop1<11;loop1++){
dXk0=m_ptBase.x+(int)((dXi0+(dXj0-dXi0)*loop1/10.0-m_dMinX)*m_dScaleRtoD);
dYk0=m_ptBase.y-(int)((dYi0+(dYj0-dYi0)*loop1/10.0-m_dMinY)*m_dScaleRtoD);
aPt[loop1+1].x=(int)dXk0+(int)(adM[loop1]*dSin*dScaleMomentToD);
aPt[loop1+1].y=(int)dYk0+(int)(adM[loop1]*dCos*dScaleMomentToD);
}
aPt[12].x=m_ptBase.x+(int)((dXj0-m_dMinX)*m_dScaleRtoD);
aPt[12].y=m_ptBase.y-(int)((dYj0-m_dMinY)*m_dScaleRtoD);
pDC->MoveTo(aPt[0]);
for(loop1=0;loop1<13;loop1++){
pDC->LineTo(aPt[loop1]);
}
dAngle=atan2(dYj0-dYi0, dXj0-dXi0)*180.0/PI;
SetFont(font,"Times New Roman",m_nFontSize,dAngle);
pDC->SetTextColor(RGB(0,0,0));
pOldFont=pDC->SelectObject(&font);
sText.Format("%0.3f",adM[0]);
pDC->TextOut(aPt[1].x,aPt[1].y,sText);
sText.Format("%0.3f",adM[5]);
pDC->TextOut(aPt[6].x,aPt[6].y,sText);
sText.Format("%0.3f",adM[10]);
pDC->TextOut(aPt[11].x,aPt[11].y,sText);
pDC->SelectObject(pOldFont);
font.DeleteObject();
}
}
pDC->SelectObject(pOldPen);
pDC->SetBkMode(iOldBkMode);
}
void COOPFEView::DisplayDeformation(CDC *pDC, COOPFEDoc *pDoc)
{
int loop,loop1,iBuf,nNode,nEle,nEleNode,aiNode[8];
double dBuf;
double adFy[11],dMaxDisp;
double dScaleDispRtoD;
double dCos,dSin,dLength;
CTypedPtrArray <CPtrArray,CBaseElement*>& apEle=pDoc->m_glEle.m_apEle;
CNode& Node=pDoc->m_glEle.m_Node;
CPoint aPt[20];
double dXi0,dXj0,dXk0,dYi0,dYj0,dYk0;
double dUi,dUj;
CPen* pOldPen;
CFont font,*pOldFont;
CString sText;
DisplayElement(pDC,pDoc);
if(!pDoc->m_glEle.m_bFlagForceAnalyzed) return;
CPen pen(PS_SOLID,1,RGB(255,0,0));
pOldPen=pDC->SelectObject(&pen);
dMaxDisp=0.0;
nEle=apEle.GetSize();
for(loop=0;loop<nEle;loop++){
iBuf=apEle[loop]->GetElementType();
if(iBuf==BEAM||iBuf==BEAM_HINGE){
((CBeam*)apEle[loop])->GetSectionDef(adFy,dUi,dUj);
for(loop1=0;loop1<11;loop1++){
if(adFy[loop1]<0.0){
if(dMaxDisp<-adFy[loop1]) dMaxDisp=-adFy[loop1];
}
else{
if(dMaxDisp<adFy[loop1]) dMaxDisp=adFy[loop1];
}
}
}
}
nNode=Node.GetNum();
for(loop=0;loop<nNode;loop++){
dBuf=fabs(Node.GetCurX(loop)-Node.GetX(loop));
if(dMaxDisp<dBuf) dMaxDisp=dBuf;
dBuf=fabs(Node.GetCurY(loop)-Node.GetY(loop));
if(dMaxDisp<dBuf) dMaxDisp=dBuf;
}
dScaleDispRtoD=m_nMaxDispDot/dMaxDisp;
for(loop=0;loop<nEle;loop++){
iBuf=apEle[loop]->GetElementType();
switch(apEle[loop]->GetElementType()){
case BEAM:
case BEAM_HINGE:
((CBeam*)apEle[loop])->GetSectionDef(adFy,dUi,dUj);
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;
for(loop1=0;loop1<11;loop1++){
dXk0=m_ptBase.x+(int)((dXi0+(dXj0-dXi0)*loop1/10.0-m_dMinX)*m_dScaleRtoD);
dYk0=m_ptBase.y-(int)((dYi0+(dYj0-dYi0)*loop1/10.0-m_dMinY)*m_dScaleRtoD);
aPt[loop1].x=(int)dXk0+(int)(((dUi+(dUj-dUi)*loop1/10.0)*dCos+adFy[loop1]*dSin)*dScaleDispRtoD);
aPt[loop1].y=(int)dYk0-(int)(((dUi+(dUj-dUi)*loop1/10.0)*dSin-adFy[loop1]*dCos)*dScaleDispRtoD);
}
pDC->MoveTo(aPt[0]);
for(loop1=0;loop1<11;loop1++){
pDC->LineTo(aPt[loop1]);
}
break;
case TRUSS:
apEle[loop]->GetNode(aiNode,nEleNode);
iBuf=aiNode[0];
aPt[0].x=m_ptBase.x+(int)((Node.GetX(iBuf)-m_dMinX)*m_dScaleRtoD+(Node.GetCurX(iBuf)-Node.GetX(iBuf))*dScaleDispRtoD);
aPt[0].y=m_ptBase.y-(int)((Node.GetY(iBuf)-m_dMinY)*m_dScaleRtoD+(Node.GetCurY(iBuf)-Node.GetY(iBuf))*dScaleDispRtoD);
iBuf=aiNode[1];
aPt[1].x=m_ptBase.x+(int)((Node.GetX(iBuf)-m_dMinX)*m_dScaleRtoD+(Node.GetCurX(iBuf)-Node.GetX(iBuf))*dScaleDispRtoD);
aPt[1].y=m_ptBase.y-(int)((Node.GetY(iBuf)-m_dMinY)*m_dScaleRtoD+(Node.GetCurY(iBuf)-Node.GetY(iBuf))*dScaleDispRtoD);
pDC->MoveTo(aPt[0]);
pDC->LineTo(aPt[1]);
break;
case PLANE_8NODE_ELE:
apEle[loop]->GetNode(aiNode,nEleNode);
for(loop1=0;loop1<8;loop1++){
iBuf=aiNode[loop1];
aPt[loop1].x=m_ptBase.x+(int)((Node.GetX(iBuf)-m_dMinX)*m_dScaleRtoD+(Node.GetCurX(iBuf)-Node.GetX(iBuf))*dScaleDispRtoD);
aPt[loop1].y=m_ptBase.y-(int)((Node.GetY(iBuf)-m_dMinY)*m_dScaleRtoD+(Node.GetCurY(iBuf)-Node.GetY(iBuf))*dScaleDispRtoD);
}
pDC->MoveTo(aPt[7]);
for(loop1=0;loop1<8;loop1++){
pDC->LineTo(aPt[loop1]);
}
break;
}
}
pDC->MoveTo(20,40);
pDC->LineTo(20+m_nMaxDispDot,40);
pDC->MoveTo(20,35);
pDC->LineTo(20,45);
pDC->MoveTo(20+m_nMaxDispDot,35);
pDC->LineTo(20+m_nMaxDispDot,45);
SetFont(font,"Times New Roman",m_nFontSize,0.0);
sText.Format("%f",dMaxDisp);
pOldFont=pDC->SelectObject(&font);
pDC->SetTextColor(RGB(0,0,0));
pDC->TextOut(20+m_nMaxDispDot+10,40,sText);
pDC->SelectObject(pOldFont);
pDC->SelectObject(pOldPen);
}
void COOPFEView::OnDisplayCompressionStress()
{
// TODO: Add your command handler code here
COOPFEDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
pDoc->m_iDisplay=DISPLAY_CSTRESS;
Invalidate();
UpdateWindow();
}
void COOPFEView::DisplayTensionStress(CDC *pDC, COOPFEDoc *pDoc)
{
bool bBuf;
int loop,loop1,iBuf,nEle,aiNode[8];
int iColor;
double adGaussX[9],adGaussY[9];
double adEleNodeX[8],adEleNodeY[8];
double adMainStress[9],adMainStress1[9],adMainStressAngle[9];
double dMaxStress,dMinStress;
double dScaleColor;
double dCos,dSin,dLength;
double dMaxX,dMinX,dMaxY,dMinY;
CPen aPen[256],*pOldPen;
CFont font,*pOldFont;
CPoint pt,pt1;
CString sText;
CTypedPtrArray <CPtrArray,CBaseElement*>& apEle=pDoc->m_glEle.m_apEle;
CNode& Node=pDoc->m_glEle.m_Node;
DisplayElement(pDC,pDoc);
if(!pDoc->m_glEle.m_bFlagForceAnalyzed) return;
SetPenColor(aPen);
pOldPen=pDC->SelectObject(&aPen[0]);
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)
dScaleColor=255/(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]);
pt.x=m_ptBase.x
+(int)((adGaussX[loop1]-dCos*dLength-m_dMinX)*m_dScaleRtoD);
pt.y=m_ptBase.y
-(int)((adGaussY[loop1]-dSin*dLength-m_dMinY)*m_dScaleRtoD);
pt1.x=m_ptBase.x
+(int)((adGaussX[loop1]+dCos*dLength-m_dMinX)*m_dScaleRtoD);
pt1.y=m_ptBase.y
-(int)((adGaussY[loop1]+dSin*dLength-m_dMinY)*m_dScaleRtoD);
iColor=255-(int)((adMainStress[loop1]-dMinStress)*dScaleColor);
pDC->SelectObject(&aPen[iColor]);
pDC->MoveTo(pt); pDC->LineTo(pt1);
}
if(adMainStress1[loop1]>0.0){
dCos=cos(adMainStressAngle[loop1]);
dSin=sin(adMainStressAngle[loop1]);
pt.x=m_ptBase.x
+(int)((adGaussX[loop1]+dSin*dLength-m_dMinX)*m_dScaleRtoD);
pt.y=m_ptBase.y
-(int)((adGaussY[loop1]-dCos*dLength-m_dMinY)*m_dScaleRtoD);
pt1.x=m_ptBase.x
+(int)((adGaussX[loop1]-dSin*dLength-m_dMinX)*m_dScaleRtoD);
pt1.y=m_ptBase.y
-(int)((adGaussY[loop1]+dCos*dLength-m_dMinY)*m_dScaleRtoD);
iColor=255-(int)((adMainStress1[loop1]-dMinStress)*dScaleColor);
pDC->SelectObject(&aPen[iColor]);
pDC->MoveTo(pt); pDC->LineTo(pt1);
}
}
}
}
pt.x=20;
pt1.x=40;
for(loop=0;loop<256;loop++){
pt.y=pt1.y=50+loop;
pDC->SelectObject(&aPen[loop]);
pDC->MoveTo(pt); pDC->LineTo(pt1);
}
SetFont(font,"Times New Roman",m_nFontSize,0.0);
pOldFont=pDC->SelectObject(&font);
pDC->SetTextColor(RGB(0,0,0));
for(loop=0;loop<9;loop++){
sText.Format("%0.2f",dMaxStress+(dMinStress-dMaxStress)/8.0*loop);
pDC->TextOut(50,50+30*loop,sText);
}
pDC->SelectObject(pOldFont);
pDC->SelectObject(pOldPen);
}
void COOPFEView::DisplayCompressionStress(CDC *pDC, COOPFEDoc *pDoc)
{
bool bBuf;
int loop,loop1,iBuf,nEle,aiNode[8];
int iColor;
double adGaussX[9],adGaussY[9];
double adEleNodeX[8],adEleNodeY[8];
double adMainStress[9],adMainStress1[9],adMainStressAngle[9];
double dMaxStress,dMinStress;
double dScaleColor;
double dCos,dSin,dLength;
double dMaxX,dMinX,dMaxY,dMinY;
CPoint pt,pt1;
CPen aPen[256],*pOldPen;
CFont font,*pOldFont;
CString sText;
CTypedPtrArray <CPtrArray,CBaseElement*>& apEle=pDoc->m_glEle.m_apEle;
CNode& Node=pDoc->m_glEle.m_Node;
DisplayElement(pDC,pDoc);
if(!pDoc->m_glEle.m_bFlagForceAnalyzed) return;
SetPenColor(aPen);
pOldPen=pDC->SelectObject(&aPen[0]);
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.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)
dScaleColor=255/(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;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -