📄 sdt02.cpp
字号:
// sdt02.cpp : implementation file
//
// Sdt02 - 板配筋计算
//
// GB2002规范 AutoCAD版
#include "stdafx.h"
#include "Sdt.h"
#include "sdt02.h"
#include "Sdt18.h"
#include "math.h"
#include "adslib.h"
#define Pi 3.1415926
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// Csdt02 dialog
static HWND hWndACAD = NULL;
Csdt02::Csdt02(CWnd* pParent /*=NULL*/)
: CDialog(Csdt02::IDD, pParent)
{
//{{AFX_DATA_INIT(Csdt02)
m_as = 0.0;
m_asds = 0.0;
m_bh = _T("B-1");
m_d1 = 10.0;
m_d2 = 12.0;
m_l = 3.6;
m_m = 0.0;
m_pj1 = _T("");
m_pj2 = _T("");
m_q = 6.0;
m_rq = 0.08;
m_s1 = 200.0;
m_s2 = 200.0;
m_bzz = 0;
m_lx = 3.6;
m_mx = 0.0;
m_mx0 = 0.0;
m_mxf = 0.0;
m_my = 0.0;
m_my0 = 0.0;
m_myf = 0.0;
m_ly = 4.8;
m_jss = FALSE;
m_gcm = _T("Zzz");
m_mx01 = 0.0;
m_mx1 = 0.0;
m_mxf1 = 0.0;
m_my01 = 0.0;
m_my1 = 0.0;
m_myf1 = 0.0;
//}}AFX_DATA_INIT
}
void Csdt02::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(Csdt02)
DDX_Control(pDX, IDC_COMBOi, m_i);
DDX_Control(pDX, IDC_COMBOh, m_h);
DDX_Control(pDX, IDC_COMBOc, m_c);
DDX_Text(pDX, IDC_EDITas, m_as);
DDX_Text(pDX, IDC_EDITasds, m_asds);
DDX_Text(pDX, IDC_EDITbh, m_bh);
DDX_Text(pDX, IDC_EDITd1, m_d1);
DDX_Text(pDX, IDC_EDITd2, m_d2);
DDX_Text(pDX, IDC_EDITl, m_l);
DDX_Text(pDX, IDC_EDITm, m_m);
DDX_Text(pDX, IDC_EDITpj1, m_pj1);
DDX_Text(pDX, IDC_EDITpj2, m_pj2);
DDX_Text(pDX, IDC_EDITq, m_q);
DDX_Text(pDX, IDC_EDITrq, m_rq);
DDX_Text(pDX, IDC_EDITs1, m_s1);
DDX_Text(pDX, IDC_EDITs2, m_s2);
DDX_Radio(pDX, IDC_RADIObzz, m_bzz);
DDX_Text(pDX, IDC_EDITlx, m_lx);
DDX_Text(pDX, IDC_EDITmx, m_mx);
DDX_Text(pDX, IDC_EDITmx0, m_mx0);
DDX_Text(pDX, IDC_EDITmxf, m_mxf);
DDX_Text(pDX, IDC_EDITmy, m_my);
DDX_Text(pDX, IDC_EDITmy0, m_my0);
DDX_Text(pDX, IDC_EDITmyf, m_myf);
DDX_Text(pDX, IDC_EDITly, m_ly);
DDX_Check(pDX, IDC_CHECKjss02, m_jss);
DDX_Text(pDX, IDC_EDITgcm02, m_gcm);
DDX_Text(pDX, IDC_EDITmx01, m_mx01);
DDX_Text(pDX, IDC_EDITmx1, m_mx1);
DDX_Text(pDX, IDC_EDITmxf1, m_mxf1);
DDX_Text(pDX, IDC_EDITmy01, m_my01);
DDX_Text(pDX, IDC_EDITmy1, m_my1);
DDX_Text(pDX, IDC_EDITmyf1, m_myf1);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(Csdt02, CDialog)
//{{AFX_MSG_MAP(Csdt02)
ON_BN_CLICKED(IDC_BUTTONjs, OnBUTTONjs)
ON_BN_CLICKED(IDC_BUTTONjsnd, OnBUTTONjsnd)
ON_BN_CLICKED(IDC_BUTTONjsxs, OnBUTTONjsxs)
ON_BN_CLICKED(IDC_BUTTONgjb2, OnBUTTONgjb2)
ON_BN_CLICKED(IDC_BTSdtHelp2, OnBTSdtHelp2)
ON_BN_CLICKED(IDC_BUTTONjsdk, OnBUTTONjsdk)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// Csdt02 message handlers
CString Hb[]={ "80","90","100","110","120","130","140","150","180",
"200","250","300","400","500","600","700","800",
"900","1000","1200","1400","1500","1800" };//23
CString Cb[]={ "20","25","30","35","40","45","50"};//7
CString Ib[]={ "1","2","n"};//3
BOOL Csdt02::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO:
for(int i=0;i<23;i++)
m_h.AddString(Hb[i]);
m_h.SetCurSel(2);
for(i=0;i<7;i++)
m_c.AddString(Cb[i]);
m_c.SetCurSel(0);
for(i=0;i<3;i++)
m_i.AddString(Ib[i]);
m_i.SetCurSel(0);
return TRUE;
}
CString flname2;
void Csdt02::OnBUTTONjs()
{
CString val,msg,cval,ival;
double b,h,h0,rmin,fc,fy,kcb,x;
UpdateData(TRUE);
m_h.GetLBText(m_h.GetCurSel(),val);
h=atof(val);
m_c.GetLBText(m_c.GetCurSel(),cval);
if( !strcmp(cval,"20") ) fc=9.6 ;//C20
if( !strcmp(cval,"25") ) fc=11.9; //C25
if( !strcmp(cval,"30") ) fc=14.3 ;//C30
if( !strcmp(cval,"35") ) fc=16.7 ;//C35
if( !strcmp(cval,"40") ) fc=19.1 ;//C40
if( !strcmp(cval,"45") ) fc=21.1 ;//C45
if( !strcmp(cval,"50") ) fc=23.1 ;//C50
m_i.GetLBText(m_i.GetCurSel(),ival);
if( !strcmp(ival,"1") ) { fy=210 ; kcb=0.614; } // I
if( !strcmp(ival,"2") ) { fy=300 ; kcb=0.544; } // II
if( !strcmp(ival,"n") ) { fy=340 ; kcb=0.510; } // LL550
b=1000;
h0=h-20;
rmin=0.002;
m_m=m_rq*m_q*m_l*m_l;
if(m_bzz == 0) m_m *=1.3;
val.Format("%8.3f",m_m);
m_m=atof(val);
x=h0*h0-2.0e6*m_m/fc/b;
if( x < 0) {
msg = "板太薄,请增大厚度H !";
AfxMessageBox(msg);
return;}
x=h0-sqrt(x);
if( x > kcb*h0) {
msg = "板太薄,请增大厚度H !";
AfxMessageBox(msg);
return;}
m_as=fc*b*x/fy;
if( m_as < rmin*b*h0) {
m_as=rmin*b*h0;
msg = "该板采用构造配筋.";
AfxMessageBox(msg); }
double d8s,s2d;
d8s=250*Pi*64/m_as;
s2d=sqrt(0.004*200*m_as/Pi);
val.Format("%8.2f",m_as);
m_as=atof(val);
m_pj1.Format("D8@%4.0f",d8s);
m_pj2.Format("D%4.1f@200",s2d);
m_asds=m_as;
UpdateData(FALSE);
if(m_jss == TRUE){
FILE *ou;
if(m_gcm =="") {AfxMessageBox("请输入工程名!"); return;}
flname2=m_gcm + ".txt";
ou=fopen(flname2,"a");
fprintf(ou,"\n\n\n");
fprintf(ou,"\n***********************************************************************");
fprintf(ou,"\n*** 结 构 设 计 计 算 书 ***");
fprintf(ou,"\n*** ***");
fprintf(ou,"\n*** Sdt02 - 板配筋计算 ***");
fprintf(ou,"\n************************************************ Zgs 2006 ******");
fprintf(ou,"\n\n 工程名称: %s 构件编号: %s",m_gcm,m_bh);
fprintf(ou,"\n\n1. 基本数据来源(Q,L),确定(αq),简图");
fprintf(ou,"\n\n\n\n\n\n");
fprintf(ou,"\n\n2. 已知数据\n");
if(m_bzz == 0)
fprintf(ou,"\n 均布荷载标准值 Q=%8.3f (kN/m), 计算跨度 L=%6.3f (m), 弯矩系数αq=%5.3f",
m_q,m_l,m_rq);
else
fprintf(ou,"\n 均布荷载设计值 Q=%8.3f (kN/m), 计算跨度 L=%6.3f (m), 弯矩系数αq=%5.3f",
m_q,m_l,m_rq);
fprintf(ou,"\n 板厚 H =%5.0f (mm), 混凝土强度 C%s, 钢筋 %s级.",
h,cval,ival);
fprintf(ou,"\n\n3. 计算结果\n");
fprintf(ou,"\n 弯矩设计值 M =%8.3f (kN-m/m)",m_m);
fprintf(ou,"\n 钢筋面积 As=%8.3f (mmxmm/m), 配 D8@%4.0f 或D%4.1f@200",m_as,d8s,s2d);
fprintf(ou,"\n 工程实际配筋:");
time_t tad;
char *buf;
buf=(char*)calloc(80,sizeof(char));
if(buf==NULL) exit(-1);
tad=time(NULL);
strftime(buf,80,"%A %B %d,%Y",localtime(&tad));
fprintf(ou,"\n\n 设计人:");
fprintf(ou,"\n %s",buf);
fclose(ou);
}
}
void Csdt02::OnBUTTONjsnd()
{
// TODO:
CString val;
UpdateData(TRUE);
if( m_d2==0 || m_s2==0) {
if( m_d2==0) m_d2=sqrt((4*m_asds/Pi/1000-m_d1*m_d1/m_s1)*m_s2);
if( m_s2==0) m_s2=m_d2*m_d2/(4*m_asds/Pi/1000-m_d1*m_d1/m_s1);
} else {
m_asds=0.25*1000*Pi*(m_d1*m_d1/m_s1+m_d2*m_d2/m_s2);
}
val.Format("%8.2f",m_asds);
m_asds=atof(val);
UpdateData(FALSE);
}
void Csdt02::OnBUTTONjsxs()
{
// TODO:
static double xs[7][7]={
{0.5,994,335,416,824,105,573},
{0.6,860,379,380,793,137,571},
{0.7,732,410,340,735,167,569},
{0.8,617,428,295,664,189,559},
{0.9,576,434,240,588,202,541},
{1.0,429,429,205,513,205,513},
{0,0,0,0,0,0,0}
};
int kk;
CString msg;
double lxy;
UpdateData(TRUE);
lxy=m_lx/m_ly;
//弹性板
if(lxy<0.5 || lxy>1.0) {
msg = "该板不是双向板!";
AfxMessageBox(msg);
return; }
for(int i=0;i<5;i++)
if(lxy>=xs[i][0] && lxy<xs[i+1][0]) kk=i;
for(int j=1;j<7;j++) {
xs[6][j]=xs[kk][j]+(lxy-xs[kk][0])/(xs[kk+1][0]
-xs[kk][0])*(xs[kk+1][j]-xs[kk][j]);
if(lxy==1.0) xs[6][j]=xs[5][j];
}
m_mx0=xs[6][1]/1e4;m_my0=xs[6][2]/1e4;
m_mx=xs[6][3]/1e4;m_mxf=xs[6][4]/1e4;
m_my=xs[6][5]/1e4;m_myf=xs[6][6]/1e4;
//塑性板
double cj,cg;
cj=(3-lxy)/(1+lxy*lxy*lxy)/24;
cg=cj/3;
m_mx01=cj;m_my01=cj*lxy*lxy;
m_mx1=cg;m_mxf1=2*cg;
m_my1=cg*lxy*lxy;m_myf1=2*cg*lxy*lxy;
UpdateData(FALSE);
}
void Csdt02::OnBUTTONgjb2()
{
CSdt18 Dlg(CWnd::FromHandle(hWndACAD));
Dlg.DoModal();
}
void Csdt02::OnBTSdtHelp2()
{
acedHelp("SdtR2x.hlp","SDT02",0);
}
void Csdt02::OnBUTTONjsdk()
{
// TODO: Add your control notification handler code here
acedCommand(RTSTR,"NOTEPAD",RTSTR,flname2,RTNONE);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -