288 lines
7.5 KiB
C++
288 lines
7.5 KiB
C++
// RailDlg.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "HandRailDlg.h"
|
|
#include "actrans.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CHandRailDlg dialog
|
|
|
|
|
|
CHandRailDlg::CHandRailDlg(TDbHandRail *pRail, CWnd* pParent /*=NULL*/)
|
|
: CAcUiDialog(CHandRailDlg::IDD, pParent)
|
|
{
|
|
m_pRail = pRail;
|
|
//{{AFX_DATA_INIT(CHandRailDlg)
|
|
m_bShow2D = TRUE;
|
|
m_bShow3D = TRUE;
|
|
m_csHeight = _T("");
|
|
m_csThick = _T("");
|
|
m_csWidth = _T("");
|
|
m_nAlign = 0;
|
|
m_nShape = 0;
|
|
//}}AFX_DATA_INIT
|
|
Obj2Dlg(pRail);
|
|
}
|
|
|
|
|
|
void CHandRailDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CAcUiDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CHandRailDlg)
|
|
DDX_Check(pDX, IDC_CHECK_SHOW2D, m_bShow2D);
|
|
DDX_Check(pDX, IDC_CHECK_SHOW3D, m_bShow3D);
|
|
DDX_Text(pDX, IDC_EDIT_HEIGHT, m_csHeight);
|
|
DDX_Text(pDX, IDC_EDIT_THICK, m_csThick);
|
|
DDX_Text(pDX, IDC_EDIT_WIDTH, m_csWidth);
|
|
DDX_Radio(pDX, IDC_RADIO_ALIGN_MID, m_nAlign);
|
|
DDX_Radio(pDX, IDC_RADIO_RECT, m_nShape);
|
|
//}}AFX_DATA_MAP
|
|
if (!pDX->m_bSaveAndValidate) {
|
|
CWnd *pWnd1, *pWnd2, *pWnd3;
|
|
pWnd1 = GetDlgItem(IDC_STATIC_SHAPE);
|
|
pWnd2 = GetDlgItem(IDC_EDIT_THICK);
|
|
pWnd3 = GetDlgItem(IDC_STATIC_THICK);
|
|
if (m_nShape == 1) {
|
|
pWnd1->SetWindowText(_T("直径:"));
|
|
} else {
|
|
pWnd1->SetWindowText(_T("宽度:"));
|
|
}
|
|
if (m_nShape==0) {
|
|
pWnd2->EnableWindow(TRUE);
|
|
pWnd3->EnableWindow(TRUE);
|
|
} else {
|
|
pWnd2->EnableWindow(FALSE);
|
|
pWnd3->EnableWindow(FALSE);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CHandRailDlg, CAcUiDialog)
|
|
//{{AFX_MSG_MAP(CHandRailDlg)
|
|
ON_BN_CLICKED(IDC_RADIO_CIRLE, OnUpdateDlg)
|
|
ON_BN_CLICKED(IDC_RADIO_RECT, OnUpdateDlg)
|
|
ON_BN_CLICKED(IDC_BT_ADD, OnBtAdd)
|
|
ON_BN_CLICKED(IDC_BT_REMOVE, OnBtRemove)
|
|
ON_BN_CLICKED(IDC_BT_MODIFY, OnBtModify)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CHandRailDlg message handlers
|
|
|
|
BOOL CHandRailDlg::OnInitDialog()
|
|
{
|
|
CAcUiDialog::OnInitDialog();
|
|
|
|
UpdateData(TRUE);
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
void CHandRailDlg::Dlg2Obj()
|
|
{
|
|
UpdateData(TRUE);
|
|
|
|
if (m_pRail->upgradeOpen()!=Acad::eOk)
|
|
return;
|
|
m_pRail->assertWriteEnabled();
|
|
m_pRail->SetWidth(_tstof(m_csWidth));
|
|
m_pRail->SetThickness(_tstof(m_csThick));
|
|
m_pRail->SetHeight(_tstof(m_csHeight));
|
|
m_pRail->SetHas2D(m_bShow2D);
|
|
m_pRail->SetHas3D(m_bShow3D);
|
|
m_pRail->SetAlignment(m_nAlign);
|
|
if (m_nShape == 0)
|
|
m_pRail->SetStyle(TDbHandRail::RS_RAIL1);
|
|
else if (m_nShape == 1)
|
|
m_pRail->SetStyle(TDbHandRail::RS_RAIL2);
|
|
else
|
|
m_pRail->SetStyle(TDbHandRail::RS_SLAB);
|
|
m_pRail->downgradeOpen();
|
|
|
|
}
|
|
|
|
void CHandRailDlg::Obj2Dlg(const TDbHandRail *pRail)
|
|
{
|
|
m_csWidth = Dist2Str(pRail->GetWidth());
|
|
m_csThick = Dist2Str(pRail->GetThickness());
|
|
m_csHeight = Dist2Str(pRail->GetHeight());
|
|
m_bShow2D = pRail->Has2D();
|
|
m_bShow3D = pRail->Has3D();
|
|
|
|
m_nAlign = (int)pRail->GetAlignment();
|
|
if (pRail->GetStyle() == TDbHandRail::RS_RAIL1) //矩形长条
|
|
m_nShape = 0;
|
|
else if (pRail->GetStyle() == TDbHandRail::RS_RAIL2)//圆形
|
|
m_nShape = 1;
|
|
else
|
|
m_nShape = 2;
|
|
|
|
}
|
|
|
|
void CHandRailDlg::OnUpdateDlg()
|
|
{
|
|
UpdateData(TRUE);
|
|
UpdateData(FALSE);
|
|
}
|
|
|
|
|
|
void CHandRailDlg::OnBtAdd()
|
|
{
|
|
BeginEditorCommand();
|
|
|
|
int nOsMode=0;
|
|
xg_getvar(_T("OSMODE"), &nOsMode);
|
|
nOsMode &= ~0x4000;
|
|
nOsMode |= OS_INT;
|
|
XPushVar<int> tVar(_T("OSMODE"), nOsMode);
|
|
XPoint ptAdd;
|
|
if (XGetPoint(NULL, _T("\n点取新的顶点位置"), ptAdd)==RTNORM) {
|
|
if (m_pRail->upgradeOpen()!=Acad::eOk) {
|
|
CancelEditorCommand();
|
|
return;
|
|
}
|
|
if (!m_pRail->AddVertex(ptAdd)) {
|
|
adsout << _T("\n请正确点取!");
|
|
}
|
|
m_pRail->downgradeOpen();
|
|
}
|
|
|
|
actrTransactionManager->flushGraphics(); //acad 刷新
|
|
acedUpdateDisplay();
|
|
//acedGetAcadDwgView()->Invalidate(); //或用MFC刷新 (一样)
|
|
|
|
CompleteEditorCommand();
|
|
|
|
|
|
}
|
|
|
|
void CHandRailDlg::OnBtRemove()
|
|
{
|
|
BeginEditorCommand();
|
|
|
|
XPushVar<int> osmode(_T("OSMODE"), OS_NOD);
|
|
XPoint ptVert;
|
|
while(ads_getpoint(NULL, _T("\n选取顶点: "), ptVert)==RTNORM) {
|
|
int nPos=m_pRail->HitTestOnRail2d(ptVert);
|
|
if (nPos>0) {
|
|
nPos--;
|
|
if (m_pRail->upgradeOpen()!=Acad::eOk) {
|
|
CancelEditorCommand();
|
|
return;
|
|
}
|
|
m_pRail->RemoveVertexAt(nPos);
|
|
m_pRail->downgradeOpen();
|
|
}
|
|
}
|
|
actrTransactionManager->flushGraphics(); //acad 刷新
|
|
acedUpdateDisplay();
|
|
CompleteEditorCommand();
|
|
}
|
|
|
|
void CHandRailDlg::OnBtModify()
|
|
{
|
|
BeginEditorCommand();
|
|
XPushVar<int> osmode(_T("OSMODE"), OS_NOD);
|
|
XPoint ptVert;
|
|
while(ads_getpoint(NULL, _T("\n选取顶点: "), ptVert)==RTNORM) {
|
|
int nPos=m_pRail->HitTestOnRail2d(ptVert);
|
|
if (nPos>0) {
|
|
nPos--;
|
|
if (nPos==0) {
|
|
XPoly2D poly2d;
|
|
m_pRail->GetBaseline2d(poly2d);
|
|
if (poly2d.IsClosed()) {
|
|
int nAns=YesNoQuestion(_T("\n起点和终点的平面投影相同,您指的是起点吗"));
|
|
if (nAns==RTCAN)
|
|
continue;
|
|
else if (nAns==Q_NO)
|
|
nPos = poly2d.Length();
|
|
}
|
|
}
|
|
double nElev=m_pRail->GetElevationAt(nPos);
|
|
adsout << _T("\n改夹角[A]/点取[P]/输入顶点标高<")
|
|
<< Dist2Str(nElev)
|
|
<< _T(">: ");
|
|
int nCode;
|
|
INITGET_BEG(0, _T("A P"));
|
|
|
|
nCode=ads_getreal(_T(""), &nElev);
|
|
INITGET_END();
|
|
if (nCode==RTKWORD) {
|
|
TCHAR szKey[80]=_T("");
|
|
ads_getinput(szKey);
|
|
if (szKey[0]==_T('P')) {
|
|
XPushVar<int> osMode(_T("OSMODE"), OS_NEA);
|
|
XPoint ptElev;
|
|
nCode=ads_getpoint(NULL, _T("\n点取参照物:"), ptElev);
|
|
if (nCode==RTNORM) {
|
|
nElev=ptElev.z;
|
|
if (m_pRail->upgradeOpen()!=Acad::eOk) {
|
|
CancelEditorCommand();
|
|
return;
|
|
}
|
|
m_pRail->assertWriteEnabled();
|
|
m_pRail->SetElevationAt(nPos, nElev);
|
|
m_pRail->downgradeOpen();
|
|
actrTransactionManager->flushGraphics(); //acad 刷新
|
|
acedUpdateDisplay();
|
|
|
|
}
|
|
} else if (szKey[0]==_T('A')) {
|
|
double nOldAng=m_pRail->GetSweepAngleAt(nPos)*180.0/PI;
|
|
nCode=GetReal(_T("\n输入夹角"), nOldAng);
|
|
if (nCode==RTNORM) {
|
|
nOldAng *= PI/180.0;
|
|
if (m_pRail->upgradeOpen()!=Acad::eOk) {
|
|
CancelEditorCommand();
|
|
return;
|
|
}
|
|
m_pRail->assertWriteEnabled();
|
|
m_pRail->SetSweepAngleAt(nPos, nOldAng);
|
|
m_pRail->downgradeOpen();
|
|
actrTransactionManager->flushGraphics(); //acad 刷新
|
|
acedUpdateDisplay();
|
|
|
|
}
|
|
}
|
|
} else if (nCode==RTNORM) {
|
|
if (m_pRail->upgradeOpen()!=Acad::eOk) {
|
|
CancelEditorCommand();
|
|
return;
|
|
}
|
|
m_pRail->assertWriteEnabled();
|
|
m_pRail->SetElevationAt(nPos, nElev);
|
|
m_pRail->downgradeOpen();
|
|
actrTransactionManager->flushGraphics(); //acad 刷新
|
|
acedUpdateDisplay();
|
|
|
|
}
|
|
} else {
|
|
adsout << _T("\n请正确点取!");
|
|
}
|
|
|
|
}
|
|
|
|
CompleteEditorCommand();
|
|
|
|
}
|
|
|
|
|
|
|
|
void CHandRailDlg::OnOK()
|
|
{
|
|
UpdateData(TRUE);
|
|
Dlg2Obj();
|
|
CAcUiDialog::OnOK();
|
|
}
|