#include "StdAfx.h" #include "autostairdlg.h" #include "resource.h" //初始化 BOOL CAutoStairDlg::m_bSelectStair=FALSE; int CAutoStairDlg::m_iSelectFloor=1; BOOL CAutoStairDlg::m_bUpDir=TRUE; BOOL CAutoStairDlg::m_bTongDir=FALSE; BOOL CAutoStairDlg::m_bPutMode=TRUE; CString CAutoStairDlg::m_strFloorHeight=_T("3000"); CString CAutoStairDlg::m_strSlabLength=_T("2200"); CString CAutoStairDlg::m_strSlopeAngle=_T("30"); CString CAutoStairDlg::m_strStepLength=_T("900"); CString CAutoStairDlg::m_strSpaceWidth=_T("100"); CString CAutoStairDlg::m_strStairWidth=_T("800"); CString CAutoStairDlg::m_strAscentLen=_T("12000"); //保留结果的操作 int CAutoStairDlg::m_isaveStepNum=20; CString CAutoStairDlg::m_strsaveStepHeight=_T("150"); CString CAutoStairDlg::m_strsaveStairHeight=_T("3000"); IMPLEMENT_DYNAMIC(CAutoStairDlg,CBaseStairDlg) CAutoStairDlg::CAutoStairDlg(CWnd* pParent /*=NULL*/) : CBaseStairDlg(CAutoStairDlg::IDD, pParent) { Exchange(m_nStepNum,m_isaveStepNum); Exchange(m_strStepHeight,m_strsaveStepHeight); Exchange(m_strStairHeight,m_strsaveStairHeight); //初始话 m_bEdit=FALSE;//处于非编辑状态 m_pBakObj=NULL;//为空状态 } CAutoStairDlg::CAutoStairDlg(UINT id,CWnd* pParent /*=NULL*/) : CBaseStairDlg(id, pParent) { Exchange(m_nStepNum,m_isaveStepNum); Exchange(m_strStepHeight,m_strsaveStepHeight); Exchange(m_strStairHeight,m_strsaveStairHeight); //初始话 m_bEdit=FALSE;//处于非编辑状态 m_pBakObj=NULL;//为空状态 } CAutoStairDlg::~CAutoStairDlg() { Exchange(m_nStepNum,m_isaveStepNum); Exchange(m_strStepHeight,m_strsaveStepHeight); Exchange(m_strStairHeight,m_strsaveStairHeight); if (m_bEdit) delete m_pBakObj; } AcDbEntity *CAutoStairDlg::NewObject() { TDbAutoStair *pEnt=new TDbAutoStair; if (m_pBakObj==NULL) { pEnt=new TDbAutoStair; pEnt->setLayer(InitLayer(LAY_STAIR)); pEnt->SetLayerText(InitLayer(LAY_TEXT)); pEnt->SetTextStyle(InitTextStyle(TS_DIM)); pEnt->SetLayerArrow(InitLayer(LAY_OTHER_DIM)); //add by xlc on 090205 解决用户坐标系下预览文字倾斜的问题 pEnt->SetLayoutRotation(0); return pEnt; } else { return (AcDbEntity*)(m_pBakObj->clone()); } } void CAutoStairDlg::DoDataExchange(CDataExchange* pDX) { CBaseStairDlg::DoDataExchange(pDX); DDX_Text(pDX,IDC_STATIC_LENGTH,m_strLength); DDX_Text(pDX,IDC_STATIC_WIDTH,m_strWidth); DDX_Text(pDX,IDC_EDIT_FLOORWIDTH,m_strFloorHeight); DDX_Text(pDX,IDC_EDIT_STEPWIDTH,m_strStepLength); DDX_Text(pDX,IDC_EDIT_SLABWIDTH,m_strSlabLength); DDX_CBString(pDX,IDC_COMBO_ANGLE,m_strSlopeAngle); DDX_Text(pDX,IDC_EDIT_SPACEWIDTH,m_strSpaceWidth); DDX_Radio(pDX,IDC_RADIO_FIRST,m_iSelectFloor); DDX_Check(pDX,IDC_CHECK_UPFLOOR,m_bUpDir); DDX_Check(pDX,IDC_CHECK_TDIR,m_bTongDir); DDX_Radio(pDX,IDC_RADIO_SINGLE,m_bSelectStair); DDX_Radio(pDX,IDC_RADIO_APPOSE,m_bPutMode); DDX_Control(pDX,IDC_COMBO_ANGLE,m_ctrlSlopeAngle); DDX_Check(pDX,IDC_CHECK_OPENHOLE,m_bOpenHole); DDX_Text(pDX,IDC_EDIT_STAIRWIDTH,m_strStairWidth);//楼梯宽度 DDX_Text(pDX,IDC_EDIT_ASCENTLEN,m_strAscentLen);// [7/10/2008 nsh] } BEGIN_MESSAGE_MAP(CAutoStairDlg, CBaseStairDlg) ON_BN_CLICKED(IDC_AS_ASCENT,UpdateSel) //ON_BN_CLICKED(IDC_CHECK_UPFLOOR,UpdateSel) ON_EN_CHANGE(IDC_EDIT_FLOORWIDTH,OnChangeFloorWidth) ON_EN_CHANGE(IDC_EDIT_SLABWIDTH,OnChangeSlabWidth) ON_EN_CHANGE(IDC_EDIT_STEPWIDTH,OnChangeStepWidth) ON_EN_CHANGE(IDC_EDIT_SPACEWIDTH,OnChangeSpaceWidth) ON_CBN_SELCHANGE(IDC_COMBO_ANGLE,OnSelChangeSlopeAngle) ON_EN_CHANGE(IDC_COMBO_ANGLE,OnSelChangeSlopeAngle) ON_EN_CHANGE(IDC_EDIT_STAIRWIDTH,OnChangeStairWidth) ON_CBN_EDITCHANGE(IDC_COMBO_ANGLE,OnChangeSlopeAngle) //楼层设置 ON_BN_CLICKED(IDC_RADIO_FIRST,UpdateSel) ON_BN_CLICKED(IDC_RADIO_MID,UpdateSel) ON_BN_CLICKED(IDC_RADIO_TOP,UpdateSel) //标注箭头方向 ON_BN_CLICKED(IDC_CHECK_UPFLOOR,UpdateSel) ON_BN_CLICKED(IDC_CHECK_TDIR,UpdateSel) //单双楼梯选择 ON_BN_CLICKED(IDC_RADIO_SINGLE,UpdateSel) ON_BN_CLICKED(IDC_RADIO_DOUBLE,UpdateSel) ON_BN_CLICKED(IDC_RADIO_APPOSE,UpdateSel) ON_BN_CLICKED(IDC_RADIO_CROSS,UpdateSel) //是否开洞 ON_BN_CLICKED(IDC_CHECK_OPENHOLE,UpdateSel) //坡道长度 ON_BN_CLICKED(IDC_BUTTON_ASCENTLEN,OnClickSelectAscentLen) ON_EN_CHANGE(IDC_EDIT_ASCENTLEN,OnChangeAscentLen)// [7/10/2008 nsh] END_MESSAGE_MAP() BOOL CAutoStairDlg::OnInitDialog() { CBaseStairDlg::OnInitDialog(); UpdateSel(); return TRUE; } bool CAutoStairDlg::UpdateEdit(UINT ctrlID,bool bReportError) { CWnd *pImageBox=GetDlgItem(IDC_PREVIEW); if (!pImageBox) return false; if (GetSafeHwnd()==NULL) return false; CEdit *pEdit=(CEdit*)GetDlgItem(ctrlID); if (pEdit==NULL) return false; static bool bUpdating=false; if (bUpdating) return false; bUpdating=true; CDataExchange dxOut(this,false); CString temp; pEdit->GetWindowText(temp); switch(ctrlID) { case IDC_EDIT_FLOORWIDTH: { //特殊处理 /*if (::_tstof(temp)<0.0 || temp=="") { if (m_bAsAscent) ::AfxMessageBox(_T("请输入正确的坡道长度")); else ::AfxMessageBox(_T("请输入正确的楼层高度")); DDX_Text(&dxOut,IDC_EDIT_FLOORWIDTH,m_strFloorHeight); bUpdating=FALSE; return false; }*/ m_strFloorHeight=temp; DDX_Text(&dxOut,IDC_EDIT_FLOORWIDTH,m_strFloorHeight); if (!m_bSelectStair) {//单梯 if (m_bAsAscent) m_strLength=Dist2Str(CountStairTotalLen(0,m_strFloorHeight,m_strSlabLength)); else m_strLength=Dist2Str(CountStairTotalLen(0,m_strSlabLength,m_strFloorHeight,m_strSlopeAngle)); m_strWidth=Dist2Str(CountStairTotalWidth(0,::_tstof(m_strStairWidth),0)); } else {//双梯 if (m_bAsAscent) m_strLength=Dist2Str(CountStairTotalLen(0,m_strFloorHeight,m_strSlabLength)); else m_strLength=Dist2Str(CountStairTotalLen(0,m_strSlabLength,m_strFloorHeight,m_strSlopeAngle)); m_strWidth=Dist2Str(CountStairTotalWidth(1,::_tstof(m_strStairWidth),::_tstof(m_strSpaceWidth))); } DDX_Text(&dxOut,IDC_STATIC_LENGTH,m_strLength); DDX_Text(&dxOut,IDC_STATIC_WIDTH,m_strWidth); } break; case IDC_EDIT_SLABWIDTH: { static CString strTemp; strTemp=m_strSlabLength; if (::_tstof(temp)<=0 || temp==_T("")) { bUpdating=FALSE; return false; } m_strSlabLength=temp; DDX_Text(&dxOut,IDC_EDIT_SLABWIDTH,m_strSlabLength); if (!m_bSelectStair) {//单梯 if (m_bAsAscent) m_strLength=Dist2Str(CountStairTotalLen(0,m_strFloorHeight,m_strSlabLength)); else m_strLength=Dist2Str(CountStairTotalLen(0,m_strSlabLength,m_strFloorHeight,m_strSlopeAngle)); m_strWidth=Dist2Str(CountStairTotalWidth(0,::_tstof(m_strStairWidth),0)); } else {//双梯 if (m_bAsAscent) m_strLength=Dist2Str(CountStairTotalLen(0,m_strFloorHeight,m_strSlabLength)); else m_strLength=Dist2Str(CountStairTotalLen(0,m_strSlabLength,m_strFloorHeight,m_strSlopeAngle)); m_strWidth=Dist2Str(CountStairTotalWidth(1,::_tstof(m_strStairWidth),::_tstof(m_strSpaceWidth))); } DDX_Text(&dxOut,IDC_STATIC_LENGTH,m_strLength); DDX_Text(&dxOut,IDC_STATIC_WIDTH,m_strWidth); } break; case IDC_EDIT_STEPWIDTH: { if (::_tstof(temp)<0 || temp==_T("")||::_tstof(temp)>::_tstof(m_strSlabLength)) { bUpdating=FALSE; return false; } m_strStepLength=temp; DDX_Text(&dxOut,IDC_EDIT_STEPWIDTH,m_strStepLength); } break; case IDC_EDIT_SPACEWIDTH: { m_strSpaceWidth=temp; DDX_Text(&dxOut,IDC_EDIT_SPACEWIDTH,m_strSpaceWidth); if (!m_bSelectStair) {//单梯 if (m_bAsAscent) m_strLength=Dist2Str(CountStairTotalLen(0,m_strFloorHeight,m_strSlabLength)); else m_strLength=Dist2Str(CountStairTotalLen(0,m_strSlabLength,m_strFloorHeight,m_strSlopeAngle)); m_strWidth=Dist2Str(CountStairTotalWidth(0,::_tstof(m_strStairWidth),0)); } else {//双梯 if (m_bAsAscent) m_strLength=Dist2Str(CountStairTotalLen(0,m_strFloorHeight,m_strSlabLength)); else m_strLength=Dist2Str(CountStairTotalLen(0,m_strSlabLength,m_strFloorHeight,m_strSlopeAngle)); m_strWidth=Dist2Str(CountStairTotalWidth(1,::_tstof(m_strStairWidth),::_tstof(m_strSpaceWidth))); } DDX_Text(&dxOut,IDC_STATIC_LENGTH,m_strLength); DDX_Text(&dxOut,IDC_STATIC_WIDTH,m_strWidth); } break; case IDC_EDIT_STAIRWIDTH: { if (::_tstof(temp)<0.0 || temp=="") { bUpdating=FALSE; return false; } m_strStairWidth=temp; DDX_Text(&dxOut,IDC_EDIT_STAIRWIDTH,m_strStairWidth); if (!m_bSelectStair) {//单梯 if (m_bAsAscent) m_strLength=Dist2Str(CountStairTotalLen(0,m_strFloorHeight,m_strSlabLength)); else m_strLength=Dist2Str(CountStairTotalLen(1,m_strSlabLength,m_strFloorHeight,m_strSlopeAngle)); m_strWidth=Dist2Str(CountStairTotalWidth(0,::_tstof(m_strStairWidth),0)); } else {//双梯 if (m_bAsAscent) m_strLength=Dist2Str(CountStairTotalLen(0,m_strFloorHeight,m_strSlabLength)); else m_strLength=Dist2Str(CountStairTotalLen(0,m_strSlabLength,m_strFloorHeight,m_strSlopeAngle)); m_strWidth=Dist2Str(CountStairTotalWidth(1,::_tstof(m_strStairWidth),::_tstof(m_strSpaceWidth))); } DDX_Text(&dxOut,IDC_STATIC_LENGTH,m_strLength); DDX_Text(&dxOut,IDC_STATIC_WIDTH,m_strWidth); } break; case IDC_COMBO_ANGLE:// [7/7/2008 nsh] {//倾斜角度改变 if (::_tstof(temp)>=45 || ::_tstof(temp)<0 || temp=="" || ((!m_bAsAscent) && ::_ttoi(temp)==0)) { bUpdating=FALSE; return false; } m_strSlopeAngle=temp; //DDX_CBString(&dxOut,IDC_COMBO_ANGLE,m_strSlopeAngle); if (!m_bSelectStair) {//单梯 if (m_bAsAscent) m_strLength=Dist2Str(CountStairTotalLen(0,m_strFloorHeight,m_strSlabLength)); else m_strLength=Dist2Str(CountStairTotalLen(0,m_strSlabLength,m_strFloorHeight,m_strSlopeAngle)); m_strWidth=Dist2Str(CountStairTotalWidth(0,::_tstof(m_strStairWidth),0)); } else {//双梯 if (m_bAsAscent) m_strLength=Dist2Str(CountStairTotalLen(0,m_strFloorHeight,m_strSlabLength)); else m_strLength=Dist2Str(CountStairTotalLen(0,m_strSlabLength,m_strFloorHeight,m_strSlopeAngle)); m_strWidth=Dist2Str(CountStairTotalWidth(1,::_tstof(m_strStairWidth),::_tstof(m_strSpaceWidth))); } DDX_Text(&dxOut,IDC_STATIC_LENGTH,m_strLength); DDX_Text(&dxOut,IDC_STATIC_WIDTH,m_strWidth); } break; case IDC_EDIT_ASCENTLEN: {// [7/10/2008 nsh]新的求坡道长度的问题 if (::_tstof(temp)<0 || temp==_T("")) { bUpdating=false; return false; } m_strAscentLen=temp; DDX_Text(&dxOut,IDC_EDIT_ASCENTLEN,m_strAscentLen); if (!m_bSelectStair) {//单梯 if (m_bAsAscent) m_strLength=Dist2Str(CountStairTotalLen(0,m_strFloorHeight,m_strSlabLength)); else m_strLength=Dist2Str(CountStairTotalLen(0,m_strSlabLength,m_strFloorHeight,m_strSlopeAngle)); m_strWidth=Dist2Str(CountStairTotalWidth(0,::_tstof(m_strStairWidth),0)); } else {//双梯 if (m_bAsAscent) m_strLength=Dist2Str(CountStairTotalLen(0,m_strFloorHeight,m_strSlabLength)); else m_strLength=Dist2Str(CountStairTotalLen(0,m_strSlabLength,m_strFloorHeight,m_strSlopeAngle)); m_strWidth=Dist2Str(CountStairTotalWidth(1,::_tstof(m_strStairWidth),::_tstof(m_strSpaceWidth))); } DDX_Text(&dxOut,IDC_STATIC_LENGTH,m_strLength); DDX_Text(&dxOut,IDC_STATIC_WIDTH,m_strWidth); } break; } bUpdating=FALSE; UpdateImage(); return false; } void CAutoStairDlg::UpdateSel() { CBaseStairDlg::UpdateSel(); UpdateData(TRUE); // this->GetDlgItem(IDC_CHECK_TDIR)->EnableWindow(m_bUpDir); //双梯的情况下 this->GetDlgItem(IDC_RADIO_APPOSE)->EnableWindow(m_bSelectStair); this->GetDlgItem(IDC_RADIO_CROSS)->EnableWindow(m_bSelectStair); this->GetDlgItem(IDC_EDIT_SPACEWIDTH)->EnableWindow(m_bSelectStair); //楼层选择 if (((CButton*)this->GetDlgItem(IDC_RADIO_FIRST))->GetCheck()) m_iSelectFloor=0; else if (((CButton*)this->GetDlgItem(IDC_RADIO_MID))->GetCheck()) m_iSelectFloor=1; else m_iSelectFloor=2; if (m_iSelectFloor==2&&(!m_bSelectStair||((!m_bPutMode)&&m_bSelectStair))) { this->GetDlgItem(IDC_CHECK_OPENHOLE)->EnableWindow(TRUE); } else this->GetDlgItem(IDC_CHECK_OPENHOLE)->EnableWindow(FALSE); // [7/7/2008 nsh] if (m_strSlopeAngle==_T("0") && m_bAsAscent) { this->GetDlgItem(IDC_BUTTON_ASCENTLEN)->ShowWindow(SW_SHOW); this->GetDlgItem(IDC_EDIT_ASCENTLEN)->ShowWindow(SW_SHOW); this->GetDlgItem(IDC_STATIC_FLOORHEIGHT)->ShowWindow(SW_HIDE); this->GetDlgItem(IDC_EDIT_FLOORWIDTH)->ShowWindow(SW_HIDE); this->GetDlgItem(IDC_RADIO_FIRST)->EnableWindow(FALSE); this->GetDlgItem(IDC_RADIO_MID)->EnableWindow(FALSE); this->GetDlgItem(IDC_RADIO_TOP)->EnableWindow(FALSE); this->GetDlgItem(IDC_CHECK_OPENHOLE)->EnableWindow(FALSE); m_strStepLength=_T("0"); } else { this->GetDlgItem(IDC_BUTTON_ASCENTLEN)->ShowWindow(SW_HIDE); this->GetDlgItem(IDC_EDIT_ASCENTLEN)->ShowWindow(SW_HIDE); this->GetDlgItem(IDC_STATIC_FLOORHEIGHT)->ShowWindow(SW_SHOW); this->GetDlgItem(IDC_EDIT_FLOORWIDTH)->ShowWindow(SW_SHOW); this->GetDlgItem(IDC_RADIO_FIRST)->EnableWindow(TRUE); this->GetDlgItem(IDC_RADIO_MID)->EnableWindow(TRUE); this->GetDlgItem(IDC_RADIO_TOP)->EnableWindow(TRUE); //this->GetDlgItem(IDC_CHECK_OPENHOLE)->EnableWindow(TRUE); } if (m_bAsAscent) { m_ctrlSlopeAngle.ResetContent(); m_ctrlSlopeAngle.AddString(_T("0")); m_ctrlSlopeAngle.AddString(_T("10")); m_ctrlSlopeAngle.AddString(_T("12")); } else { m_ctrlSlopeAngle.ResetContent(); m_ctrlSlopeAngle.AddString(_T("30")); m_ctrlSlopeAngle.AddString(_T("35")); } if (m_bAsAscent && m_strSlopeAngle==_T("0")) {//当为零的情况下要进行坡道的计算机 this->GetDlgItem(IDC_EDIT_STEPWIDTH)->EnableWindow(FALSE); } else { this->GetDlgItem(IDC_EDIT_STEPWIDTH)->EnableWindow(TRUE); } //以下测试,为保证 if (!m_bAsAscent && m_strSlopeAngle==_T("0")) { m_strSlopeAngle=_T("30"); } //-------------------------------------- //层间同向运行/双梯同向运行 //modify by xlc on 090115 // if (m_bSelectStair && m_iSelectFloor==2) // {//双梯,顶层 // this->GetDlgItem(IDC_CHECK_TDIR)->SetWindowText(_T("层间同向运行")); // } // else if (m_bSelectStair && m_bAsAscent && m_strSlopeAngle==_T("0")) // { // this->GetDlgItem(IDC_CHECK_TDIR)->SetWindowText(_T("层间同向运行")); // } // else // this->GetDlgItem(IDC_CHECK_TDIR)->SetWindowText(_T("层间同向运行")); if ((m_bAsAscent && m_strSlopeAngle==_T("0"))) { this->GetDlgItem(IDC_CHECK_TDIR)->SetWindowText(_T("层间同向运行")); } else if (m_bSelectStair&& m_iSelectFloor==0) { this->GetDlgItem(IDC_CHECK_TDIR)->SetWindowText(_T("两梯都是上楼")); } else if (m_bSelectStair&& m_iSelectFloor==2) { this->GetDlgItem(IDC_CHECK_TDIR)->SetWindowText(_T("两梯都是下楼")); } else { this->GetDlgItem(IDC_CHECK_TDIR)->SetWindowText(_T("层间同向运行")); } //-------------------------------------- //对标注上楼方向的修改 if (m_bAsAscent && ::_tstof(m_strSlopeAngle)==0.0) { this->GetDlgItem(IDC_CHECK_UPFLOOR)->SetWindowText(_T("标注运行方向")); this->GetDlgItem(IDC_CHECK_TDIR)->EnableWindow(FALSE); } else { this->GetDlgItem(IDC_CHECK_UPFLOOR)->SetWindowText(_T("标注上楼方向")); if (m_bUpDir&&((!m_bSelectStair&&m_iSelectFloor==1)||m_bSelectStair)) this->GetDlgItem(IDC_CHECK_TDIR)->EnableWindow(TRUE); else this->GetDlgItem(IDC_CHECK_TDIR)->EnableWindow(FALSE); } // this->GetDlgItem(IDC_CHECK_TDIR)->EnableWindow((m_iSelectFloor==2 || m_iSelectFloor==0)?FALSE:TRUE);// [7/28/2008 nsh] //modify by xlc on 090414 if (!m_bSelectStair&&(m_iSelectFloor==2 || m_iSelectFloor==0)) { this->GetDlgItem(IDC_CHECK_TDIR)->EnableWindow(FALSE); } //------------------------------ //以下对2D or 3D的显示 if (m_bNeed2D && m_bNeed3D) m_iViewCtrl=0; else if (!m_bNeed2D && m_bNeed3D) m_iViewCtrl=2; else if (m_bNeed2D && !m_bNeed3D) m_iViewCtrl=1; else m_iViewCtrl=0; //对楼梯的标注 //this->GetDlgItem(IDC_CHECK_TDIR)->EnableWindow(m_bUpDir); if (!m_bSelectStair) {//单梯 if (m_bAsAscent) m_strLength=Dist2Str(CountStairTotalLen(0,m_strFloorHeight,m_strSlabLength)); else m_strLength=Dist2Str(CountStairTotalLen(0,m_strSlabLength,m_strFloorHeight,m_strSlopeAngle)); m_strWidth=Dist2Str(CountStairTotalWidth(0,::_tstof(m_strStairWidth),0)); } else {//双梯 if (m_bAsAscent) m_strLength=Dist2Str(CountStairTotalLen(0,m_strFloorHeight,m_strSlabLength)); else m_strLength=Dist2Str(CountStairTotalLen(0,m_strSlabLength,m_strFloorHeight,m_strSlopeAngle)); m_strWidth=Dist2Str(CountStairTotalWidth(1,::_tstof(m_strStairWidth),::_tstof(m_strSpaceWidth))); } UpdateData(FALSE); UpdateImage(); } void CAutoStairDlg::Dlg2Obj(AcDbEntity *pStep)//导出 { TDbAutoStair *pStair=TDbAutoStair::cast(pStep); pStair->SetAscent(m_bAsAscent); /*if (!m_bAsAscent) pStair->SetFloorHeight(::_tstof(m_strFloorHeight)); else pStair->SetSlopeLength(::_tstof(m_strAscentLen));*/ // [7/10/2008 nsh]----------------- if (m_bAsAscent && ::_ttoi(m_strSlopeAngle)==0) { pStair->SetSlopeLength(::_tstof(m_strAscentLen)-2*::_tstof(m_strSlabLength)); } else { if (m_bAsAscent) { double length=::_tstof(m_strFloorHeight)/tan(PI*::_tstof(m_strSlopeAngle)/180); int num=(int)(length/300); length=num*300; pStair->SetSlopeLength(length); } pStair->SetFloorHeight(::_tstof(m_strFloorHeight)); } //---------------------------------- pStair->SetSlabSize(::_tstof(m_strSlabLength)); if (m_bAsAscent && m_strSlopeAngle==_T("0")) pStair->SetStepDist(0); else pStair->SetStepDist(::_tstof(m_strStepLength));//平步距离 pStair->SetSameDir(m_bUpDir?m_bTongDir:FALSE); pStair->SetSlopeAngle(::_ttoi(m_strSlopeAngle)); pStair->SetSingleStair(!m_bSelectStair); pStair->SetCross(m_bSelectStair?m_bPutMode:FALSE); if (m_bAsAscent && m_strSlopeAngle==_T("0")) { pStair->SetStairFlag(2); } else pStair->SetStairFlag(m_iSelectFloor); pStair->SetViewCtrl(m_iViewCtrl); pStair->SetArrow(m_bUpDir); pStair->SetSameDir(m_bUpDir?m_bTongDir:FALSE); pStair->SetSpaceWidth(::_tstof(m_strSpaceWidth)); if (m_bAsAscent && m_strSlopeAngle==_T("0")) { pStair->SetHasHole(FALSE); } else pStair->SetHasHole(m_iSelectFloor==2?m_bOpenHole:FALSE); pStair->SetStairWidth(::_tstof(m_strStairWidth)); pStair->GetTotalLength(); pStair->GetTotalWidth(); // [8/14/2008 nsh] //------------------------ if (m_bEdit) { delete m_pBakObj; m_pBakObj=(TDbAutoStair*)(pStair->clone()); } //------------------------ return; } void CAutoStairDlg::Obj2Dlg(const AcDbEntity *pStep)//导入 { TDbAutoStair *pStair=TDbAutoStair::cast(pStep); // [8/14/2008 nsh] //-------------------------------- m_bEdit=TRUE; m_pBakObj=(TDbAutoStair*)(pStair->clone());//专递值 //-------------------------------- m_strSlopeAngle=Dist2Str(pStair->GetSlopeAngle()); m_strStepLength=Dist2Str(pStair->GetStepDist()); m_strSlabLength=Dist2Str(pStair->GetSlabSize()); m_iSelectFloor=pStair->GetStairFlag(); m_bTongDir=pStair->IsSameDir(); m_bSelectStair=!pStair->IsSingleStair(); m_bOpenHole=pStair->IsHasHole(); m_strSpaceWidth=Dist2Str(pStair->GetSpaceWidth()); m_bAsAscent=pStair->IsAscent(); m_bPutMode=pStair->IsCross(); m_iViewCtrl=pStair->GetViewCtrl(); m_strSlopeAngle.Format(_T("%.0f"),pStair->GetSlopeAngle()); double sss=pStair->GetSlopeAngle();//测试 /*if (!pStair->IsAscent()) { m_strFloorHeight=Dist2Str(pStair->GetFloorHeight()); } else m_strFloorHeight=Dist2Str(pStair->GetSlopeLength());*/ // [7/10/2008 nsh]--------------- if (pStair->IsAscent() && pStair->GetSlopeAngle()==0) { m_strAscentLen=Dist2Str(pStair->GetSlopeLength() + 2*pStair->GetSlabSize()); } else m_strFloorHeight=Dist2Str(pStair->GetFloorHeight()); //-------------------------------- m_strStairWidth=Dist2Str(pStair->GetStairWidth()); m_strWidth=Dist2Str(pStair->GetTotalWidth()); if (!m_bSelectStair) {//单梯 if (m_bAsAscent) m_strLength=Dist2Str(CountStairTotalLen(0,m_strFloorHeight,m_strSlabLength)); else m_strLength=Dist2Str(CountStairTotalLen(0,m_strSlabLength,m_strFloorHeight,m_strSlopeAngle)); m_strWidth=Dist2Str(CountStairTotalWidth(0,::_tstof(m_strStairWidth),0)); } else {//双梯 if (m_bAsAscent) m_strLength=Dist2Str(CountStairTotalLen(0,m_strFloorHeight,m_strSlabLength)); else m_strLength=Dist2Str(CountStairTotalLen(0,m_strSlabLength,m_strFloorHeight,m_strSlopeAngle)); m_strWidth=Dist2Str(CountStairTotalWidth(1,::_tstof(m_strStairWidth),::_tstof(m_strSpaceWidth))); } return; } void CAutoStairDlg::OnChangeFloorWidth() {//楼层高度或是坡道长度 UpdateEdit(IDC_EDIT_FLOORWIDTH,false); return; } void CAutoStairDlg::OnChangeSlabWidth() {//平台距离 UpdateEdit(IDC_EDIT_SLABWIDTH,false); return; } void CAutoStairDlg::OnChangeStepWidth() {//平步距离 UpdateEdit(IDC_EDIT_STEPWIDTH,false); return; } void CAutoStairDlg::OnChangeSpaceWidth() {//两跑之间的距离 UpdateEdit(IDC_EDIT_SPACEWIDTH,false); return; } void CAutoStairDlg::OnChangeStairWidth() {//梯段宽度 UpdateEdit(IDC_EDIT_STAIRWIDTH,false); return; } void CAutoStairDlg::OnClickSelectAscentLen() { double dDist=::_tstof(m_strAscentLen); BeginEditorCommand(); int nRet=GetDist(_T("\n直接键入坡道长度或给出两点定义坡道长度:"), dDist, RSG_NOZERO|RSG_NONEG|RSG_2D); CompleteEditorCommand(); if (nRet==RTNORM) { CDataExchange dxOut(this,false); m_strAscentLen=Dist2Str(dDist); DDX_Text(&dxOut,IDC_EDIT_ASCENTLEN,m_strAscentLen); UpdateImage(); } return; } void CAutoStairDlg::OnSelChangeSlopeAngle() {//倾斜角度 CString temp; CDataExchange dxIn(this,TRUE); DDX_CBString(&dxIn,IDC_COMBO_ANGLE,m_strStairHeight); m_ctrlSlopeAngle.GetLBText(m_ctrlSlopeAngle.GetCurSel(),temp); m_strSlopeAngle=temp; if (temp==_T("0") && m_bAsAscent) { this->GetDlgItem(IDC_EDIT_STEPWIDTH)->EnableWindow(FALSE); this->GetDlgItem(IDC_BUTTON_ASCENTLEN)->ShowWindow(SW_SHOW); this->GetDlgItem(IDC_EDIT_ASCENTLEN)->ShowWindow(SW_SHOW); this->GetDlgItem(IDC_STATIC_FLOORHEIGHT)->ShowWindow(SW_HIDE); this->GetDlgItem(IDC_EDIT_FLOORWIDTH)->ShowWindow(SW_HIDE); this->GetDlgItem(IDC_RADIO_FIRST)->EnableWindow(FALSE); this->GetDlgItem(IDC_RADIO_MID)->EnableWindow(FALSE); this->GetDlgItem(IDC_RADIO_TOP)->EnableWindow(FALSE); this->GetDlgItem(IDC_CHECK_OPENHOLE)->EnableWindow(FALSE); m_strStepLength=__T("0"); } else { this->GetDlgItem(IDC_EDIT_STEPWIDTH)->EnableWindow(TRUE); this->GetDlgItem(IDC_BUTTON_ASCENTLEN)->ShowWindow(SW_HIDE); this->GetDlgItem(IDC_EDIT_ASCENTLEN)->ShowWindow(SW_HIDE); this->GetDlgItem(IDC_STATIC_FLOORHEIGHT)->ShowWindow(SW_SHOW); this->GetDlgItem(IDC_EDIT_FLOORWIDTH)->ShowWindow(SW_SHOW); this->GetDlgItem(IDC_RADIO_FIRST)->EnableWindow(TRUE); this->GetDlgItem(IDC_RADIO_MID)->EnableWindow(TRUE); this->GetDlgItem(IDC_RADIO_TOP)->EnableWindow(TRUE); if (m_iSelectFloor==2&&(!m_bSelectStair||((!m_bPutMode)&&m_bSelectStair))) { this->GetDlgItem(IDC_CHECK_OPENHOLE)->EnableWindow(TRUE); } else this->GetDlgItem(IDC_CHECK_OPENHOLE)->EnableWindow(FALSE); } CDataExchange dxOut(this,FALSE); DDX_CBString(&dxOut,IDC_COMBO_ANGLE,m_strSlopeAngle); DDX_Text(&dxOut,IDC_EDIT_STEPWIDTH,m_strStepLength); DDX_Text(&dxOut,IDC_EDIT_FLOORWIDTH,m_strFloorHeight); if (!m_bSelectStair) {//单梯 if (m_bAsAscent) m_strLength=Dist2Str(CountStairTotalLen(0,m_strFloorHeight,m_strSlabLength)); else m_strLength=Dist2Str(CountStairTotalLen(0,m_strSlabLength,m_strFloorHeight,m_strSlopeAngle)); m_strWidth=Dist2Str(CountStairTotalWidth(0,::_tstof(m_strStairWidth),0)); } else {//双梯 if (m_bAsAscent) m_strLength=Dist2Str(CountStairTotalLen(0,m_strFloorHeight,m_strSlabLength)); else m_strLength=Dist2Str(CountStairTotalLen(0,m_strSlabLength,m_strFloorHeight,m_strSlopeAngle)); m_strWidth=Dist2Str(CountStairTotalWidth(1,::_tstof(m_strStairWidth),::_tstof(m_strSpaceWidth))); } //对标注上楼方向的修改 if (m_bAsAscent && ::_tstof(m_strSlopeAngle)==0.0) { this->GetDlgItem(IDC_CHECK_UPFLOOR)->SetWindowText(_T("标注运行方向")); this->GetDlgItem(IDC_CHECK_TDIR)->EnableWindow(FALSE); } else { this->GetDlgItem(IDC_CHECK_UPFLOOR)->SetWindowText(_T("标注上楼方向")); if (!m_bSelectStair&&(m_iSelectFloor==2 || m_iSelectFloor==0)) { this->GetDlgItem(IDC_CHECK_TDIR)->EnableWindow(FALSE); } else this->GetDlgItem(IDC_CHECK_TDIR)->EnableWindow(TRUE); } if ((m_bAsAscent && m_strSlopeAngle==_T("0"))) { this->GetDlgItem(IDC_CHECK_TDIR)->SetWindowText(_T("层间同向运行")); } else if (m_bSelectStair&& m_iSelectFloor==0) { this->GetDlgItem(IDC_CHECK_TDIR)->SetWindowText(_T("两梯都是上楼")); } else if (m_bSelectStair&& m_iSelectFloor==2) { this->GetDlgItem(IDC_CHECK_TDIR)->SetWindowText(_T("两梯都是下楼")); } else { this->GetDlgItem(IDC_CHECK_TDIR)->SetWindowText(_T("层间同向运行")); } //------------------------------ DDX_Text(&dxOut,IDC_STATIC_LENGTH,m_strLength); DDX_Text(&dxOut,IDC_STATIC_WIDTH,m_strWidth); UpdateImage(); return; } void CAutoStairDlg::OnChangeSlopeAngle() {//改变角度 UpdateEdit(IDC_COMBO_ANGLE,false); } void CAutoStairDlg::OnChangeAscentLen() {//坡道长度 UpdateEdit(IDC_EDIT_ASCENTLEN,false); return; } //计算函数 double CAutoStairDlg::CountStairTotalLen(short nFlag,const CString AscentLen,const CString SlabLength) { if (::_tstof(m_strSlopeAngle)==0) { return ::_tstof(m_strAscentLen);//+::_tstof(SlabLength)+::_tstof(SlabLength); } else { double length=::_tstof(m_strFloorHeight)/tan(PI*::_tstof(m_strSlopeAngle)/180); int num=(int)(length/300); length=num*300; return ::_tstof(SlabLength)+::_tstof(SlabLength)+ length; } } double CAutoStairDlg::CountStairTotalLen(short nFlag,const CString SlabLength,const CString FloorHeight,const CString SlopeAngle) { double length=::_tstof(FloorHeight)/tan(PI*::_tstof(SlopeAngle)/180); int num=(int)(length/300); length=num*300; return ::_tstof(SlabLength)+::_tstof(SlabLength)+ length; } double CAutoStairDlg::CountStairTotalWidth(short nFlag,const double StairWidth,const double SpaceWidth) { if (nFlag==0) {//单梯的时候 return StairWidth+g_dWidth; } else { return 2*(StairWidth+g_dWidth)+SpaceWidth; } }