📄 oopfeview.cpp
字号:
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 + -