📄 sdt01.cpp
字号:
// sdt01.cpp : implementation file
//
// Sdt01 - 梁配筋计算
//
// GB2002规范 AutoCAD版
#include "stdafx.h"
#include "Sdt.h"
#include "sdt01.h"
#include "Sdt17.h"
#include "math.h"
#include "adslib.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define Pi 3.1415926
/////////////////////////////////////////////////////////////////////////////
// Csdt01 dialog
static HWND hWndACAD = NULL;
Csdt01::Csdt01(CWnd* pParent /*=NULL*/)
: CDialog(Csdt01::IDD, pParent)
{
//{{AFX_DATA_INIT(Csdt01)
m_as = 0.0;
m_rq = 0.10;
m_rp = 0.20;
m_q = 10.0;
m_p = 0.0;
m_m = 0.0;
m_pj1 = _T("");
m_pj2 = _T("");
m_l = 6.0;
m_bzz = 0;
m_asnd = 0.0;
m_d1 = 20;
m_d2 = 25;
m_n1 = 2;
m_n2 = 2;
m_ks = 3;
m_mp2 = 0.0;
m_mp1 = 0.0;
m_mp3 = 0.0;
m_mp4 = 0.0;
m_mq1 = 0.0;
m_mq2 = 0.0;
m_mq3 = 0.0;
m_mq4 = 0.0;
m_vp = 0.0;
m_vq = 0.0;
m_jss = FALSE;
m_gcm = _T("Zzz");
m_lh = _T("L-1");
m_as2 = 0.0;
m_m2 = 0.0;
//}}AFX_DATA_INIT
}
void Csdt01::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(Csdt01)
DDX_Control(pDX, IDC_COMBOi2, m_i2);
DDX_Control(pDX, IDC_COMBOh2, m_h2);
DDX_Control(pDX, IDC_COMBOc2, m_c2);
DDX_Control(pDX, IDC_COMBOb2, m_b2);
DDX_Control(pDX, IDC_COMBOi, m_i);
DDX_Control(pDX, IDC_COMBOh, m_h);
DDX_Control(pDX, IDC_COMBOc, m_c);
DDX_Control(pDX, IDC_COMBOb, m_b);
DDX_Text(pDX, IDC_EDITas, m_as);
DDX_Text(pDX, IDC_EDITrq, m_rq);
DDX_Text(pDX, IDC_EDITrp, m_rp);
DDX_Text(pDX, IDC_EDITq, m_q);
DDX_Text(pDX, IDC_EDITp, m_p);
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_EDITl, m_l);
DDX_Radio(pDX, IDC_RADIObzz, m_bzz);
DDX_Text(pDX, IDC_EDITasnd, m_asnd);
DDX_Text(pDX, IDC_EDITd1, m_d1);
DDX_Text(pDX, IDC_EDITd2, m_d2);
DDX_Text(pDX, IDC_EDITn1, m_n1);
DDX_Text(pDX, IDC_EDITn2, m_n2);
DDX_Text(pDX, IDC_EDITks, m_ks);
DDV_MinMaxInt(pDX, m_ks, 1, 5);
DDX_Text(pDX, IDC_EDITmp2, m_mp2);
DDX_Text(pDX, IDC_EDITmp1, m_mp1);
DDX_Text(pDX, IDC_EDITmp3, m_mp3);
DDX_Text(pDX, IDC_EDITmp4, m_mp4);
DDX_Text(pDX, IDC_EDITmq1, m_mq1);
DDX_Text(pDX, IDC_EDITmq2, m_mq2);
DDX_Text(pDX, IDC_EDITmq3, m_mq3);
DDX_Text(pDX, IDC_EDITmq4, m_mq4);
DDX_Text(pDX, IDC_EDITvp, m_vp);
DDX_Text(pDX, IDC_EDITvq, m_vq);
DDX_Check(pDX, IDC_CHECKjss01, m_jss);
DDX_Text(pDX, IDC_EDITgcm01, m_gcm);
DDX_Text(pDX, IDC_EDITlh01, m_lh);
DDX_Text(pDX, IDC_EDITas2, m_as2);
DDX_Text(pDX, IDC_EDITm2, m_m2);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(Csdt01, CDialog)
//{{AFX_MSG_MAP(Csdt01)
ON_BN_CLICKED(IDC_BUTTONjs, OnBUTTONjs)
ON_BN_CLICKED(IDC_BUTTONjsnd, OnBUTTONjsnd)
ON_BN_CLICKED(IDC_BUTTONjsxs, OnBUTTONjsxs)
ON_BN_CLICKED(IDC_BTSdtHelp1, OnBTSdtHelp1)
ON_BN_CLICKED(IDC_BUTTONgjb1, OnBUTTONgjb1)
ON_BN_CLICKED(IDC_BUTTONjs2, OnBUTTONjs2)
ON_BN_CLICKED(IDC_BUTTONjsdk, OnBUTTONjsdk)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// Csdt01 message handlers
CString Bl[]={ "150","200","250","300","350","400","500","600","700",
"800","900","1000" };//12
CString Hl[]={ "200","250","300","350","400","450","500","550","600",
"650","700","800","900","1000","1100","1200","1300",
"1400","1500","1800" };//20
CString Cl[]={ "20","25","30","35","40","45","50"};//7
CString Il[]={ "1","2","3"};//3
CString B2[]={ "150","200","250","300","350","400","500","600","700",
"800","900","1000" };//12
CString H2[]={ "80","100","120","150","180","200","250","300","350",
"400","450","500","550","600","650","700","800","900",
"1000","1100","1200","1300","1400","1500","1800" };//25
CString C2[]={ "20","25","30","35","40","45","50"};//7
CString I2[]={ "1","2","3"};//3
BOOL Csdt01::OnInitDialog()
{
CDialog::OnInitDialog();
for(int i=0;i<12;i++)
m_b.AddString(Bl[i]);
m_b.SetCurSel(2);
for(i=0;i<20;i++)
m_h.AddString(Hl[i]);
m_h.SetCurSel(6);
for(i=0;i<7;i++)
m_c.AddString(Cl[i]);
m_c.SetCurSel(0);
for(i=0;i<3;i++)
m_i.AddString(Il[i]);
m_i.SetCurSel(1);
for(i=0;i<12;i++)
m_b2.AddString(B2[i]);
m_b2.SetCurSel(2);
for(i=0;i<25;i++)
m_h2.AddString(H2[i]);
m_h2.SetCurSel(11);
for(i=0;i<7;i++)
m_c2.AddString(C2[i]);
m_c2.SetCurSel(0);
for(i=0;i<3;i++)
m_i2.AddString(I2[i]);
m_i2.SetCurSel(1);
return TRUE;
}
CString flname;
void Csdt01::OnBUTTONjs()
{
CString val,msg,cval,ival;
double b,h,h0,rmin,fc,fy,kcb,x;
UpdateData(TRUE);
m_b.GetLBText(m_b.GetCurSel(),val);
b=atof(val);
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,"3") ) { fy=360 ; kcb=0.510; } // III
h0=h-35;
rmin=0.002;
m_m=m_rq*(m_q+25e-6*b*h)*m_l*m_l + m_rp*m_p*m_l;
if(m_bzz == 0) m_m *=1.30;
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 = "梁断面太小,请增大宽度B或高度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 n25,d3n;
n25=4*m_as/Pi/625;
d3n=sqrt(4*m_as/Pi/3);
val.Format("%8.2f",m_as);
m_as=atof(val);
m_pj1.Format("%5.1fD25",n25);
m_pj2.Format(" 3D%4.1f",d3n);
m_asnd=m_as;
UpdateData(FALSE);
if(m_jss == TRUE){
FILE *ou;
if(m_gcm =="") {AfxMessageBox("请输入工程名!"); return;}
flname=m_gcm + ".txt";
ou=fopen(flname,"a");
fprintf(ou,"\n\n\n");
fprintf(ou,"\n***********************************************************************");
fprintf(ou,"\n*** 结 构 设 计 计 算 书 ***");
fprintf(ou,"\n*** ***");
fprintf(ou,"\n*** Sdt01 - 梁配筋计算 ***");
fprintf(ou,"\n************************************************* Zgs 2006 ******");
fprintf(ou,"\n\n 工程名称: %s 构件编号: %s",m_gcm,m_lh);
fprintf(ou,"\n\n1. 基本数据来源(Q,P,L),确定(αq,αp),简图");
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)",m_q,m_l);
else
fprintf(ou,"\n 均布荷载设计值 Q=%8.3f (kN/m), 计算跨度 L=%6.3f (m)",m_q,m_l);
fprintf(ou,"\n 均布荷载弯矩系数αq=%5.3f",m_rq);
if(m_bzz == 0)
fprintf(ou,"\n 集中荷载标准值 P=%8.3f (kN), 集中荷载弯矩系数αp= %5.3f",m_p,m_rp);
else
fprintf(ou,"\n 集中荷载设计值 P=%8.3f (kN), 集中荷载弯矩系数αp= %5.3f",m_p,m_rp);
fprintf(ou,"\n 梁宽 B=%5.0f (mm), 梁高 H=%5.0f (mm), 混凝土强度 C%s, 钢筋%s级",
b,h,cval,ival);
fprintf(ou,"\n\n3. 计算结果\n");
fprintf(ou,"\n 弯矩设计值 M =%8.3f (kN-m)",m_m);
fprintf(ou,"\n 钢筋面积 As=%8.3f (mmxmm), 配 %4.1fD25 或3D%4.1f",m_as,n25,d3n);
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 Csdt01::OnBUTTONjsnd()
{
CString val;
UpdateData(TRUE);
if( m_d2==0 || m_n2==0) {
if( m_d2==0) m_d2=sqrt((4*m_asnd/Pi-m_n1*m_d1*m_d1)/m_n2);
if( m_n2==0) m_n2=(4*m_asnd/Pi-m_n1*m_d1*m_d1)/m_d2/m_d2;
} else {
m_asnd=0.25*Pi*(m_n1*m_d1*m_d1+m_n2*m_d2*m_d2);
}
val.Format("%8.2f",m_asnd);
m_asnd=atof(val);
UpdateData(FALSE);
}
void Csdt01::OnBUTTONjsxs()
{
static double xs[10][5]={
{125,0,0,0,500}, {250,0,0,0,500},
{70,0,125,0,625}, {156,0,188,0,688},
{80,25,100,0,600}, {175,100,150,0,650},
{77,36,107,71,607}, {169,116,161,107,661},
{78,46,105,79,606}, {171,132,158,118,658},
};
int kk;
UpdateData(TRUE);
for(int i=1;i<=5;i++) {
if(m_ks==i) {
kk=2*i-2;
m_mq1=xs[kk][0]; m_mq2=xs[kk][1];
m_mq3=xs[kk][2]; m_mq4=xs[kk][3];
m_vq=xs[kk][4];
kk=2*i-1;
m_mp1=xs[kk][0]; m_mp2=xs[kk][1];
m_mp3=xs[kk][2]; m_mp4=xs[kk][3];
m_vp=xs[kk][4];
}
}
m_mq1*=0.001; m_mq2*=0.001; m_mq3*=0.001;
m_mq4*=0.001; m_vq*=0.001;
m_mp1*=0.001; m_mp2*=0.001; m_mp3*=0.001;
m_mp4*=0.001; m_vp*=0.001;
UpdateData(FALSE);
}
void Csdt01::OnBTSdtHelp1()
{
ads_help("sdt2006.hlp","SDT01",0);
}
void Csdt01::OnBUTTONgjb1()
{
CSdt17 Dlg(CWnd::FromHandle(hWndACAD));
Dlg.DoModal();
}
void Csdt01::OnBUTTONjs2()
{
CString val,cval,ival;
double b,h,h0,fc,fy,x;
UpdateData(TRUE);
m_b2.GetLBText(m_b2.GetCurSel(),val);
b=atof(val);
m_h2.GetLBText(m_h2.GetCurSel(),val);
h=atof(val);
m_c2.GetLBText(m_c2.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_i2.GetLBText(m_i2.GetCurSel(),ival);
if( !strcmp(ival,"1") ) { fy=210 ; } // I
if( !strcmp(ival,"2") ) { fy=300 ; } // II
if( !strcmp(ival,"3") ) { fy=360 ; } // III
h0=h-35;
x=fy*m_as2/b/fc;
m_m2=fc*b*x*(h0-x/2)/1E6;
val.Format("%8.3f",m_m2);
m_m2=atof(val);
UpdateData(FALSE);
}
void Csdt01::OnBUTTONjsdk()
{
// TODO: Add your control notification handler code here
acedCommand(RTSTR,"NOTEPAD",RTSTR,flname,RTNONE);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -