📄 oopfeview.cpp
字号:
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=(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=(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",dMinStress+(dMaxStress-dMinStress)/8.0*loop);
pDC->TextOut(50,50+30*loop,sText);
}
pDC->SelectObject(pOldFont);
pDC->SelectObject(pOldPen);
}
void COOPFEView::OnDisplayTensionStress()
{
// TODO: Add your command handler code here
COOPFEDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
pDoc->m_iDisplay=DISPLAY_TSTRESS;
Invalidate();
UpdateWindow();
}
void COOPFEView::OnDisplayZoomIn()
{
// TODO: Add your command handler code here
m_dZoomTimes+=1.0;
Invalidate();
UpdateWindow();
}
void COOPFEView::OnDisplayZoomOut()
{
// TODO: Add your command handler code here
if(m_dZoomTimes==-4.0) return;
m_dZoomTimes-=1.0;
Invalidate();
UpdateWindow();
}
void COOPFEView::SetPenColor(CPen* aPen)
{
int aiR[256],aiG[256],aiB[256];
double dBuf,dBuf1;
int loop;
double iBegin,iEnd;
dBuf=20.0;
dBuf1=30;
for(loop=0;loop<256;loop++){
aiR[loop]=aiG[loop]=aiB[loop]=0;
}
iBegin=0; iEnd=dBuf;
for(loop=(int)iBegin;loop<(int)iEnd;loop++){
aiB[loop]=255;
}
iBegin=dBuf; iEnd=dBuf+dBuf1;
for(loop=(int)iBegin;loop<(int)iEnd;loop++){
aiB[loop]=255-(int)(255.0*(loop-iBegin)/(iEnd-iBegin));
}
iBegin=0; iEnd=3.0*dBuf+2*dBuf1;
for(loop=(int)iBegin;loop<(int)iEnd;loop++){
aiR[loop]=255;
}
iBegin=iEnd; iEnd=iBegin+dBuf1;
for(loop=(int)iBegin;loop<(int)iEnd;loop++){
aiR[loop]=255-(int)(255.0*(loop-iBegin)/(iEnd-iBegin));
}
iBegin=2.0*dBuf+dBuf1; iEnd=iBegin+dBuf1;
for(loop=(int)iBegin;loop<(int)iEnd;loop++){
aiG[loop]=(int)(255.0*(loop-iBegin)/(iEnd-iBegin));
}
iBegin=iEnd; iEnd=iBegin+3.0*dBuf+2*dBuf1;
for(loop=(int)iBegin;loop<(int)iEnd;loop++){
aiG[loop]=255;
}
iBegin=iEnd; iEnd=iEnd+dBuf1;
for(loop=(int)iBegin;loop<(int)iEnd;loop++){
aiG[loop]=255-(int)(255.0*(loop-iBegin)/(iEnd-iBegin));
}
iBegin=4.0*dBuf+3*dBuf1; iEnd=iBegin+dBuf1;
for(loop=(int)iBegin;loop<(int)iEnd;loop++){
aiB[loop]=(int)(255.0*(loop-iBegin)/(iEnd-iBegin));
}
iBegin=iEnd; iEnd=256.0;
for(loop=(int)iBegin;loop<(int)iEnd;loop++){
aiB[loop]=255;
}
for(loop=0;loop<256;loop++)
aPen[loop].CreatePen(PS_SOLID,2,RGB(aiR[loop],aiG[loop],aiB[loop]));
//For 256 grad
/*
for(loop=0;loop<256;loop++){
aPen[loop].CreatePen(PS_SOLID,2,RGB(loop,loop,loop));
}
*/
}
void COOPFEView::OnDisplayElement()
{
// TODO: Add your command handler code here
COOPFEDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
pDoc->m_iDisplay=DISPLAY_ELEMENT;
Invalidate();
UpdateWindow();
}
void COOPFEView::OnDisplayData()
{
// TODO: Add your command handler code here
COOPFEDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
char cBuf;
int nChar,loop;
ofstream fout;
fout.open("data.tmp");
pDoc->m_glEle.OutputData(fout);
fout.close();
CFile fin;
CFileException e;
fin.Open("data.tmp", CFile::modeRead | CFile::typeBinary, &e );
pDoc->m_sData.Empty();
nChar=fin.GetLength( );
pDoc->m_sData.GetBufferSetLength(nChar);
for(loop=0;loop<nChar;loop++){
fin.Read(&cBuf,1);
pDoc->m_sData.SetAt(loop,cBuf);
}
fin.Close();
pDoc->m_iDisplay=DISPLAY_DATA;
Invalidate();
UpdateWindow();
}
void COOPFEView::DisplayData(CDC *pDC, COOPFEDoc *pDoc)
{
int loop,nChar,nLine,iLine;
int nFontHeight,nFontInterval,nTotalFontHeight;
CString sBuf;
CSize sizeTotal,sizePage,sizeLine;
CRect rect;
CFont font;
CFont* pOldFont;
nLine=0;
nChar=pDoc->m_sData.GetLength();
for(loop=0;loop<nChar;loop++){
if(pDoc->m_sData[loop]==(char)13){
nLine++;
}
}
nFontHeight=18; nFontInterval=2;
nTotalFontHeight=nFontHeight+nFontInterval;
SetFont(font,"Times New Roman",nFontHeight,0.0);
pOldFont=pDC->SelectObject(&font);
sizeTotal.cx = 1500;
sizeTotal.cy = (int)(nTotalFontHeight*nLine)+200;
GetClientRect(&rect);
sizePage.cx=rect.right;
sizePage.cy=rect.bottom;
sizeLine.cx=sizePage.cx/10;
sizeLine.cy=sizePage.cy/10;
SetScrollSizes(MM_TEXT,sizeTotal,sizePage,sizeLine);
iLine=0;
sBuf.Empty();
for(loop=0;loop<nChar;loop++){
if(pDoc->m_sData[loop]==(char)13){
loop++;
pDC->TextOut(2,iLine*nTotalFontHeight,sBuf);
sBuf.Empty();
iLine++;
}
else{
sBuf+=pDoc->m_sData[loop];
}
}
pDC->SelectObject(pOldFont);
}
void COOPFEView::SetFont(CFont &font, char *sFontName, int nFontHeight,double dAngle)
{
LOGFONT logFont;
memset(&logFont, 0, sizeof(LOGFONT));
logFont.lfEscapement=(int)(dAngle*10.0);
logFont.lfHeight = nFontHeight;
strcpy(logFont.lfFaceName, sFontName);
VERIFY(font.CreateFontIndirect(&logFont));
}
void COOPFEView::OnDispalySettings()
{
// TODO: Add your command handler code here
CDlgDisplaySet dlgDisplaySet;
dlgDisplaySet.m_nEditMaxDispDot=m_nMaxDispDot;
dlgDisplaySet.m_nEditMaxMomentDot=m_nMaxMomentDot;
dlgDisplaySet.m_nEditMaxShearDot=m_nMaxShearDot;
dlgDisplaySet.m_nEditFontSize=m_nFontSize;
dlgDisplaySet.m_nEditMaxAxialForce=m_nMaxAxialForceDot;
if(dlgDisplaySet.DoModal()==IDOK){
m_nMaxDispDot=dlgDisplaySet.m_nEditMaxDispDot;
m_nMaxMomentDot=dlgDisplaySet.m_nEditMaxMomentDot;
m_nMaxShearDot=dlgDisplaySet.m_nEditMaxShearDot;
m_nFontSize=dlgDisplaySet.m_nEditFontSize;
m_nMaxAxialForceDot=dlgDisplaySet.m_nEditMaxAxialForce;
}
Invalidate();
UpdateWindow();
}
void COOPFEView::OnOutputDxfDeformation()
{
// TODO: Add your command handler code here
COOPFEDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
int loop,loop1,iBuf,nNode,nEle,nEleNode,aiNode[8];
double dBuf;
double adFy[11],dMaxDisp;
double dScaleDispRtoD,dScaleDispRtoDXF,dTextHeight;
double dCos,dSin,dLength;
CTypedPtrArray <CPtrArray,CBaseElement*>& apEle=pDoc->m_glEle.m_apEle;
CNode& Node=pDoc->m_glEle.m_Node;
double dXi0,dXj0,dXk0,dYi0,dYj0,dYk0;
double dUi,dUj;
double adX[11],adY[11];
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;
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;
dScaleDispRtoDXF=dScaleDispRtoD/m_dScaleRtoD;
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=dXi0+(dXj0-dXi0)*loop1/10.0;
dYk0=dYi0+(dYj0-dYi0)*loop1/10.0;
adX[loop1]=dXk0+((dUi+(dUj-dUi)*loop1/10.0)*dCos+adFy[loop1]*dSin)*dScaleDispRtoDXF;
adY[loop1]=dYk0+((dUi+(dUj-dUi)*loop1/10.0)*dSin-adFy[loop1]*dCos)*dScaleDispRtoDXF;
}
for(loop1=0;loop1<10;loop1++)
DXFLine(fout,adX[loop1],adY[loop1],adX[loop1+1],adY[loop1+1]);
break;
case TRUSS:
apEle[loop]->GetNode(aiNode,nEleNode);
iBuf=aiNode[0];
adX[0]=Node.GetX(iBuf)+(Node.GetCurX(iBuf)-Node.GetX(iBuf))*dScaleDispRtoDXF;
adY[0]=Node.GetY(iBuf)+(Node.GetCurY(iBuf)-Node.GetY(iBuf))*dScaleDispRtoDXF;
iBuf=aiNode[1];
adX[1]=Node.GetX(iBuf)+(Node.GetCurX(iBuf)-Node.GetX(iBuf))*dScaleDispRtoDXF;
adY[1]=Node.GetY(iBuf)+(Node.GetCurY(iBuf)-Node.GetY(iBuf))*dScaleDispRtoDXF;
DXFLine(fout,adX[0],adY[0],adX[1],adY[1]);
break;
case PLANE_8NODE_ELE:
apEle[loop]->GetNode(aiNode,nEleNode);
for(loop1=0;loop1<8;loop1++){
iBuf=aiNode[loop1];
adX[loop1]=Node.GetX(iBuf)+(Node.GetCurX(iBuf)-Node.GetX(iBuf))*dScaleDispRtoDXF;
adY[loop1]=Node.GetY(iBuf)+(Node.GetCurY(iBuf)-Node.GetY(iBuf))*dScaleDispRtoDXF;
}
for(loop1=0;loop1<7;loop1++)
DXFLine(fout,adX[loop1],adY[loop1],adX[loop1+1],adY[loop1+1]);
DXFLine(fout,adX[7],adY[7],adX[0],adY[0]);
break;
}
}
dTextHeight=m_nFontSize/m_dScaleRtoD;
adX[0]=m_dMinX;
adY[0]=m_dMinY-2.0*dMaxDisp*dScaleDispRtoDXF;
adX[1]=m_dMinX+dMaxDisp*dScaleDispRtoDXF;
adY[1]=m_dMinY-2.0*dMaxDisp*dScaleDispRtoDXF;
DXFLine(fout,adX[0],adY[0],adX[1],adY[1]);
sText.Format("%f",dMaxDisp);
adX[0]=adX[1]+dMaxDisp*dScaleDispRtoDXF;
DXFText(fout,adX[0],adY[0],dTextHeight,0.0,sText);
fout<<" 0"<<endl;
fout<<"ENDSEC"<<endl;
fout<<" 0"<<endl;
fout<<"EOF"<<endl;
fout.close();
}
void COOPFEView::DXFLine(ofstream &fout, double dX, double dY, double dX1, double dY1)
{
fout<<" 0"<<endl;
fout<<"LINE"<<endl;
fout<<" 8"<<endl;
fout<<"0"<<endl;
fout<<" 10"<<endl;
fout<<dX<<endl;
fout<<" 20"<<endl;
fout<<dY<<endl;
fout<<" 30"<<endl;
fout<<"0.0"<<endl;
fout<<" 11"<<endl;
fout<<dX1<<endl;
fout<<" 21"<<endl;
fout<<dY1<<endl;
fout<<" 31"<<endl;
fout<<"0.0"<<endl;
}
void COOPFEView::DXFText(ofstream &fout, double dX, double dY,double dHeight,double dAngle, CString sText)
{
fout<<" 0"<<endl;
fout<<"TEXT"<<endl;
fout<<" 8"<<endl;
fout<<"0"<<endl;
fout<<" 10"<<endl;
fout<<dX<<endl;
fout<<" 20"<<endl;
fout<<dY<<endl;
fout<<" 30"<<endl;
fout<<"0.0"<<endl;
fout<<" 40"<<endl;
fout<<dHeight<<endl;
fout<<" 41"<<endl;
fout<<0.8<<endl;
fout<<" 50"<<endl;
fout<<dAngle<<endl;
fout<<" 1"<<endl;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -