291 lines
7.5 KiB
C++
291 lines
7.5 KiB
C++
// PolyHoleDlg.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "resource.h"
|
|
#include "OpeningValidation.h"
|
|
#include "InsertOpeningDlg.h"
|
|
#include "PolyHoleDlg.h"
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CPolyHoleDlg dialog
|
|
|
|
#define AUTO_LABEL_FLAG _T("自动编号")
|
|
CString CPolyHoleDlg::m_csLabel = AUTO_LABEL_FLAG;
|
|
CPolyHoleDlg::CPolyHoleDlg(CWnd* pParent /*=NULL*/)
|
|
: GlwCAcUiDialog(CPolyHoleDlg::IDD, pParent)
|
|
{
|
|
//{{AFX_DATA_INIT(CPolyHoleDlg)
|
|
m_csDepth = _T("200");
|
|
|
|
// m_csLabel = _T("");
|
|
m_bBoreHole = TRUE;
|
|
//}}AFX_DATA_INIT
|
|
m_nHoleStyle=0; // 0, 1, 2
|
|
m_bEditDlgFlag = false; // 默认不是编辑状态。
|
|
}
|
|
|
|
|
|
void CPolyHoleDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CPolyHoleDlg)
|
|
DDX_CBString(pDX, IDC_HOLE_DEPTH, m_csDepth);
|
|
DDX_Text(pDX, IDC_CMB_LABEL, m_csLabel);
|
|
DDX_Check(pDX, IDC_BORE_HOLE, m_bBoreHole);
|
|
DDX_Control(pDX, IDC_CMB_LABEL, m_cmbLabel);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CPolyHoleDlg, GlwCAcUiDialog)
|
|
//{{AFX_MSG_MAP(CPolyHoleDlg)
|
|
ON_WM_PAINT()
|
|
ON_BN_CLICKED(IDC_HOLE_STYLE, OnHoleStyle)
|
|
ON_WM_SETCURSOR()
|
|
ON_BN_CLICKED(IDC_BORE_HOLE, OnBoreHole)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CPolyHoleDlg message handlers
|
|
|
|
BOOL CPolyHoleDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
GetDlgItem(IDC_HOLE_DEPTH)->EnableWindow(!m_bBoreHole);
|
|
// TODO: Add extra initialization here
|
|
ShowHoleStyle(TRUE);
|
|
|
|
UpdateData(FALSE);
|
|
SetupLabelList();
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
|
|
void CPolyHoleDlg::ShowHoleStyle(BOOL bReLoad)
|
|
{
|
|
XString sFile(256);
|
|
sFile << "TArch(HoleST" << (m_nHoleStyle+1) << ")";
|
|
//if (FindFile(sFile, sFilePath)) {
|
|
CWnd *pImageBox=GetDlgItem(IDC_HOLE_STYLE);
|
|
if (pImageBox) {
|
|
CDC *pDC=pImageBox->GetDC();
|
|
if (bReLoad) {
|
|
CRect rc;
|
|
pImageBox->GetClientRect(&rc);
|
|
m_slideDc.InitDC(pDC, rc, GetAcadBackColor());
|
|
m_slideDc.PaintSlide(sFile);
|
|
} else {
|
|
m_slideDc.SetDC(pDC);
|
|
m_slideDc.Redraw();
|
|
}
|
|
m_slideDc.SetDC(NULL);
|
|
pImageBox->ReleaseDC(pDC);
|
|
}
|
|
//}
|
|
}
|
|
|
|
BOOL CPolyHoleDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
|
|
{
|
|
CWnd *pImageBox=GetDlgItem(IDC_HOLE_STYLE);
|
|
if (pWnd && pImageBox && (pWnd->m_hWnd==pImageBox->m_hWnd)) {
|
|
CAcModuleResourceOverride vTemp;
|
|
HCURSOR hIcon = AfxGetApp()->LoadCursor( IDC_CUR_PICK );
|
|
SetCursor( hIcon );
|
|
return TRUE;
|
|
}
|
|
return CDialog::OnSetCursor(pWnd, nHitTest, message);
|
|
|
|
}
|
|
|
|
void CPolyHoleDlg::OnPaint()
|
|
{
|
|
CPaintDC dc(this); // device context for painting
|
|
CRect rcClip, rcImage;
|
|
dc.GetClipBox(&rcClip);
|
|
CWnd *pImageBox=GetDlgItem(IDC_HOLE_STYLE);
|
|
if (pImageBox) {
|
|
pImageBox->GetWindowRect(&rcImage);
|
|
ScreenToClient(&rcImage);
|
|
if (!rcImage.IntersectRect(&rcImage, &rcClip))
|
|
return;
|
|
ShowHoleStyle(FALSE);
|
|
}
|
|
|
|
// Do not call CDialog::OnPaint() for painting messages
|
|
}
|
|
|
|
void CPolyHoleDlg::OnHoleStyle()
|
|
{
|
|
m_nHoleStyle++;
|
|
if (m_bBoreHole) {
|
|
if (m_nHoleStyle>3)
|
|
m_nHoleStyle=0;
|
|
} else {
|
|
if (m_nHoleStyle>5)
|
|
m_nHoleStyle=4;
|
|
}
|
|
ShowHoleStyle(TRUE);
|
|
}
|
|
|
|
void CPolyHoleDlg::Dlg2Obj(TDbOpening &op)
|
|
{
|
|
// sg modify 110804,解决异形洞对象编辑对话框中的编号设为“自动编号”不起作用,程序会直接标注“自动编号”四个字
|
|
// op.SetLabel(m_csLabel);
|
|
CString csTrueLabel = GetLabel(&op);
|
|
op.SetLabel(csTrueLabel);
|
|
|
|
if (m_bBoreHole)
|
|
op.m_nOpStyle &= ~OPS_NOT_BORE;
|
|
else
|
|
op.m_nOpStyle |= OPS_NOT_BORE;
|
|
op.SetThickness(_tstof(m_csDepth));
|
|
if (m_nHoleStyle==0) {
|
|
op.m_nOpStyle &= ~ OPS_HOLE_FLAG1;
|
|
op.m_nOpStyle &= ~ OPS_HOLE_FLAG2;
|
|
op.m_nOpStyle &= ~ OPS_ATHIGH;
|
|
} else if (m_nHoleStyle==1) {
|
|
op.m_nOpStyle |= OPS_HOLE_FLAG1;
|
|
op.m_nOpStyle &= ~OPS_HOLE_FLAG2;
|
|
op.m_nOpStyle &= ~ OPS_ATHIGH;
|
|
} else if (m_nHoleStyle==2) {
|
|
op.m_nOpStyle &= ~OPS_HOLE_FLAG1;
|
|
op.m_nOpStyle |= OPS_HOLE_FLAG2;
|
|
op.m_nOpStyle &= ~ OPS_ATHIGH;
|
|
} else if (m_nHoleStyle==3) {
|
|
op.m_nOpStyle |= OPS_HOLE_FLAG1;
|
|
op.m_nOpStyle |= OPS_HOLE_FLAG2;
|
|
op.m_nOpStyle |= OPS_ATHIGH;
|
|
} else if (m_nHoleStyle==4) { //不穿透的剖到的洞
|
|
op.m_nOpStyle &= ~OPS_ATHIGH;
|
|
} else if (m_nHoleStyle==5) {
|
|
op.m_nOpStyle |= OPS_ATHIGH;
|
|
}
|
|
}
|
|
|
|
|
|
///////////////////////////////////////////////////////////
|
|
// 根据给定的门窗, 设置对话框参数
|
|
void CPolyHoleDlg::Obj2Dlg(const TDbOpening &op)
|
|
{
|
|
if (op.m_nOpStyle&OPS_NOT_BORE)
|
|
m_bBoreHole=FALSE;
|
|
else
|
|
m_bBoreHole=TRUE;
|
|
|
|
if (m_bBoreHole) {
|
|
if (!(op.m_nOpStyle&OPS_HOLE_FLAG1) &&
|
|
!(op.m_nOpStyle&OPS_HOLE_FLAG2))
|
|
m_nHoleStyle=0;
|
|
else if ((op.m_nOpStyle&OPS_HOLE_FLAG1) &&
|
|
!(op.m_nOpStyle&OPS_HOLE_FLAG2))
|
|
m_nHoleStyle=1;
|
|
else if (!(op.m_nOpStyle&OPS_HOLE_FLAG1) &&
|
|
(op.m_nOpStyle&OPS_HOLE_FLAG2))
|
|
m_nHoleStyle=2;
|
|
else
|
|
m_nHoleStyle=3;
|
|
} else {
|
|
if (op.m_nOpStyle&OPS_ATHIGH)
|
|
m_nHoleStyle=5;
|
|
else
|
|
m_nHoleStyle=4;
|
|
}
|
|
m_csDepth = (const TCHAR *)Dist2Str(op.GetThickness());
|
|
m_csLabel = op.GetLabel();
|
|
}
|
|
|
|
|
|
void CPolyHoleDlg::OnBoreHole()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
BOOL bOldFlag=m_bBoreHole;
|
|
UpdateData(TRUE);
|
|
GetDlgItem(IDC_HOLE_DEPTH)->EnableWindow(!m_bBoreHole);
|
|
if (bOldFlag!=m_bBoreHole) {
|
|
m_nHoleStyle=m_bBoreHole? 0 : 4;
|
|
ShowHoleStyle(TRUE);
|
|
}
|
|
}
|
|
|
|
void CPolyHoleDlg::SetupLabelList()
|
|
{
|
|
CString csTemp;
|
|
m_cmbLabel.GetWindowText(csTemp);
|
|
m_cmbLabel.ResetContent();
|
|
XStringList lstLabels;
|
|
if (GetLabelListFromDwg(lstLabels)) {
|
|
lstLabels.QuickSort(_tcscmp);
|
|
|
|
m_cmbLabel.AddString(AUTO_LABEL_FLAG);
|
|
|
|
for(int i=0; i<lstLabels.Length(); i++)
|
|
m_cmbLabel.AddString(lstLabels[i]);
|
|
}
|
|
m_cmbLabel.SetWindowText(csTemp);
|
|
}
|
|
|
|
extern void GetOpeningIdList(DList<AcDbDatabase> &dbList, DList<AcDbObjectId> &idList);
|
|
BOOL CPolyHoleDlg::GetLabelListFromDwg(XStringList &lstLabels) const
|
|
{
|
|
// 初始化编号
|
|
DList<AcDbObjectId> lstBayWinEnt;
|
|
DList<AcDbDatabase> dbList;
|
|
GetOpeningIdList(dbList, lstBayWinEnt);
|
|
|
|
TOpeningValidateTable opTable;
|
|
for(int i=0; i<lstBayWinEnt.Length(); i++)
|
|
{
|
|
OPENOBJ_BEGIN(*lstBayWinEnt[i], AcDb::kForRead, TDbOpening, pOpening);
|
|
if (pOpening &&
|
|
pOpening->GetKind()==TOpeningData::OP_HOLE &&
|
|
!(pOpening->m_nOpStyle&OPS_LIFTDOOR) &&
|
|
!(pOpening->m_nOpStyle&OPS_LVTRY) &&
|
|
_tcsicmp(pOpening->GetSubKind(), _T("隔断门"))!=0 && // sg add 110309,增加对新增子类型的判断
|
|
_tcsicmp(pOpening->GetSubKind(), _T("电梯门"))!=0)
|
|
{
|
|
opTable.Validate(pOpening);
|
|
}
|
|
OPENOBJ_END();
|
|
}
|
|
|
|
opTable.GetValidLabels(TOpeningData::OP_HOLE, lstLabels);
|
|
return TRUE;
|
|
}
|
|
|
|
CString CPolyHoleDlg::GetLabel(TDbOpening *pPolyHole)
|
|
{
|
|
CString strLabel = m_csLabel;
|
|
// m_cmbLabel.GetWindowText(strLabel);
|
|
|
|
if (strLabel.Compare(AUTO_LABEL_FLAG) == 0)
|
|
{
|
|
return CInsertOpeningDlg::CalcAutoLabel(pPolyHole);
|
|
}
|
|
else
|
|
{
|
|
return strLabel;
|
|
}
|
|
}
|
|
|
|
void AddStringToCombo(CComboBox &cmb, CString &strText);
|
|
void CPolyHoleDlg::AfterModelAdded(TDbOpening *pPolyHole)
|
|
{
|
|
// 模态对话框,不需要做这个。
|
|
// if (pPolyHole != NULL)
|
|
// AddStringToCombo(m_cmbLabel, CString(pPolyHole->GetLabel()));
|
|
}
|
|
|
|
void CPolyHoleDlg::OnOK()
|
|
{
|
|
UpdateData(TRUE);
|
|
CDialog::OnOK();
|
|
}
|