#include "stdafx.h" #include "StdArx.h" #include "JMDBDlg.h" #include "GLTKDlg.h" #include "CoreTools.h" IMPLEMENT_DYNAMIC(CJMDBDlg, CDialog) CJMDBDlg::CJMDBDlg(CWnd* pParent /*=NULL*/) : CDialog(CJMDBDlg::IDD, pParent) , m_sNo(_T("")) , m_sHatch(HATCH_DEFAULT) , m_bAddHatch(TRUE) { m_pSectionReg = NULL; m_sMaterial = _T("钢筋混凝土"); m_sPurpose = _T("水池底板"); m_dExLen = 3000.0; GET_CACHE(CJMDBDlg , %s%s%f%s , &m_sMaterial , &m_sPurpose , &m_dExLen , &m_sHatch); } CJMDBDlg::~CJMDBDlg(void) { } void CJMDBDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT4, m_sRegScr); DDX_Text(pDX, IDC_EDIT15, m_sMaterial); DDX_Text(pDX, IDC_EDIT16, m_sPurpose); DDX_Text(pDX, IDC_EDIT1, m_dExLen); DDX_Text(pDX, IDC_EDIT17, m_sNo); DDX_Control(pDX, IDC_BTN_FILL, m_wndBtHatch); DDX_Check(pDX, IDC_CHECK_HATCH, m_bAddHatch); DDX_Text(pDX, IDC_BTN_FILL, m_sHatch); } BEGIN_MESSAGE_MAP(CJMDBDlg, CDialog) ON_BN_CLICKED(IDOK, &CJMDBDlg::OnBnClickedOk) ON_BN_CLICKED(IDC_BUTTON1, &CJMDBDlg::OnBnClickedButton1) ON_BN_CLICKED(IDC_BUTTON2, &CJMDBDlg::OnBnClickedButton2) ON_BN_CLICKED(IDC_BTN_FILL, &CJMDBDlg::OnBnClickedBtnFill) ON_BN_CLICKED(IDC_CHECK_HATCH, &CJMDBDlg::OnBnClickedCheckHatch) END_MESSAGE_MAP() BOOL CJMDBDlg::OnInitDialog() { CDialog::OnInitDialog(); m_wndBtHatch.EnableWindow(m_bAddHatch); UpdateData(FALSE); return TRUE; } void CJMDBDlg::OnBnClickedOk() { if (m_pSectionReg == NULL) { AfxMessageBox(_T("没有选择拉伸截面!")); return; } SET_CACHE(CJMDBDlg , %s%s%f%s , m_sMaterial , m_sPurpose , m_dExLen ,m_sHatch); OnOK(); } void CJMDBDlg::OnBnClickedButton1() { UpdateData(); // CGLTKDlg dlg(CGLTKDlg::eSelect, _T("poolstandard.db"), _T("standard"), CGLTKDlg::drawRegion); if ( IDOK == dlg.DoModal() ) { CString sScr; if (dlg.GetCrossSectionScr(sScr)) { CString sFullPath = FilePath::GetSysDir(); sFullPath.MakeLower(); sFullPath += _T("\\JMSJ.sat"); CStdioFile file; if (file.Open(sFullPath,CFile::modeCreate |CFile::modeWrite )) { file.WriteString(sScr); file.Close(); } AcDbVoidPtrArray arBodyPtrs; if ( Acad::eOk == AcDbBody::acisIn(sFullPath,arBodyPtrs) ) { if (arBodyPtrs.length() > 0) { AcDbEntity* pEnt = (AcDbEntity*)arBodyPtrs.first(); AcDbRegion* pRegion = AcDbRegion::cast(pEnt); if (pRegion != NULL) { m_pSectionReg = pRegion; m_sRegScr = sScr; } } } UpdateData(FALSE); } } } void CJMDBDlg::OnBnClickedButton2() { EnableWindow(FALSE); CWnd* pFrame = acedGetAcadFrame(); pFrame->EnableWindow(TRUE); ShowWindow(SW_HIDE); pFrame->SetFocus(); bool bSuccess = false; LPCTSTR pszTip = _T("请拾取区域内一点提取截面:"); ads_point pt; int nRes = acedGetPoint(NULL,pszTip,pt); // 用pt构造一个位移变换 AcGeMatrix3d mat; mat.setToTranslation(asPnt3d(pt).asVector().negate()); if (nRes == RTNORM) { ads_name ent0,ent1; acdbEntLast(ent0); SHacedCommand(RTSTR, _T("-boundary"), RTPOINT, pt, RTSTR, _T(""), RTNONE); acdbEntLast(ent1); AcDbObjectId id1,id2; acdbGetObjectId(id1,ent0); acdbGetObjectId(id2,ent1); if (id1 != id2 && id2.isValid()) { AcDbEntity* pEnt = NULL; if ( Acad::eOk == acdbOpenAcDbEntity(pEnt,id2,AcDb::kForRead)) { AcDbPolyline* pPl = AcDbPolyline::cast(pEnt); if (pPl != NULL) { AcDbPolyline* pPlCln = (AcDbPolyline*)pPl->clone(); pPlCln->transformBy(mat); m_pSectionReg = CoreTools::createRegion(pPlCln); delete pPlCln; bSuccess = true; } pEnt->close(); } acdbEntDel(ent1); } else { acutPrintf(_T("\n提取闭合区域失败!请检查基线是否构成闭合区域!")); } } if (m_pSectionReg != NULL && bSuccess) { CString sFullPath = FilePath::getSystemTemporaryFolder() + _T("\\JMSJ.sat"); CString sRegionScrp = _T(""); CString sLine; AcDbVoidPtrArray arBodyPtrs; arBodyPtrs.append(m_pSectionReg); if (Acad::eOk == AcDbBody::acisOut(sFullPath, arBodyPtrs)) { CFile file; if (file.Open(sFullPath, CFile::modeRead)) { ULONGLONG dwFileLength = file.GetLength(); char* pszTxt = new char[dwFileLength]; file.Read(pszTxt, dwFileLength); m_sRegScr = pszTxt; DELETE_ARR_(pszTxt); file.Close(); } } } pFrame->EnableWindow(FALSE); ShowWindow(SW_SHOW); EnableWindow(TRUE); UpdateData(FALSE); } extern bool __cdecl acedHatchPalletteDialog(wchar_t const* , bool , wchar_t *&); void CJMDBDlg::OnBnClickedBtnFill() { UpdateData(); TCHAR *psz = new TCHAR[1024]; ::memset(psz, 0, sizeof(TCHAR) * 1024); CString sHatch(m_sMaterial); if (!m_sHatch.IsEmpty()) sHatch = m_sHatch; if (acedHatchPalletteDialog(sHatch, false, psz)) { m_sHatch = psz; m_wndBtHatch.SetWindowText(m_sHatch); } delete[] psz; } void CJMDBDlg::OnBnClickedCheckHatch() { UpdateData(); m_wndBtHatch.EnableWindow(m_bAddHatch); if (!m_bAddHatch) m_sHatch = HATCH_NO_NEED; else m_sHatch = HATCH_DEFAULT; UpdateData(FALSE); }