Files
envi-code/SourceCode/Code2026/tg_shs/shs_kerncmd/ArcStairCreateDlg.cpp
T
2026-09-28 15:28:50 +08:00

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;
}