⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sdt02.cpp

📁 AutoCAD平台结构设计工具 按最新国家结构设计规范编写.
💻 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 + -