867 lines
23 KiB
C++
867 lines
23 KiB
C++
// ArcStairDlg.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "resource.h"
|
|
#include "ArcStairCreateDlg.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CArcStairCreateDlg dialog
|
|
|
|
CString CArcStairCreateDlg::m_strStartAngle = _T("0");
|
|
CString CArcStairCreateDlg::m_strSweepAngle = _T("180");
|
|
CString CArcStairCreateDlg::m_strInRadius = _T("800");
|
|
int CArcStairCreateDlg::m_nFace = 1;
|
|
int CArcStairCreateDlg::m_nLocate = 0;
|
|
CString CArcStairCreateDlg::m_strOutRadius = _T("2000");
|
|
CString CArcStairCreateDlg::m_strStairWidth = _T("1200");
|
|
CArcStairCreateDlg * CArcStairCreateDlg::p_selfARC=NULL;
|
|
|
|
BOOL CArcStairCreateDlg::m_bInsideR=FALSE;
|
|
BOOL CArcStairCreateDlg::m_bOutsideR=FALSE;
|
|
BOOL CArcStairCreateDlg::m_bAngle=FALSE;
|
|
//以下是对处理错误的填写数据判断的初始化
|
|
BOOL CArcStairCreateDlg::m_bError=FALSE;
|
|
//-------------------------------------
|
|
//以下是对ESC响应变量的初始化
|
|
BOOL CArcStairCreateDlg::m_bAng=FALSE;
|
|
BOOL CArcStairCreateDlg::m_bUpdateEdit=FALSE;
|
|
BOOL CArcStairCreateDlg::m_bPRI = FALSE;
|
|
BOOL CArcStairCreateDlg::m_bPRO = FALSE;
|
|
//-------------------------------------------
|
|
BOOL CArcStairCreateDlg::m_bWGroupStatus=FALSE;
|
|
//
|
|
int CArcStairCreateDlg::m_isaveStepNum=20;
|
|
CString CArcStairCreateDlg::m_strsaveStepHeight=_T("150");
|
|
CString CArcStairCreateDlg::m_strsaveStairHeight=_T("3000");
|
|
IMPLEMENT_DYNAMIC(CArcStairCreateDlg, CBaseStairDlg)
|
|
CArcStairCreateDlg::CArcStairCreateDlg(CWnd* pParent /*=NULL*/)
|
|
: CBaseStairDlg(CArcStairCreateDlg::IDD, pParent)
|
|
{
|
|
//{{AFX_DATA_INIT(CArcStairCreateDlg)
|
|
//}}AFX_DATA_INIT
|
|
/*m_groups.Append(&m_group1);
|
|
m_groups.Append(&m_group2);
|
|
m_groups.Append(&m_group3);*/
|
|
|
|
//SetNeedCapBtn(TRUE);
|
|
Exchange(m_nStepNum,m_isaveStepNum);
|
|
Exchange(m_strStepHeight,m_strsaveStepHeight);
|
|
Exchange(m_strStairHeight,m_strsaveStairHeight);
|
|
|
|
m_bEdit=FALSE;//处于非编辑状态
|
|
m_pBakObj=NULL;//为空状态
|
|
m_bClickClose=FALSE;
|
|
}
|
|
CArcStairCreateDlg::~CArcStairCreateDlg()
|
|
{
|
|
Exchange(m_nStepNum,m_isaveStepNum);
|
|
Exchange(m_strStepHeight,m_strsaveStepHeight);
|
|
Exchange(m_strStairHeight,m_strsaveStairHeight);
|
|
if (m_bEdit)
|
|
{
|
|
if (m_pBakObj)
|
|
delete m_pBakObj;//这个地方是不是有问题
|
|
}
|
|
}
|
|
AcDbEntity *
|
|
CArcStairCreateDlg::NewObject()
|
|
{
|
|
if (m_pBakObj==NULL)
|
|
{
|
|
TDbArcStair *pEnt=new TDbArcStair;
|
|
pEnt->setLayer(InitLayer(LAY_STAIR));
|
|
return pEnt;
|
|
}
|
|
return (AcDbEntity*)(m_pBakObj->clone());
|
|
}
|
|
|
|
|
|
void CArcStairCreateDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CBaseStairDlg::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CArcStairCreateDlg)
|
|
DDX_Text(pDX, IDC_STARTANGLE, m_strStartAngle);
|
|
DDX_Text(pDX, IDC_SWEEPANGLE, m_strSweepAngle);
|
|
DDX_Radio(pDX, IDC_DEASIL, m_nFace);
|
|
DDX_Radio(pDX, IDC_LOCATE_IN, m_nLocate);
|
|
DDX_Check(pDX,IDC_AS_ASCENT,m_ascent);
|
|
DDX_Control(pDX,IDC_GROUP3,m_WGroup);
|
|
DDX_GroupStatus(pDX,IDC_GROUP3,m_bWGroupStatus);
|
|
//}}AFX_DATA_MAP
|
|
if (!pDX->m_bSaveAndValidate)
|
|
{
|
|
DDX_Text(pDX, IDC_STAIR_INRADIUS, m_strInRadius);
|
|
DDX_Text(pDX, IDC_STAIR_WIDTH, m_strStairWidth);
|
|
DDX_Text(pDX, IDC_STEP_OUTRADIUS, m_strOutRadius);
|
|
}
|
|
}
|
|
BEGIN_MESSAGE_MAP(CArcStairCreateDlg, CBaseStairDlg)
|
|
//{{AFX_MSG_MAP(CArcStairCreateDlg)
|
|
ON_BN_CLICKED(IDC_BT_STARTANGLE, OnBtStartangle)
|
|
ON_BN_CLICKED(IDC_PICK_RADIUSIN, OnPickRadiusIn)
|
|
ON_BN_CLICKED(IDC_PICK_RADIUSOUT, OnPickRadiusOut)
|
|
ON_EN_KILLFOCUS(IDC_STEP_OUTRADIUS,OnKFRadiusOut)//外圆半径的失去焦点的处理函数
|
|
ON_EN_KILLFOCUS(IDC_STAIR_INRADIUS,OnKFRadiusIn)//内圆半径失去焦点的处理函数
|
|
ON_EN_KILLFOCUS(IDC_STAIR_WIDTH,OnKFStairWidth)
|
|
ON_EN_KILLFOCUS(IDC_SWEEPANGLE,OnKFSweepAngle)//圆心角失去焦点的处理函数
|
|
ON_EN_KILLFOCUS(IDC_STARTANGLE,OnKFStartAngle)//起始角度失去焦点的处理函数
|
|
ON_EN_CHANGE(IDC_STEP_OUTRADIUS,OnChangeRadiusOut)//外圆半径的change处理函数
|
|
ON_EN_CHANGE(IDC_STAIR_INRADIUS,OnChangeRadiusIn)//内圆半径的change处理函数
|
|
ON_EN_CHANGE(IDC_STAIR_WIDTH,OnChangeStairWidth)//梯段宽度的change处理函数
|
|
ON_EN_CHANGE(IDC_STARTANGLE,OnChangeStartAngle)//起始角度的change处理函数
|
|
ON_EN_CHANGE(IDC_SWEEPANGLE,OnChangeSweepAngle)//圆心角度的change处理函数
|
|
ON_EN_CHANGE(IDC_STEP_HEIGHT,OnChangeStepHeight)//对梯段高度的改变的应用
|
|
ON_EN_CHANGE(IDC_STEP_NUM,OnChangeStepNum)//对踏步数目的改变的应用
|
|
ON_EN_CHANGE(IDC_STAIR_HEIGHT,OnChangeStairHeight)//对梯段高度的问题的解决
|
|
ON_EN_KILLFOCUS(IDC_STEP_NUM,OnKFStepNum)//对踏步数目的失去焦点的应用
|
|
ON_EN_KILLFOCUS(IDC_STAIR_HEIGHT,OnKFStairHeight)//对梯段高度的失去焦点的应用
|
|
ON_EN_KILLFOCUS(IDC_STEP_HEIGHT,OnKFStepHeight)//对踏步高度的失去焦点的应用
|
|
ON_BN_CLICKED(IDC_LOCATE_OUT, OnLocate)
|
|
ON_BN_CLICKED(IDC_LOCATE_IN, OnLocate)
|
|
//}}AFX_MSG_MAP
|
|
ON_WM_CLOSE()
|
|
ON_WM_NCDESTROY()
|
|
ON_BN_CLICKED(IDC_LEFT_BEAM, CArcStairCreateDlg::OnBnClickedLeftBeam)
|
|
ON_BN_CLICKED(IDC_RIGHT_BEAM, CArcStairCreateDlg::OnBnClickedRightBeam)
|
|
ON_BN_CLICKED(IDC_NO_PAO, CArcStairCreateDlg::OnBnClickedNoPao)
|
|
ON_BN_CLICKED(IDC_BOTTOM_PAO, CArcStairCreateDlg::OnBnClickedBottomPao)
|
|
ON_BN_CLICKED(IDC_DOUBLE_PAO, CArcStairCreateDlg::OnBnClickedDoublePao)
|
|
ON_BN_CLICKED(IDC_UP_SECT, CArcStairCreateDlg::OnBnClickedUpSect)
|
|
/*ON_BN_CLICKED(IDC_NO_PAO, UpdateImage)
|
|
ON_BN_CLICKED(IDC_BOTTOM_PAO, UpdateImage)
|
|
ON_BN_CLICKED(IDC_DOUBLE_PAO, UpdateImage)
|
|
ON_BN_CLICKED(IDC_UP_SECT, UpdateImage)*/
|
|
ON_BN_CLICKED(IDC_AS_ASCENT, CArcStairCreateDlg::OnBnClickedAsAscent)
|
|
ON_BN_CLICKED(IDC_DEASIL, CArcStairCreateDlg::OnBnClickedDeasil)
|
|
ON_BN_CLICKED(IDC_ANTICLOCKWISE, CArcStairCreateDlg::OnBnClickedAnticlockwise)
|
|
ON_BN_CLICKED(IDC_HAS_SLANT, CArcStairCreateDlg::OnBnClickedHasSlant)
|
|
ON_BN_CLICKED(IDC_ON_GROUND, CArcStairCreateDlg::OnBnClickedOnGround)
|
|
ON_WM_KEYUP()
|
|
ON_BN_CLICKED(IDC_NEED3D, CArcStairCreateDlg::OnBnClickedNeed3d)
|
|
ON_BN_CLICKED(IDC_NEED2D, CArcStairCreateDlg::OnBnClickedNeed2d)
|
|
END_MESSAGE_MAP()
|
|
void CArcStairCreateDlg::OnChangeStairHeight()
|
|
{
|
|
}
|
|
void CArcStairCreateDlg::OnChangeStepHeight()
|
|
{
|
|
}
|
|
void CArcStairCreateDlg::OnChangeStepNum()
|
|
{
|
|
// UpdateEdit(IDC_STEP_NUM,true);
|
|
CString temp;
|
|
this->GetDlgItem(IDC_STEP_NUM)->GetWindowText(temp);
|
|
if (temp!=_T("")&&temp!=_T("1"))
|
|
{
|
|
UpdateEdit(IDC_STEP_NUM,false);
|
|
}
|
|
}
|
|
void CArcStairCreateDlg::OnKFStairHeight()
|
|
{
|
|
// if (this->CheckENChange(IDC_STAIR_HEIGHT,m_strStairHeight))
|
|
// {
|
|
// this->UpdateEdit(IDC_STAIR_HEIGHT,true);
|
|
// }
|
|
if (m_bClickClose)
|
|
return;
|
|
if (GetFocus()!=GetDlgItem(IDCANCEL))
|
|
{
|
|
CString strText;
|
|
GetDlgItem(IDC_STAIR_HEIGHT)->GetWindowText(strText);
|
|
if (fabs(_tstof(strText)-_tstof(m_strStairHeight))<_DIST_SNAP)
|
|
return;
|
|
|
|
UpdateEdit(IDC_STAIR_HEIGHT,true);
|
|
}
|
|
|
|
}
|
|
void CArcStairCreateDlg::OnKFStepHeight()
|
|
{
|
|
// if (this->CheckENChange(IDC_STEP_HEIGHT,m_strStepHeight))
|
|
// {
|
|
// this->UpdateEdit(IDC_STEP_HEIGHT,true);
|
|
// }
|
|
if (m_bClickClose)
|
|
return;
|
|
if (GetFocus()!=GetDlgItem(IDCANCEL))
|
|
{
|
|
CString strText;
|
|
GetDlgItem(IDC_STEP_HEIGHT)->GetWindowText(strText);
|
|
if (fabs(_tstof(strText)-_tstof(m_strStepHeight))<_DIST_SNAP)
|
|
return;
|
|
|
|
UpdateEdit(IDC_STEP_HEIGHT,true);
|
|
}
|
|
}
|
|
void CArcStairCreateDlg::OnKFStepNum()
|
|
{
|
|
// BOOL bResult;
|
|
// int x;
|
|
// x=this->GetDlgItemInt(IDC_STEP_NUM,&bResult,FALSE);
|
|
// if (x!=m_nStepNum)
|
|
// {
|
|
// this->UpdateEdit(IDC_STEP_NUM,true);
|
|
// }
|
|
if (m_bClickClose)
|
|
return;
|
|
if (GetFocus()!=GetDlgItem(IDCANCEL))
|
|
{
|
|
CString strText;
|
|
GetDlgItem(IDC_STEP_NUM)->GetWindowText(strText);
|
|
if (fabs(_tstof(strText)-m_nStepNum)<_DIST_SNAP)
|
|
return;
|
|
|
|
UpdateEdit(IDC_STEP_NUM,true);
|
|
}
|
|
}
|
|
void CArcStairCreateDlg::OnKFRadiusIn()
|
|
{
|
|
// if (this->CheckENChange(IDC_STAIR_INRADIUS,m_strInRadius))
|
|
// {
|
|
// UpdateEdit(IDC_STAIR_INRADIUS,true);
|
|
// }
|
|
if (m_bClickClose)
|
|
return;
|
|
if (GetFocus()!=GetDlgItem(IDCANCEL))
|
|
{
|
|
CString strText;
|
|
GetDlgItem(IDC_STAIR_INRADIUS)->GetWindowText(strText);
|
|
if (fabs(_tstof(strText)-_tstof(m_strInRadius))<_DIST_SNAP)
|
|
return;
|
|
|
|
UpdateEdit(IDC_STAIR_INRADIUS,true);
|
|
}
|
|
}
|
|
void CArcStairCreateDlg::OnKFRadiusOut()
|
|
{
|
|
// if (this->CheckENChange(IDC_STEP_OUTRADIUS,m_strOutRadius))
|
|
// {
|
|
// UpdateEdit(IDC_STEP_OUTRADIUS,true);
|
|
// }
|
|
if (m_bClickClose)
|
|
return;
|
|
if (GetFocus()!=GetDlgItem(IDCANCEL))
|
|
{
|
|
CString strText;
|
|
GetDlgItem(IDC_STEP_OUTRADIUS)->GetWindowText(strText);
|
|
if (fabs(_tstof(strText)-_tstof(m_strOutRadius))<_DIST_SNAP)
|
|
return;
|
|
|
|
UpdateEdit(IDC_STEP_OUTRADIUS,true);
|
|
}
|
|
}
|
|
void CArcStairCreateDlg::OnKFStairWidth()
|
|
{
|
|
// if (this->CheckENChange(IDC_STAIR_WIDTH,m_strStairWidth))
|
|
// {
|
|
// UpdateEdit(IDC_STAIR_WIDTH,true);
|
|
// }
|
|
if (m_bClickClose)
|
|
return;
|
|
if (GetFocus()!=GetDlgItem(IDCANCEL))
|
|
{
|
|
CString strText;
|
|
GetDlgItem(IDC_STAIR_WIDTH)->GetWindowText(strText);
|
|
if (fabs(_tstof(strText)-_tstof(m_strStairWidth))<_DIST_SNAP)
|
|
return;
|
|
|
|
UpdateEdit(IDC_STAIR_WIDTH,true);
|
|
}
|
|
}
|
|
void CArcStairCreateDlg::OnKFStartAngle()
|
|
{
|
|
// if (this->CheckENChange(IDC_STARTANGLE,m_strStartAngle))
|
|
// {
|
|
// UpdateEdit(IDC_STARTANGLE,true);
|
|
// }
|
|
if (m_bClickClose)
|
|
return;
|
|
if (GetFocus()!=GetDlgItem(IDCANCEL))
|
|
{
|
|
CString strText;
|
|
GetDlgItem(IDC_STARTANGLE)->GetWindowText(strText);
|
|
if (fabs(_tstof(strText)-_tstof(m_strStartAngle))<_DIST_SNAP)
|
|
return;
|
|
|
|
UpdateEdit(IDC_STARTANGLE,true);
|
|
}
|
|
}
|
|
void CArcStairCreateDlg::OnKFSweepAngle()
|
|
{
|
|
// if (this->CheckENChange(IDC_SWEEPANGLE,m_strSweepAngle))
|
|
// {
|
|
// UpdateEdit(IDC_SWEEPANGLE,true);
|
|
// }
|
|
if (m_bClickClose)
|
|
return;
|
|
if (GetFocus()!=GetDlgItem(IDCANCEL))
|
|
{
|
|
CString strText;
|
|
GetDlgItem(IDC_SWEEPANGLE)->GetWindowText(strText);
|
|
if (fabs(_tstof(strText)-_tstof(m_strSweepAngle))<_DIST_SNAP)
|
|
return;
|
|
|
|
UpdateEdit(IDC_SWEEPANGLE,true);
|
|
}
|
|
}
|
|
void CArcStairCreateDlg::OnChangeRadiusIn()
|
|
{
|
|
//do nothing
|
|
}
|
|
void CArcStairCreateDlg::OnChangeRadiusOut()
|
|
{
|
|
//do nothing
|
|
}
|
|
void CArcStairCreateDlg::OnChangeStairWidth()
|
|
{
|
|
//do nothing
|
|
}
|
|
void CArcStairCreateDlg::OnChangeStartAngle()
|
|
{
|
|
//do nothing
|
|
}
|
|
void CArcStairCreateDlg::OnChangeSweepAngle()
|
|
{
|
|
//do nothing
|
|
}
|
|
//数据关系:
|
|
//外径变化会引起宽度变化,内径不变;
|
|
//内径变化会引起宽度变化,外径不变;
|
|
//以外径定位,则宽度变化会引起内径变化;以内径定位,则宽度变化会引起外径变化。
|
|
bool CArcStairCreateDlg::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;
|
|
|
|
CString temp;
|
|
pEdit->GetWindowText(temp);
|
|
bool bContinue=false;
|
|
CDataExchange dxOut(this,false);
|
|
switch(ctrlID)
|
|
{
|
|
case IDC_STAIR_INRADIUS://内圆半径
|
|
{
|
|
if ((_tstof(temp)<_tstof(m_strOutRadius)) && _tstof(temp)>0)// [9/14/2007 nsh]
|
|
{
|
|
m_strInRadius=temp;
|
|
m_strStairWidth=Dist2Str(_tstof(m_strOutRadius)-_tstof(m_strInRadius));
|
|
DDX_Text(&dxOut,IDC_STAIR_WIDTH,m_strStairWidth);
|
|
UpdateImage();
|
|
}
|
|
else if (bReportError)
|
|
{
|
|
CArcStairCreateDlg::m_bError=TRUE;
|
|
//AfxMessageBox(_T("内半径必须小于外半径!"));
|
|
this->MessageBox(_T("内半径必须小于外半径!"),_T("AutoCAD"),MB_OK);
|
|
DDX_Text(&dxOut,IDC_STAIR_INRADIUS,m_strInRadius);
|
|
pEdit->SetFocus();
|
|
pEdit->SetSel(0,-1);
|
|
}
|
|
}
|
|
break;
|
|
case IDC_STEP_OUTRADIUS://外圆半径
|
|
{
|
|
if (_tstof(temp)>_tstof(m_strInRadius))
|
|
{
|
|
m_strOutRadius=temp;
|
|
m_strStairWidth=Dist2Str(_tstof(m_strOutRadius)-_tstof(m_strInRadius));
|
|
DDX_Text(&dxOut,IDC_STAIR_WIDTH,m_strStairWidth);
|
|
UpdateImage();
|
|
}
|
|
else if (bReportError)
|
|
{
|
|
CArcStairCreateDlg::m_bError=TRUE;
|
|
this->MessageBox(_T("外半径必须大于内半径!"),_T("AutoCAD"),MB_OK);
|
|
DDX_Text(&dxOut,IDC_STEP_OUTRADIUS,m_strOutRadius);
|
|
pEdit->SetFocus();
|
|
pEdit->SetSel(0,-1);
|
|
}
|
|
}
|
|
break;
|
|
case IDC_STAIR_WIDTH://梯段宽度
|
|
{
|
|
if (m_nLocate)
|
|
{
|
|
if (_tstof(temp)<=_tstof(m_strOutRadius))
|
|
{
|
|
m_strStairWidth=temp;
|
|
m_strInRadius=Dist2Str(_tstof(m_strOutRadius)-_tstof(m_strStairWidth));
|
|
DDX_Text(&dxOut,IDC_STAIR_INRADIUS,m_strInRadius);
|
|
UpdateImage();
|
|
}
|
|
else if (bReportError)
|
|
{
|
|
CArcStairCreateDlg::m_bError =TRUE;
|
|
this->MessageBox(_T("宽度超过了外半径!"),_T("AutoCAD"),MB_OK);
|
|
DDX_Text(&dxOut,IDC_STAIR_WIDTH,m_strStairWidth);
|
|
pEdit->SetFocus();
|
|
pEdit->SetSel(0,-1);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (_tstof(temp)>0)
|
|
{
|
|
m_strStairWidth=temp;
|
|
m_strOutRadius=Dist2Str(_tstof(m_strInRadius)+_tstof(m_strStairWidth));
|
|
DDX_Text(&dxOut,IDC_STEP_OUTRADIUS,m_strOutRadius);
|
|
UpdateImage();
|
|
}
|
|
else if (bReportError)
|
|
{
|
|
CArcStairCreateDlg ::m_bError =TRUE;
|
|
this->MessageBox(_T("宽度太小!"),_T("AutoCAD"),MB_OK);
|
|
DDX_Text(&dxOut,IDC_STAIR_WIDTH,m_strStairWidth);
|
|
pEdit->SetFocus();
|
|
pEdit->SetSel(0,-1);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case IDC_STARTANGLE://起始角度
|
|
{
|
|
m_strStartAngle=temp;
|
|
UpdateImage();
|
|
}
|
|
break;
|
|
case IDC_SWEEPANGLE://圆心角度
|
|
{
|
|
if (fabs(_tstof(temp))>0.1)
|
|
{
|
|
m_strSweepAngle=temp;
|
|
UpdateImage();
|
|
}
|
|
else if (bReportError)
|
|
{
|
|
CArcStairCreateDlg ::m_bError=TRUE;
|
|
this->MessageBox(_T("圆心角太小!"),_T("AutoCAD"),MB_OK);
|
|
DDX_Text(&dxOut,IDC_SWEEPANGLE,m_strSweepAngle);
|
|
pEdit->SetFocus();
|
|
pEdit->SetSel(0,-1);
|
|
}
|
|
}
|
|
break;
|
|
case IDC_STAIR_HEIGHT://梯段高度
|
|
{
|
|
//to deal with the stair-height
|
|
if (_tstof(temp)>=2*_tstof(m_strStepHeight)-_DIST_SNAP) {//最少当前两踏步高
|
|
m_strStairHeight=temp;
|
|
m_nStepNum=(int)(_tstof(m_strStairHeight)/_tstof(m_strStepHeight)+0.5);
|
|
m_strStepHeight.Format(_T("%.2f"),(_tstof(m_strStairHeight)/m_nStepNum));
|
|
DDX_Text(&dxOut,IDC_STEP_HEIGHT,m_strStepHeight);
|
|
DDX_Text(&dxOut,IDC_STEP_NUM,m_nStepNum);
|
|
UpdateImage();
|
|
} else if (bReportError) {
|
|
CArcStairCreateDlg::m_bError=TRUE;
|
|
this->MessageBox(_T("梯段高度太小!"),_T("AutoCAD"),MB_OK);
|
|
DDX_Text(&dxOut,IDC_STAIR_HEIGHT,m_strStairHeight);//还原
|
|
pEdit->SetFocus();
|
|
pEdit->SetSel(0,-1);
|
|
}
|
|
}
|
|
break;
|
|
//以下为踏步的处理函数 ---------------------------------------------------------
|
|
|
|
case IDC_STEP_NUM://踏步数目
|
|
{
|
|
//to deal with the step-num
|
|
if (_ttoi(temp)>1) {
|
|
m_nStepNum=_ttoi(temp);
|
|
m_strStepHeight.Format(_T("%.2f"),_tstof(m_strStairHeight)/m_nStepNum);//modified on 03/07/15 by whl
|
|
DDX_Text(&dxOut,IDC_STEP_HEIGHT,m_strStepHeight);
|
|
UpdateImage();
|
|
} else if (bReportError) {
|
|
CArcStairCreateDlg::m_bError=TRUE;
|
|
this->MessageBox(_T("踏步数必须大于1!"),_T("AutoCAD"),MB_OK);
|
|
DDX_Text(&dxOut,IDC_STEP_NUM,m_nStepNum);//还原
|
|
pEdit->SetFocus();
|
|
pEdit->SetSel(0,-1);
|
|
}
|
|
|
|
}
|
|
break;
|
|
case IDC_STEP_HEIGHT://踏步高度
|
|
{
|
|
//to deal with the step-height
|
|
int num=(int)(_tstof(m_strStairHeight)/_tstof(temp)+0.5);
|
|
if (_tstof(temp)>0&&num>1) {
|
|
m_nStepNum=num;
|
|
m_strStepHeight.Format(_T("%.2f"),_tstof(m_strStairHeight)/m_nStepNum);//modified on 03/07/15 by whl
|
|
DDX_Text(&dxOut,IDC_STEP_NUM,m_nStepNum);
|
|
if (bReportError)
|
|
DDX_Text(&dxOut,IDC_STEP_HEIGHT,m_strStepHeight);//自动调整
|
|
UpdateImage();
|
|
} else if (bReportError) {
|
|
CArcStairCreateDlg::m_bError=TRUE;
|
|
if (_tstof(temp)<=0)
|
|
this->MessageBox(_T("踏步高度太小!"),_T("AutoCAD"),MB_OK);
|
|
else
|
|
this->MessageBox(_T("新踏步高度将造成踏步数小于2,请重新输入或先增大梯段高度!"),_T("AutoCAD"),MB_OK);
|
|
DDX_Text(&dxOut,IDC_STEP_HEIGHT,m_strStepHeight);//还原
|
|
pEdit->SetFocus();
|
|
pEdit->SetSel(0,-1);
|
|
}
|
|
}
|
|
break;
|
|
// ------------------------------------------- [9/14/2007 nsh]
|
|
default:
|
|
if (m_bEdit)
|
|
break;
|
|
else
|
|
bContinue=true;
|
|
}
|
|
CArcStairCreateDlg::m_bUpdateEdit=TRUE;
|
|
if (!m_bEdit)
|
|
{
|
|
if (!CArcStairCreateDlg::m_bError)
|
|
{
|
|
acedPostCommand(_T("\33"));
|
|
}
|
|
else
|
|
{
|
|
CArcStairCreateDlg::m_bError=FALSE;
|
|
}
|
|
}
|
|
bUpdating=false;
|
|
|
|
return bContinue?CBaseStairDlg::UpdateEdit(ctrlID,bReportError):true;
|
|
}
|
|
void CArcStairCreateDlg::Dlg2Obj(AcDbEntity *pStep) // 对话框数据传向实体
|
|
{
|
|
CBaseStairDlg::Dlg2Obj(pStep); // 调用公共部分:
|
|
TDbArcStair *pArcStair=TDbArcStair::cast(pStep);
|
|
ASSERT(pArcStair);
|
|
|
|
pArcStair->SetRadiusOut(_tstof(m_strOutRadius));
|
|
pArcStair->SetRadiusIn(_tstof(m_strInRadius));
|
|
pArcStair->SetStartAngle(Ucs2Wcs(_tstof(m_strStartAngle)*PI/180.0));
|
|
if (m_nFace)
|
|
pArcStair->SetSweepAngle(_tstof(m_strSweepAngle) * PI / 180.0);
|
|
else
|
|
pArcStair->SetSweepAngle(- _tstof(m_strSweepAngle) * PI / 180.0);
|
|
|
|
if (m_bEdit)
|
|
{
|
|
if (m_pBakObj)
|
|
delete m_pBakObj;
|
|
m_pBakObj=(TDbArcStair*)(pArcStair->clone());
|
|
}
|
|
return;
|
|
}
|
|
void CArcStairCreateDlg::Obj2Dlg(const AcDbEntity *pStep) // 实体数据传向对话框
|
|
{
|
|
CBaseStairDlg::Obj2Dlg(pStep); // 调用公共部分
|
|
TDbArcStair *pArcStair=TDbArcStair::cast(pStep);
|
|
ASSERT(pArcStair);
|
|
|
|
m_bEdit=TRUE;
|
|
m_pBakObj=(TDbArcStair*)(pArcStair->clone());
|
|
|
|
double nSweepAngle = ( pArcStair->GetSweepAngle()) * 180.0 / PI;
|
|
m_strStairHeight=Dist2Str(m_nStepNum * _tstof(m_strStepHeight));
|
|
m_strInRadius=Dist2Str(pArcStair->GetRadiusIn());
|
|
m_strOutRadius=Dist2Str(pArcStair->GetRadiusOut());
|
|
|
|
//modify by xlc on 090630 解决了编辑时梯段宽不正确的问题
|
|
m_strStairWidth=Dist2Str(pArcStair->GetRadiusOut()-pArcStair->GetRadiusIn());
|
|
|
|
m_strStartAngle=Dist2Str( Wcs2Ucs(pArcStair->GetStartAngle()) * 180.0 / PI);
|
|
if ( nSweepAngle < 0)
|
|
m_nFace = 0;
|
|
else
|
|
m_nFace = 1;
|
|
m_strSweepAngle=Angle2Str(fabs(nSweepAngle));
|
|
m_ascent=pArcStair->IsAscent();
|
|
|
|
return;
|
|
}
|
|
void CArcStairCreateDlg::OnBtStartangle()
|
|
{//拾取开始角度的操作
|
|
if (m_bEdit)
|
|
{
|
|
double nStartAngle=_tstof(m_strStartAngle);
|
|
|
|
BeginEditorCommand();
|
|
adsout << _T("\n起始角度") << (const TCHAR *)m_strStartAngle << _T(": ");
|
|
int nRet=ads_getangle(NULL, _T(""), &nStartAngle);
|
|
CompleteEditorCommand();
|
|
|
|
if (nRet==RTNORM)
|
|
{
|
|
CString temp=Angle2Str(nStartAngle * 180.0 / PI);
|
|
CDataExchange dxOut(this,false);
|
|
DDX_Text(&dxOut,IDC_STARTANGLE,temp);
|
|
UpdateEdit(IDC_STARTANGLE,true);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
CArcStairCreateDlg::m_bAngle=TRUE;
|
|
acedGetAcadDwgView()->SetFocus();
|
|
this->ShowWindow(SW_HIDE);
|
|
CArcStairCreateDlg::m_bAng=TRUE;
|
|
acedPostCommand(_T("\33"));
|
|
}
|
|
}
|
|
void CArcStairCreateDlg::OnPickRadiusIn()
|
|
{//拾取内圆半径的操作
|
|
if (m_bEdit)
|
|
{
|
|
double nRadiusIn = _tstof(m_strInRadius);
|
|
|
|
BeginEditorCommand();
|
|
int nRet=GetDist(_T("\n内圆半径"), nRadiusIn, RSG_NONEG|RSG_NOZERO);
|
|
CompleteEditorCommand();
|
|
|
|
if (nRet==RTNORM)
|
|
{
|
|
CString temp=Dist2Str(nRadiusIn);
|
|
CDataExchange dxOut(this,false);
|
|
DDX_Text(&dxOut,IDC_STAIR_INRADIUS,temp);
|
|
UpdateEdit(IDC_STAIR_INRADIUS,true);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
CArcStairCreateDlg::m_bInsideR=TRUE;
|
|
acedGetAcadDwgView()->SetFocus();
|
|
this->ShowWindow(SW_HIDE);
|
|
CArcStairCreateDlg::m_bPRI=TRUE;
|
|
acedPostCommand(_T("\33"));
|
|
}
|
|
}
|
|
void CArcStairCreateDlg::OnPickRadiusOut()
|
|
{//拾取外圆半径的操作
|
|
if (m_bEdit)
|
|
{
|
|
double nRadiusOut = _tstof(m_strOutRadius);
|
|
|
|
BeginEditorCommand();
|
|
int nRet=GetDist(_T("\n外圆半径"), nRadiusOut, RSG_NONEG|RSG_NOZERO);
|
|
CompleteEditorCommand();
|
|
|
|
if (nRet==RTNORM)
|
|
{
|
|
CString temp=Dist2Str(nRadiusOut);
|
|
CDataExchange dxOut(this,false);
|
|
DDX_Text(&dxOut,IDC_STEP_OUTRADIUS,temp);
|
|
UpdateEdit(IDC_STEP_OUTRADIUS,true);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
CArcStairCreateDlg::m_bOutsideR=TRUE;
|
|
acedGetAcadDwgView()->SetFocus();
|
|
this->ShowWindow(SW_HIDE);
|
|
CArcStairCreateDlg::m_bPRO =TRUE;
|
|
acedPostCommand(_T("\33"));
|
|
}
|
|
}
|
|
void CArcStairCreateDlg::OnLocate()
|
|
{
|
|
CDataExchange dxIn(this,true);
|
|
this->UpdateData();
|
|
this->UpdateEdit(IDC_LOCATE_IN,m_nLocate==0?false:true);
|
|
}
|
|
BOOL CArcStairCreateDlg::OnInitDialog()
|
|
{
|
|
CBaseStairDlg::OnInitDialog();
|
|
//m_groups.SetMaxExtent(350);
|
|
//this->CheckDlgButton(IDC_DOUBLE_PAO,TRUE);
|
|
this->UpdateImage();
|
|
AddTip(IDC_LOCATE_OUT,_T("当外圆定位时,修改梯段宽度不影响外径"));
|
|
AddTip(IDC_LOCATE_IN,_T("当内圆定位时,修改梯段宽度不影响内径"));
|
|
AddTip(IDC_PICK_RADIUSOUT,_T("外径变化将使梯段宽度随之变化,而内径保持不变"));
|
|
AddTip(IDC_PICK_RADIUSIN,_T("内径变化将使梯段宽度随之变化,而外径保持不变"));
|
|
AddTip(IDC_STAIR_WIDTH_STATIC,_T("梯段宽度始终等于外径减去内径"));
|
|
|
|
if (m_bEdit)
|
|
{
|
|
GetDlgItem(IDC_STEP_ELEV)->EnableWindow(TRUE);
|
|
}
|
|
else
|
|
{
|
|
m_strElev="0";
|
|
CRect rect,rect1;
|
|
GetDlgItem(IDC_PREVIEW)->GetWindowRect(rect);
|
|
GetDlgItem(IDOK)->GetWindowRect(rect1);
|
|
|
|
ScreenToClient(rect);
|
|
ScreenToClient(rect1);
|
|
rect.bottom = rect1.bottom;
|
|
GetDlgItem(IDC_PREVIEW)->MoveWindow(rect);
|
|
|
|
GetDlgItem(IDOK)->ShowWindow(SW_HIDE);
|
|
GetDlgItem(IDCANCEL)->ShowWindow(SW_HIDE);
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
void CArcStairCreateDlg::OnClose()
|
|
{
|
|
if (m_bEdit)
|
|
{
|
|
GetDlgItem(IDCANCEL)->SetFocus();
|
|
}
|
|
else
|
|
{
|
|
m_bClickClose=TRUE;
|
|
CArcStairCreateDlg::p_selfARC=NULL;
|
|
acedPostCommand(_T("\33"));
|
|
}
|
|
CBaseStairDlg::OnClose();
|
|
}
|
|
|
|
void CArcStairCreateDlg::OnNcDestroy()
|
|
{
|
|
if (m_bEdit)
|
|
return;
|
|
CBaseStairDlg::OnNcDestroy();
|
|
acedPostCommand(_T("\33"));
|
|
delete this;
|
|
}
|
|
|
|
void CArcStairCreateDlg::OnBnClickedLeftBeam()
|
|
{
|
|
this->UpdateData();
|
|
UpdateImage();
|
|
UpdateEdit(IDC_LEFT_BEAM,true);
|
|
}
|
|
|
|
void CArcStairCreateDlg::OnBnClickedRightBeam()
|
|
{
|
|
this->UpdateData();
|
|
UpdateImage();
|
|
UpdateEdit(IDC_RIGHT_BEAM,true);
|
|
}
|
|
|
|
void CArcStairCreateDlg::OnBnClickedNoPao()
|
|
{
|
|
this->UpdateImage();
|
|
this->UpdateData();
|
|
UpdateEdit(IDC_NO_PAO,true);
|
|
}
|
|
|
|
void CArcStairCreateDlg::OnBnClickedBottomPao()
|
|
{
|
|
UpdateImage();
|
|
this->UpdateData();
|
|
UpdateEdit(IDC_BOTTOM_PAO,true);
|
|
}
|
|
|
|
void CArcStairCreateDlg::OnBnClickedDoublePao()
|
|
{
|
|
this->UpdateImage();
|
|
this->UpdateData();
|
|
UpdateEdit(IDC_DOUBLE_PAO,true);
|
|
this->UpdateData(FALSE);
|
|
}
|
|
|
|
void CArcStairCreateDlg::OnBnClickedUpSect()
|
|
{
|
|
UpdateImage();
|
|
this->UpdateData();;
|
|
UpdateEdit(IDC_UP_SECT,true);
|
|
}
|
|
|
|
void CArcStairCreateDlg::OnBnClickedAsAscent()
|
|
{
|
|
this->UpdateData();
|
|
if (m_ascent==TRUE)
|
|
{
|
|
this->GetDlgItem(IDC_HAS_SLANT)->EnableWindow(TRUE);
|
|
this->GetDlgItem(IDC_ON_GROUND)->EnableWindow(TRUE);
|
|
}
|
|
else
|
|
{
|
|
this->GetDlgItem(IDC_HAS_SLANT)->EnableWindow(FALSE);
|
|
this->GetDlgItem(IDC_ON_GROUND)->EnableWindow(FALSE);
|
|
}
|
|
this->UpdateImage();
|
|
this->UpdateEdit(IDC_AS_ASCENT,true);
|
|
}
|
|
|
|
|
|
void CArcStairCreateDlg::OnBnClickedDeasil()
|
|
{
|
|
this->UpdateData();
|
|
this->UpdateImage();
|
|
this->UpdateEdit(IDC_DEASIL,true);
|
|
}
|
|
|
|
void CArcStairCreateDlg::OnBnClickedAnticlockwise()
|
|
{
|
|
this->UpdateData();
|
|
this->UpdateImage();
|
|
this->UpdateEdit(IDC_ANTICLOCKWISE,true);
|
|
}
|
|
|
|
void CArcStairCreateDlg::OnBnClickedHasSlant()
|
|
{
|
|
this->UpdateData();
|
|
this->UpdateImage();
|
|
this->UpdateEdit(IDC_HAS_SLANT,true);
|
|
}
|
|
|
|
void CArcStairCreateDlg::OnBnClickedOnGround()
|
|
{
|
|
this->UpdateData();
|
|
this->UpdateImage();
|
|
this->UpdateEdit(IDC_ON_GROUND,true);
|
|
}
|
|
void CArcStairCreateDlg::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags)
|
|
{
|
|
if (nChar==VK_ESCAPE)
|
|
{
|
|
if (!m_bEdit)
|
|
{
|
|
acedPostCommand(_T("\33"));
|
|
CArcStairCreateDlg::p_selfARC=NULL;
|
|
CArcStairCreateDlg::OnCancel();
|
|
}
|
|
}
|
|
CBaseStairDlg::OnKeyUp(nChar, nRepCnt, nFlags);
|
|
}
|
|
|
|
void CArcStairCreateDlg::OnBnClickedNeed3d()
|
|
{
|
|
this->UpdateSel();
|
|
this->UpdateEdit(IDC_NEED3D,true);
|
|
}
|
|
|
|
void CArcStairCreateDlg::OnBnClickedNeed2d()
|
|
{
|
|
this->UpdateSel();
|
|
this->UpdateEdit(IDC_NEED2D,true);
|
|
}
|
|
BOOL CArcStairCreateDlg::CheckENChange(UINT ctrlID,const CString pStr)
|
|
{//判断是否对编辑框的数值进行了改变,如果改变了,则返回TRUE,没有改变则返回FALSE
|
|
CString temp;
|
|
this->GetDlgItemText(ctrlID,temp);
|
|
if (temp==pStr)
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
} |