Files
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

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