// OpeningValidateDlg.cpp : implementation file // #include "stdafx.h" #include "resource.h" #include "OpeningValidateDlg.h" #include "OpeningValidation.h" #include "aectip.h" #include "rxregsvc.h"// [12/26/2007 nsh] #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif static CObjectTipWnd * g_pOpeningTipWnd=NULL; static Entity g_entCurOpening; // 观察对象 extern void EditObject(Entity ent);// [12/26/2007 nsh] extern void GetOpeningIdList(DList &dbList, DList &idList) ;// [3/14/2008 nsh] int GetObjectNumInCurDwg(const AcDbObjectIdArray &idArray) { int nCount=0; int nLen=idArray.length(); for(int i=0; im_hWnd!=msg->hwnd && !IsAcadDwgView(msg->hwnd)) return FALSE; } else { if (!IsAcadDwgView(msg->hwnd)) return FALSE; }*/ BOOL nRet=FALSE; static CPoint ptLast; switch(msg->message) { case WM_MOUSEMOVE: { CPoint ptDwgView = msg->pt; CPoint ptScr=ptDwgView; //if (ptScr.x-ptLast.x<=2 && ptScr.y-ptLast.y<=2) // return FALSE; ptLast=ptScr; acedGetAcadDwgView()->ScreenToClient(&ptDwgView); //int nVpNum=acedGetWinNum(ptDwgView.x, ptDwgView.y); int cvport=0; VERIFY(xg_getvar(_T("CVPORT"), &cvport)==RTNORM); //if (nVpNum==cvport) { XPoint ptWcs; acedCoordFromPixelToWorld(cvport, ptDwgView, ptWcs); Entity ent=g_entCurOpening; XPoint ptLow, ptUp; VERIFY(ent.GetExtend(ptLow, ptUp)==RTNORM); XRectAngle rec(ptLow, ptUp); XPoly2D poly2d, polyOffset; rec.AsPoly2D(poly2d); poly2d.Offset((ptUp.x-ptLow.x)/10.0, polyOffset); ptWcs.z=0; polyOffset.SetElevation(0.0); if ((ptWcs&polyOffset)==PR_INSIDE) { nRet=TRUE; /* if (g_pOpeningTipWnd) { CRect rect; g_pOpeningTipWnd->GetWindowRect(rect); if ((ptLast.x-ptScr.x)>4 || (ptLast.y-ptScr.y)>4) { int nx=rect.left + ptScr.x - ptLast.x; int ny=rect.top + ptScr.y - ptLast.y; g_pOpeningTipWnd->MoveWindow(nx, ny, rect.Width(), rect.Height(), TRUE); ptLast=ptScr; } } else {*/ //if ((ptLast.x-ptScr.x)>4 || (ptLast.y-ptScr.y)>4 ||) { //显示门窗信息 DList lstInfo; OPENOBJ_BEGIN(ent, AcDb::kForRead, TDbOpening, pEnt); ASSERT(pEnt); pEnt->GetTips(lstInfo); lstInfo.Append(new TObjInfoUnit(_T("比例"), XString(_T("%.f"), pEnt->GetPScale()))); AcRxClass *pRxClass=pEnt->isA(); lstInfo.Append(new TObjInfoUnit(_T("DXF类型"), pRxClass->dxfName())); TCHAR *pszLayer=pEnt->layer(); if (pszLayer) { lstInfo.Append(new TObjInfoUnit(_T("图层"), pszLayer)); delete [] pszLayer; } OPENOBJ_END(); //if (!nRet) { if (g_pOpeningTipWnd) { g_pOpeningTipWnd->DestroyWindow(); delete g_pOpeningTipWnd; g_pOpeningTipWnd=NULL; } //} ptLast=ptScr; g_pOpeningTipWnd = new CObjectTipWnd(); g_pOpeningTipWnd->Create(lstInfo, ptDwgView.x,ptDwgView.y); //} } //} } break; default: break; } if (!nRet) { if (g_pOpeningTipWnd) { g_pOpeningTipWnd->DestroyWindow(); delete g_pOpeningTipWnd; g_pOpeningTipWnd=NULL; } } return FALSE; } // modify by xlc on 090902 消除tg5lib影响 // #if ADS<18 #if 0 ///////////////////////////////////////////////////////////////////////////// // COpeningValidateDlg dialog COpeningValidateDlg::COpeningValidateDlg(TOpeningValidateTable *pSheet, CWnd* pParent /*=NULL*/) : CAcUiDialog(COpeningValidateDlg::IDD, pParent) { m_pSheet=pSheet; m_bReadEnable=FALSE; m_nWorkMode=0; m_bInit=FALSE; m_nOldSizeY=260; m_nOldSizeX=558; //{{AFX_DATA_INIT(COpeningValidateDlg) //}}AFX_DATA_INIT } void COpeningValidateDlg::ShowSlide(UINT id, CImageDC& imgdc, const TCHAR* sldName) { CWnd *pWnd=GetDlgItem(id); if (pWnd) { CRect cR; CDC* pDC = pWnd->GetDC(); pWnd->GetClientRect(&cR); imgdc.InitDC(pDC,cR, GetAcadBackColor()); if (!sldName || !sldName[0]) { imgdc.PaintSlide(_T("")); } else { XString sFullPath(256); sFullPath << g_sDwbPath << sldName; imgdc.PaintSlide(sFullPath); } pWnd->ReleaseDC(pDC); } } void COpeningValidateDlg::ShowSlide() { COleVariant curRow=m_grid.GetBookmark(); if (V_VT(&curRow)!=VT_I4) return; int nCurRow=V_I4(&curRow); TOpeningValidation *pRow=(*m_pSheet)[nCurRow]; if (!(pRow->m_nFlag&OVF_STYLE2D)) ShowSlide(IDC_STYLE2D, m_slide2d, pRow->m_sStyle2d); else ShowSlide(IDC_STYLE2D, m_slide2d, _T("")); if (!(pRow->m_nFlag&OVF_STYLE3D)) ShowSlide(IDC_STYLE3D, m_slide3d, pRow->m_sStyle3d); else ShowSlide(IDC_STYLE3D, m_slide3d, _T("")); } BOOL COpeningValidateDlg::IsBOF() const { return m_nCurIndex<=-1; } BOOL COpeningValidateDlg::IsEOF() const { ASSERT(m_pSheet); return m_nCurIndex>=m_pSheet->Length(); } ////////////////////////////////////// // 移到指定的行 BOOL COpeningValidateDlg::MoveTo(long bookmark) { ASSERT(m_pSheet); m_nCurIndex=bookmark; if (IsEOF()) m_nCurIndex=m_pSheet->Length(); else if (IsBOF()) m_nCurIndex=-1; return TRUE; } //////////////////////////////////////// // 相对移动 void COpeningValidateDlg::Move(long offset) { m_nCurIndex += offset; if (IsEOF()) m_nCurIndex=m_pSheet->Length(); else if (IsBOF()) m_nCurIndex=-1; } void COpeningValidateDlg::DoDataExchange(CDataExchange* pDX) { CAcUiDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(COpeningValidateDlg) DDX_Control(pDX, IDC_GRID, m_grid); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(COpeningValidateDlg, CAcUiDialog) //{{AFX_MSG_MAP(COpeningValidateDlg) ON_WM_PAINT() ON_BN_CLICKED(IDC_VIEWOBJ, OnViewobj) ON_WM_SIZE() ON_WM_CREATE() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // COpeningValidateDlg message handlers BOOL COpeningValidateDlg::OnInitDialog() { CAcUiDialog::OnInitDialog(); CRect rectDlg; GetClientRect(rectDlg); sizeDlg.cx = rectDlg.Width(); sizeDlg.cy = rectDlg.Height(); long nIncY = sizeDlg.cy - m_nOldSizeY; // 对话框绝对尺寸 long nIncX = sizeDlg.cx - m_nOldSizeX; m_bInit = TRUE; ResetSize(nIncX, nIncY); if (m_pSheet) ConfigGrid(); if (m_nWorkMode) GetDlgItem(IDC_VIEWOBJ)->ShowWindow(SW_HIDE); else GetDlgItem(IDCANCEL)->ShowWindow(SW_HIDE); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void COpeningValidateDlg::OnPaint() { CDC* pDC; CRect cR,cR1; CPaintDC dc(this); // device context for painting // TODO: Add your message handler code here CWnd *pWnd2d=GetDlgItem(IDC_STYLE2D); CWnd *pWnd3d=GetDlgItem(IDC_STYLE3D); pDC = pWnd3d->GetDC(); pWnd3d->GetClientRect(&cR); m_slide3d.InitDC(pDC, cR,GetAcadBackColor()); m_slide3d.Redraw(); pWnd3d->ReleaseDC(pDC); pDC = pWnd2d->GetDC(); pWnd2d->GetClientRect(&cR1); m_slide2d.InitDC(pDC,cR1,GetAcadBackColor()); m_slide2d.Redraw(); pWnd2d->ReleaseDC(pDC); } //布置Grid的界面 void COpeningValidateDlg::ConfigGrid() { if (!m_pSheet) return; m_bReadEnable = FALSE; //禁止Grid从数据源读取数据, 锁定 m_grid.SuppressTransforms(TRUE); m_grid.SetApproxCount(m_pSheet->Length()); if (!m_pSheet->Length()) { COleVariant var; V_VT(&var) = VT_NULL; m_grid.SetBookmark(var); } else { m_grid.SetBookmark(COleVariant(0L)); } m_bReadEnable = TRUE; //解开Grid从数据源读取数据的锁定 m_grid.ReBind(); ShowSlide(); } BEGIN_EVENTSINK_MAP(COpeningValidateDlg, CAcUiDialog) //{{AFX_EVENTSINK_MAP(COpeningValidateDlg) ON_EVENT(COpeningValidateDlg, IDC_GRID, 41 /* UnboundReadDataEx */, OnUnboundReadDataExGrid, VTS_DISPATCH VTS_PVARIANT VTS_I4 VTS_PI4) ON_EVENT(COpeningValidateDlg, IDC_GRID, -603 /* KeyPress */, OnKeyPressgrid, VTS_PI2) ON_EVENT(COpeningValidateDlg, IDC_GRID, 11 /* RowColChange */, OnRowColChangeGrid, VTS_PVARIANT VTS_I2) //}}AFX_EVENTSINK_MAP END_EVENTSINK_MAP() // 读取数据, 为了便于在读数时加锁 void COpeningValidateDlg::ReadData(CTrueDBGrid50_RowBuffer &RowBuffer, VARIANT FAR* StartLocation, long offset, long FAR* ApproximatePosition) { if (!m_pSheet || !m_pSheet->Length() || !m_bReadEnable) { RowBuffer.SetRowCount(0); return; } long RowsFetched = 0; // If StartLocation is a Null VARIANT, it means we are positioning // relative to BOF (if offset > 0) or EOF (if offset < 0) if (V_VT(StartLocation) == VT_NULL) { if (offset > 0) { m_nCurIndex=-1L; } else { // Position to EOF m_nCurIndex=m_pSheet->Length(); } } else { // StartLocation refers to a valid bookmark, so just go there. ASSERT(V_VT(StartLocation)==VT_I4); long nPos=V_I4(StartLocation); if (!MoveTo(nPos)) { V_VT(StartLocation)=VT_NULL; } } Move(offset); if (!IsBOF() && !IsEOF()) { *ApproximatePosition = m_nCurIndex; } long lRowCount = RowBuffer.GetRowCount(); short sColCount = RowBuffer.GetColumnCount(); for(long row = 0; row < lRowCount; row++) { if (IsBOF() || IsEOF()) { RowBuffer.SetRowCount(RowsFetched); return; } TOpeningValidation *pRow= (*m_pSheet)[m_nCurIndex]; for(short col = 0; col < sColCount; col++) { short sColIndex = RowBuffer.GetColumnIndex(row, col); //TGridCell *pCell=(*m_pSheet)(int(m_nCurIndex), int(sColIndex)); CString csText; switch(sColIndex) { case 0: //编号 csText=(const TCHAR *)pRow->m_sLabel; break; case 1: csText.Format(_T("%d"), (int)pRow->m_idArray.length()); break; case 2: csText.Format(_T("%d"), (int)GetObjectNumInCurDwg(pRow->m_idArray)); break; case 3: if (pRow->m_nFlag&OVF_KIND) csText=_T("<冲突>"); else csText=(const TCHAR *)pRow->m_sKind; break; case 4: if (pRow->m_nFlag&OVF_WIDTH) csText=_T("<冲突>"); else csText.Format(_T("%d"), AS_INT(pRow->m_nWidth)); break; case 5: if (pRow->m_nFlag&OVF_HEIGHT) csText=_T("<冲突>"); else csText.Format(_T("%d"), AS_INT(pRow->m_nHeight)); break; case 6: if (pRow->m_nFlag&OVF_STYLE2D) csText=_T("<冲突>"); else csText=(const TCHAR *)pRow->m_sStyle2d; break; case 7: if (pRow->m_nFlag&OVF_STYLE3D) csText=_T("<冲突>"); else csText=(const TCHAR *)pRow->m_sStyle3d; break; } COleVariant vValue=csText; RowBuffer.SetValue(row, col, vValue); } long nPos=m_nCurIndex; RowBuffer.SetBookmark(row, COleVariant(nPos)); RowsFetched++; MoveNext(); } RowBuffer.SetRowCount(RowsFetched); } void COpeningValidateDlg::OnUnboundReadDataExGrid(LPDISPATCH RowBuf, VARIANT FAR* StartLocation, long offset, long FAR* ApproximatePosition) { CTrueDBGrid50_RowBuffer RowBuffer(RowBuf); static BOOL bLocked = FALSE; //进行锁定,即下一次的读数消息必须在本次消息结束之后方可以处理 if (bLocked) { #if !defined(NDEBUG) adsout << _T("\nGrid违背了锁定规则!"); #endif return; } bLocked=TRUE; ReadData(RowBuffer, StartLocation, offset, ApproximatePosition); bLocked=FALSE; } void COpeningValidateDlg::OnKeyPressgrid(short FAR* KeyAscii) { if (*KeyAscii == VK_RETURN) { //m_grid.Update(); } } BOOL COpeningValidateDlg::PreTranslateMessage(MSG* pMsg) { if (m_grid.IsSpecialKey(pMsg)) return TRUE; return CAcUiDialog::PreTranslateMessage(pMsg); } /////////////////////////////////////////////////////////////////////////// // 当前行发生改变时,显示当前幻灯 void COpeningValidateDlg::OnRowColChangeGrid(VARIANT FAR* LastRow, short LastCol) { COleVariant curRow=m_grid.GetBookmark(); if (V_VT(&curRow)!=VT_I4) return; int nCurRow=V_I4(&curRow); int nLastRow=V_I4(LastRow); if (nCurRow!=nLastRow) { ShowSlide(); } } void COpeningValidateDlg::OnViewobj() { COleVariant curRow=m_grid.GetBookmark(); if (V_VT(&curRow)!=VT_I4) return; int nCurRow=V_I4(&curRow); TOpeningValidation *pRow=(*m_pSheet)[nCurRow]; AcDbObjectIdArray idArrayCurDwg; int nObjNum=GetObjectIdInCurDwg(pRow->m_idArray, idArrayCurDwg); if (nObjNum<=0) return; int nCurIndex=0; BeginEditorCommand(); while(1) { AcDbObjectId idObj=idArrayCurDwg[nCurIndex]; if (idObj.database()!=acdbCurDwg()) { nCurIndex++; continue; } adsout << _T("\n观察第") << (nCurIndex+1) << _T("/") << nObjNum << _T("个编号为'") << pRow->m_sLabel << _T("'的门窗 [编辑属性(E)/列表查询(L)/返回(X)]<下一个>:"); Entity ent; VERIFY(acdbGetAdsName(ent.name, idObj)==Acad::eOk); XPoint ptLow, ptUp; VERIFY(ent.GetExtend(ptLow, ptUp)==RTNORM); AssureInCurrentView(ptLow, ptUp); XScreenDc dc(1, 1); XRectAngle rec(ptLow, ptUp); XPoly2D poly2d, polyOffset; rec.AsPoly2D(poly2d); poly2d.Offset((ptUp.x-ptLow.x)/10.0, polyOffset); polyOffset.TransUCS(Groups(0), Groups(1)); dc << polyOffset; g_entCurOpening=ent; //BOOL bMsgHook=acedRegisterFilterWinMsg(ViewOpeningMsg); int nRet=RTNORM; XString sKeyword; INITGET_BEG(0, _T("E X L"));// [12/26/2007 nsh] nRet=ads_getkword(_T(""), sKeyword); INITGET_END(); //if (bMsgHook) // acedRemoveFilterWinMsg(ViewOpeningMsg); ads_redraw(NULL, 1); if (nRet==RTCAN) break; if (nRet==RTNONE) { nCurIndex++; if (nCurIndex==nObjNum) nCurIndex=0; } else if (nRet==RTNORM) { if (sKeyword[0]==_T('X')) { // [3/14/2008 nsh] //-------------------------------begin------------------------------ m_pSheet->Reset(); DList dbList; DList ss; GetOpeningIdList(dbList, ss); if (!ss) return; int lCount=ss.Length(); for(int i=0; iGetKind()!=TOpeningData::OP_CORNWIN && //pOpening->GetKind()!=TOpeningData::OP_HOLE && !(pOpening->m_nOpStyle&OPS_LIFTDOOR) && !(pOpening->m_nOpStyle&OPS_LVTRY)) m_pSheet->Validate(pOpening); OPENOBJ_END(); } m_pSheet->QuickSort(TOpeningValidation::CompareForSort); //重新初始话对话窗 SendMessage(WM_INITDIALOG,NULL,NULL); //--------------------------------end------------------------------- break; } if (sKeyword[0]==_T('L')) { OPENOBJ_BEGIN(ent, AcDb::kForRead, TDbOpening, pWin); if (pWin) pWin->list(); OPENOBJ_END(); } // [12/26/2007 nsh] //--------------------begin---------------------------- if (sKeyword[0]==_T('E')) { RBList maskDimSym(RTDXF0, _T("TCH_*"), 68, 1, NULL); if (ent.MatchBase(maskDimSym)) { if (!AT_loaded(_T("tch_annotate"))) acrxLoadModule(_T("tch_annotate.arx"), 0, Adesk::kTrue); } EditObject(ent); } //---------------------end----------------------------- } } CompleteEditorCommand(); } void COpeningValidateDlg::OnOK() { if (m_nWorkMode==1) { COleVariant curRow=m_grid.GetBookmark(); if (V_VT(&curRow)!=VT_I4) return; int nCurRow=V_I4(&curRow); TOpeningValidation *pRow=(*m_pSheet)[nCurRow]; if (pRow->m_opKind!=m_opKind || pRow->m_nFlag) { // 问题描述:提示不合适 // 解决方法:改为"类别不匹配,请选择同类门窗编号!" // 修改人,修改时间:Zyu modify on 100322 //AfxMessageBox(_T("请选择有效的门窗编号!")); AfxMessageBox(_T("类别不匹配,请选择同类门窗编号!")); return; } else { m_nCurIndex=nCurRow; } } CAcUiDialog::OnOK(); } AcDbObjectId COpeningValidateDlg::GetFinalSelect() { if (m_nCurIndex>=0) { TOpeningValidation *pRow=(*m_pSheet)[m_nCurIndex]; if (!pRow->m_idArray.isEmpty() && !pRow->m_nFlag && m_opKind==pRow->m_opKind) return pRow->m_idArray[0]; } return AcDbObjectId::kNull; } void COpeningValidateDlg::OnSize(UINT nType, int cx, int cy) { if (m_bInit && (!nType || nType==SIZE_MAXIMIZED)) { CSize sizeOld = sizeDlg; sizeDlg.cx = cx; sizeDlg.cy = cy; long nIncY = sizeDlg.cy - sizeOld.cy; long nIncX = sizeDlg.cx - sizeOld.cx; ResetSize(nIncX, nIncY); } } void COpeningValidateDlg::ResetSize(long nIncX, long nIncY) { CRect rectGrid; m_grid.GetWindowRect(rectGrid); ScreenToClient(rectGrid); CRect rectCancel, rectOk, rectView, rectStatic2d, rectStatic3d, rectStyle2d,rectStyle3d; CWnd *pCancel = GetDlgItem(IDCANCEL); CWnd *pOk = GetDlgItem(IDOK); CWnd *pView = GetDlgItem(IDC_VIEWOBJ); CWnd *pStatic2d = GetDlgItem(IDC_STATIC_2D); CWnd *pStatic3d = GetDlgItem(IDC_STATIC_3D); CWnd *pStyle2d = GetDlgItem(IDC_STYLE2D); CWnd *pStyle3d = GetDlgItem(IDC_STYLE3D); pCancel->GetWindowRect(rectCancel); ScreenToClient(rectCancel); pOk->GetWindowRect(rectOk); ScreenToClient(rectOk); pView->GetWindowRect(rectView); ScreenToClient(rectView); pStatic2d->GetWindowRect(rectStatic2d); ScreenToClient(rectStatic2d); pStatic3d->GetWindowRect(rectStatic3d); ScreenToClient(rectStatic3d); pStyle2d->GetWindowRect(rectStyle2d); ScreenToClient(rectStyle2d); pStyle3d->GetWindowRect(rectStyle3d); ScreenToClient(rectStyle3d); m_grid.MoveWindow(rectGrid.left, rectGrid.top, rectGrid.Width()+nIncX, rectGrid.Height()+nIncY); pCancel->MoveWindow(rectCancel.left, rectCancel.top + nIncY, rectCancel.Width(), rectCancel.Height()); pOk->MoveWindow(rectOk.left, rectOk.top + nIncY, rectOk.Width(), rectOk.Height()); pView->MoveWindow(rectView.left, rectView.top + nIncY, rectView.Width(), rectView.Height()); pStatic2d->MoveWindow(rectStatic2d.left + nIncX, rectStatic2d.top, rectStatic2d.Width(), rectStatic2d.Height()); pStatic3d->MoveWindow(rectStatic3d.left+ nIncX, rectStatic3d.top, rectStatic3d.Width(), rectStatic3d.Height()); pStyle2d->MoveWindow(rectStyle2d.left+ nIncX, rectStyle2d.top, rectStyle2d.Width(), rectStyle2d.Height()); pStyle3d->MoveWindow(rectStyle3d.left+ nIncX, rectStyle3d.top, rectStyle3d.Width(), rectStyle3d.Height()); } int COpeningValidateDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CAcUiDialog::OnCreate(lpCreateStruct) == -1) return -1; CRect rect; GetClientRect(rect); m_nOldSizeX=rect.Width(); m_nOldSizeY=rect.Height(); return 0; } #endif BOOL COpeningValidateNewDlg::m_bShowOnlyCurDwg = TRUE; COpeningValidateNewDlg::COpeningValidateNewDlg(TOpeningValidateTable *pSheet, CWnd* pParent /*=NULL*/) : CAcUiDialog(COpeningValidateNewDlg::IDD, pParent) { m_pSheet=pSheet; m_nWorkMode=0; m_bInit=FALSE; m_nOldSizeY=260; m_nOldSizeX=558; m_bCreate=TRUE; //{{AFX_DATA_INIT(COpeningValidateNewDlg) //}}AFX_DATA_INIT } void COpeningValidateNewDlg::ShowSlide(UINT id, CImageDC& imgdc, const TCHAR* sldName) { CWnd *pWnd=GetDlgItem(id); if (pWnd) { CRect cR; CDC* pDC = pWnd->GetDC(); pWnd->GetClientRect(&cR); imgdc.InitDC(pDC,cR, GetAcadBackColor()); if (!sldName || !sldName[0]) { imgdc.PaintSlide(_T("")); } else { XString sFullPath(256); sFullPath << g_sDwbPath << sldName; imgdc.PaintSlide(sFullPath); } pWnd->ReleaseDC(pDC); } } void COpeningValidateNewDlg::ShowSlide() { int nCurIndex=m_grid.m_nCurIndex; if (nCurIndex<0||nCurIndex>=m_pSheet->Length()) return; TOpeningValidation *pRow=(*m_pSheet)[nCurIndex]; if (!(pRow->m_nFlag&OVF_STYLE2D)) ShowSlide(IDC_STYLE2D, m_slide2d, pRow->m_sStyle2d); else ShowSlide(IDC_STYLE2D, m_slide2d, _T("")); if (!(pRow->m_nFlag&OVF_STYLE3D)) ShowSlide(IDC_STYLE3D, m_slide3d, pRow->m_sStyle3d); else ShowSlide(IDC_STYLE3D, m_slide3d, _T("")); } //////////////////////////////////////// void COpeningValidateNewDlg::DoDataExchange(CDataExchange* pDX) { CAcUiDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(COpeningValidateNewDlg) DDX_Control(pDX, IDC_GRID, m_grid); DDX_Check(pDX, IDC_CHECK_CURDWG, m_bShowOnlyCurDwg); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(COpeningValidateNewDlg, CAcUiDialog) //{{AFX_MSG_MAP(COpeningValidateNewDlg) ON_WM_PAINT() ON_BN_CLICKED(IDC_VIEWOBJ, OnViewobj) ON_WM_SIZE() ON_WM_CREATE() ON_WM_LBUTTONDOWN() ON_BN_CLICKED(IDC_CHECK_CURDWG, OnCheckCurDwg) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // COpeningValidateNewDlg message handlers BOOL COpeningValidateNewDlg::OnInitDialog() { CAcUiDialog::OnInitDialog(); CRect rectDlg; GetClientRect(rectDlg); sizeDlg.cx = rectDlg.Width(); sizeDlg.cy = rectDlg.Height(); long nIncY = sizeDlg.cy - m_nOldSizeY; // 对话框绝对尺寸 long nIncX = sizeDlg.cx - m_nOldSizeX; m_bInit = TRUE; ResetSize(nIncX, nIncY); if (m_pSheet) InitGrid(); if (m_nWorkMode) GetDlgItem(IDC_VIEWOBJ)->ShowWindow(SW_HIDE); else GetDlgItem(IDCANCEL)->ShowWindow(SW_HIDE); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void COpeningValidateNewDlg::OnPaint() { CDC* pDC; CRect cR,cR1; CPaintDC dc(this); // device context for painting // TODO: Add your message handler code here CWnd *pWnd2d=GetDlgItem(IDC_STYLE2D); CWnd *pWnd3d=GetDlgItem(IDC_STYLE3D); pDC = pWnd3d->GetDC(); pWnd3d->GetClientRect(&cR); m_slide3d.InitDC(pDC, cR,GetAcadBackColor()); m_slide3d.Redraw(); pWnd3d->ReleaseDC(pDC); pDC = pWnd2d->GetDC(); pWnd2d->GetClientRect(&cR1); m_slide2d.InitDC(pDC,cR1,GetAcadBackColor()); m_slide2d.Redraw(); pWnd2d->ReleaseDC(pDC); } /////////////////////////////////////////////////////////////////////////// // 观察对象 void COpeningValidateNewDlg::OnViewobj() { //modify by xlc on 090313 //int nCurRow=m_grid.m_nCurIndex ; int nCurRow=m_grid.GetCurRowIndex(); if (nCurRow<0||nCurRow>=m_pSheet->Length()) { return; } TOpeningValidation *pRow=(*m_pSheet)[nCurRow]; AcDbObjectIdArray idArrayCurDwg; int nObjNum=GetObjectIdInCurDwg(pRow->m_idArray, idArrayCurDwg); if (nObjNum<=0) return; int nCurIndex=0; BeginEditorCommand(); while(1) { AcDbObjectId idObj=idArrayCurDwg[nCurIndex]; if (idObj.database()!=acdbCurDwg()) { nCurIndex++; continue; } adsout << _T("\n观察第") << (nCurIndex+1) << _T("/") << nObjNum << _T("个编号为'") << pRow->m_sLabel << _T("'的门窗 [编辑属性(E)/列表查询(L)/返回(X)]<下一个>:"); Entity ent; VERIFY(acdbGetAdsName(ent.name, idObj)==Acad::eOk); XPoint ptLow, ptUp; VERIFY(ent.GetExtend(ptLow, ptUp)==RTNORM); AssureInCurrentView(ptLow, ptUp); XScreenDc dc(1, 1); XRectAngle rec(ptLow, ptUp); XPoly2D poly2d, polyOffset; rec.AsPoly2D(poly2d); poly2d.Offset((ptUp.x-ptLow.x)/10.0, polyOffset); polyOffset.TransUCS(Groups(0), Groups(1)); dc << polyOffset; g_entCurOpening=ent; int nRet=RTNORM; XString sKeyword; INITGET_BEG(0, _T("E X L")); nRet=ads_getkword(_T(""), sKeyword); INITGET_END(); ads_redraw(NULL, 1); if (nRet==RTCAN) break; if (nRet==RTNONE) { nCurIndex++; if (nCurIndex==nObjNum) nCurIndex=0; } else if (nRet==RTNORM) { if (sKeyword[0]==_T('X')) { m_pSheet->Reset(); DList dbList; DList ss; GetOpeningIdList(dbList, ss); if (!ss) return; int lCount=ss.Length(); for(int i=0; iGetKind()!=TOpeningData::OP_CORNWIN && !(pOpening->m_nOpStyle&OPS_LIFTDOOR) && !(pOpening->m_nOpStyle&OPS_LVTRY) && _tcsicmp(pOpening->GetSubKind(), _T("隔断门"))!=0 && // sg add 110309,增加对新增子类型的判断 _tcsicmp(pOpening->GetSubKind(), _T("电梯门"))!=0) { m_pSheet->Validate(pOpening); } OPENOBJ_END(); } m_pSheet->QuickSort(TOpeningValidation::CompareForSort); //重新初始话对话窗 //SendMessage(WM_INITDIALOG,NULL,NULL); m_bCreate=FALSE; if (m_pSheet) InitGrid(); break; } else if (sKeyword[0]==_T('L')) { OPENOBJ_BEGIN(ent, AcDb::kForRead, TDbOpening, pWin); if (pWin) pWin->list(); OPENOBJ_END(); } else if (sKeyword[0]==_T('E')) { RBList maskDimSym(RTDXF0, _T("TCH_*"), 68, 1, NULL); if (ent.MatchBase(maskDimSym)) { if (!AT_loaded(_T("tch_annotate"))) acrxLoadModule(_T("tch_annotate.arx"), 0, Adesk::kTrue); } EditObject(ent); } } } CompleteEditorCommand(); } void COpeningValidateNewDlg::OnOK() { if (m_nWorkMode==1) { //modify by xlc on 090921 解决门窗界面查表时选中行时无法点确定返回的问题 m_grid.m_nCurIndex = m_grid.GetCurRowIndex(); if (!m_grid.IsRowValid()) { return; } int nCurRow=m_grid.m_nCurIndex; TOpeningValidation *pRow=(*m_pSheet)[nCurRow]; if (pRow->m_opKind!=m_opKind || pRow->m_nFlag) { // 问题描述:提示不合适 // 解决方法:改为"类别不匹配,请选择同类门窗编号!" // 修改人,修改时间:Zyu modify on 100322 //AfxMessageBox(_T("请选择有效的门窗编号!")); AfxMessageBox(_T("类别不匹配,请选择同类门窗编号!")); return; } } CAcUiDialog::OnOK(); } AcDbObjectId COpeningValidateNewDlg::GetFinalSelect() { if (m_grid.m_nCurIndex>=0) { TOpeningValidation *pRow=(*m_pSheet)[m_grid.m_nCurIndex]; if (!pRow->m_idArray.isEmpty() && !pRow->m_nFlag && m_opKind==pRow->m_opKind) return pRow->m_idArray[0]; } return AcDbObjectId::kNull; } void COpeningValidateNewDlg::OnSize(UINT nType, int cx, int cy) { if (m_bInit && (!nType || nType==SIZE_MAXIMIZED)) { CSize sizeOld = sizeDlg; sizeDlg.cx = cx; sizeDlg.cy = cy; long nIncY = sizeDlg.cy - sizeOld.cy; long nIncX = sizeDlg.cx - sizeOld.cx; ResetSize(nIncX, nIncY); } } void COpeningValidateNewDlg::ResetSize(long nIncX, long nIncY) { CRect rectGrid; m_grid.GetWindowRect(rectGrid); ScreenToClient(rectGrid); CRect rectCancel, rectOk, rectView, rectStatic2d, rectStatic3d, rectStyle2d,rectStyle3d, rectDWGOnly; CWnd *pCancel = GetDlgItem(IDCANCEL); CWnd *pOk = GetDlgItem(IDOK); CWnd *pView = GetDlgItem(IDC_VIEWOBJ); CWnd *pStatic2d = GetDlgItem(IDC_STATIC_2D); CWnd *pStatic3d = GetDlgItem(IDC_STATIC_3D); CWnd *pStyle2d = GetDlgItem(IDC_STYLE2D); CWnd *pStyle3d = GetDlgItem(IDC_STYLE3D); CWnd *pWndDWGOnly = GetDlgItem(IDC_CHECK_CURDWG); pCancel->GetWindowRect(rectCancel); ScreenToClient(rectCancel); pOk->GetWindowRect(rectOk); ScreenToClient(rectOk); pView->GetWindowRect(rectView); ScreenToClient(rectView); pStatic2d->GetWindowRect(rectStatic2d); ScreenToClient(rectStatic2d); pStatic3d->GetWindowRect(rectStatic3d); ScreenToClient(rectStatic3d); pStyle2d->GetWindowRect(rectStyle2d); ScreenToClient(rectStyle2d); pStyle3d->GetWindowRect(rectStyle3d); ScreenToClient(rectStyle3d); pWndDWGOnly->GetWindowRect(rectDWGOnly); ScreenToClient(rectDWGOnly); m_grid.MoveWindow(rectGrid.left, rectGrid.top, rectGrid.Width()+nIncX, rectGrid.Height()+nIncY); pCancel->MoveWindow(rectCancel.left, rectCancel.top + nIncY, rectCancel.Width(), rectCancel.Height()); pOk->MoveWindow(rectOk.left, rectOk.top + nIncY, rectOk.Width(), rectOk.Height()); pView->MoveWindow(rectView.left, rectView.top + nIncY, rectView.Width(), rectView.Height()); pStatic2d->MoveWindow(rectStatic2d.left + nIncX, rectStatic2d.top, rectStatic2d.Width(), rectStatic2d.Height()); pStatic3d->MoveWindow(rectStatic3d.left+ nIncX, rectStatic3d.top, rectStatic3d.Width(), rectStatic3d.Height()); pStyle2d->MoveWindow(rectStyle2d.left+ nIncX, rectStyle2d.top, rectStyle2d.Width(), rectStyle2d.Height()); pStyle3d->MoveWindow(rectStyle3d.left+ nIncX, rectStyle3d.top, rectStyle3d.Width(), rectStyle3d.Height()); pWndDWGOnly->MoveWindow(rectDWGOnly.left, rectCancel.top + nIncY, rectDWGOnly.Width(), rectDWGOnly.Height()); } int COpeningValidateNewDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CAcUiDialog::OnCreate(lpCreateStruct) == -1) return -1; // TODO: Add your specialized creation code here CRect rect; GetClientRect(rect); m_nOldSizeX=rect.Width(); m_nOldSizeY=rect.Height(); return 0; } //布置Grid的界面 void COpeningValidateNewDlg::InitGrid() { if (!m_pSheet) return; int nCurRow=m_grid.m_nCurIndex=0; m_grid.Clear(); if (m_bCreate) { m_grid.AppendCol(_T("编号"), 50); m_grid.AppendCol(_T("总数"), 40); m_grid.AppendCol(_T("数量"), 40); m_grid.AppendCol(_T("类型"), 40); m_grid.AppendCol(_T("宽度"), 50); m_grid.AppendCol(_T("高度"), 50); m_grid.AppendCol(_T("2D样式"), 100); m_grid.AppendCol(_T("3D样式"), 100); m_grid.SetColPosFix(); m_grid.SetRowPosFix(); m_grid.SetColFixLength(); m_grid.FitLastCol(); m_grid.Create(this, IDC_GRID); } CString csText; for (int i=0;iLength();i++) { m_grid.AppendRow(); TOpeningValidation *pRow= (*m_pSheet)[i]; m_grid.GetCell(i, 0).SetText((const TCHAR *)pRow->m_sLabel); csText.Format(_T("%d"), (int)pRow->m_idArray.length()); m_grid.GetCell(i, 1).SetText(csText); csText.Empty(); csText.Format(_T("%d"), (int)GetObjectNumInCurDwg(pRow->m_idArray)); m_grid.GetCell(i, 2).SetText(csText); csText.Empty(); if (pRow->m_nFlag&OVF_KIND) csText=_T("<冲突>"); else csText=(const TCHAR *)pRow->m_sKind; m_grid.GetCell(i, 3).SetText(csText); csText.Empty(); if (pRow->m_nFlag&OVF_WIDTH) csText=_T("<冲突>"); else csText.Format(_T("%d"), AS_INT(pRow->m_nWidth)); m_grid.GetCell(i, 4).SetText(csText); csText.Empty(); if (pRow->m_nFlag&OVF_HEIGHT) csText=_T("<冲突>"); else csText.Format(_T("%d"), AS_INT(pRow->m_nHeight)); m_grid.GetCell(i, 5).SetText(csText); csText.Empty(); if (pRow->m_nFlag&OVF_STYLE2D) csText=_T("<冲突>"); else csText=(const TCHAR *)pRow->m_sStyle2d; m_grid.GetCell(i, 6).SetText(csText); csText.Empty(); if (pRow->m_nFlag&OVF_STYLE3D) csText=_T("<冲突>"); else csText=(const TCHAR *)pRow->m_sStyle3d; m_grid.GetCell(i, 7).SetText(csText); } m_grid.SetCurRowIndex(nCurRow); ShowSlide(); } void COpeningValidateNewDlg::OnLButtonDown(UINT nFlags, CPoint point) { if (nFlags == IDC_GRID) { ShowSlide(); } } //add by xlc on 110308 void COpeningValidateNewDlg::OnCheckCurDwg() { UpdateData(TRUE); DList dbList; DList ss; if (m_bShowOnlyCurDwg) // 本图 { GetEntFromBlockByDxf(ss, _T("TCH_OPENING")); } else // 本工程 { GetOpeningIdList(dbList, ss); } if (!ss) return; m_pSheet->Reset(); int lCount=ss.Length(); for(int i=0; iGetKind()!=TOpeningData::OP_CORNWIN && !(pOpening->m_nOpStyle&OPS_LIFTDOOR) && !(pOpening->m_nOpStyle&OPS_LVTRY) && _tcsicmp(pOpening->GetSubKind(), _T("隔断门"))!=0 && // sg add 110309,增加对新增子类型的判断 _tcsicmp(pOpening->GetSubKind(), _T("电梯门"))!=0) { m_pSheet->Validate(pOpening); } OPENOBJ_END(); } m_pSheet->QuickSort(TOpeningValidation::CompareForSort); m_bCreate=FALSE; if (m_pSheet) { InitGrid(); } UpdateData(FALSE); }