#include "stdafx.h" #include "TTSZDlg.h" #include "comdef.h" IMPLEMENT_DYNAMIC(CTTSZDlg, CDialog) CTTSZDlg::CTTSZDlg(CWnd* pParent /*=NULL*/) : CDialog(CTTSZDlg::IDD, pParent) , m_sDwgFile(_T("")) , m_nUnit(3) , m_bAddToCurDb(FALSE) { } CTTSZDlg::~CTTSZDlg() { } void CTTSZDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT1, m_sDwgFile); DDX_CBIndex(pDX, IDC_COMBO1, m_nUnit); DDX_Check(pDX, IDC_CHECK1, m_bAddToCurDb); } BEGIN_MESSAGE_MAP(CTTSZDlg, CDialog) ON_BN_CLICKED(IDC_BUTTON1, &CTTSZDlg::OnBnClickedButton1) ON_BN_CLICKED(IDOK, &CTTSZDlg::OnBnClickedOk) ON_BN_CLICKED(IDC_CHECK1, &CTTSZDlg::OnBnClickedCheck1) END_MESSAGE_MAP() BOOL CTTSZDlg::OnInitDialog() { CDialog::OnInitDialog(); UpdateData(FALSE); return TRUE; } BOOL CTTSZDlg::BrowseForFolder(HWND hWnd,CString& sFolder,LPCTSTR lpszTitle,UINT nFlags) const { CString strResult = _T(""); LPMALLOC lpMalloc; if (::SHGetMalloc(&lpMalloc) != NOERROR) { return FALSE; } TCHAR szBuffer[_MAX_PATH]; BROWSEINFO browseInfo; TCHAR szDisplayName[_MAX_PATH]; browseInfo.hwndOwner = hWnd; browseInfo.pidlRoot = NULL; browseInfo.pszDisplayName = szDisplayName; browseInfo.lpszTitle = _bstr_t(lpszTitle); browseInfo.ulFlags = nFlags; browseInfo.lpfn = NULL; browseInfo.lParam = 0; LPITEMIDLIST lpItemIDList; if ((lpItemIDList = ::SHBrowseForFolder(&browseInfo)) != NULL) { if (::SHGetPathFromIDList(lpItemIDList, szBuffer)) { if (szBuffer[0] == _T('\0')) { AfxMessageBox(_T("获取路径失败!"),MB_ICONSTOP | MB_OK); sFolder = strResult; return FALSE; } sFolder = szBuffer; return TRUE; } else { AfxMessageBox(_T("获取路径失败!"),MB_ICONSTOP|MB_OK); sFolder = strResult; return FALSE; } lpMalloc->Free(lpItemIDList); lpMalloc->Release(); } else { return FALSE; } sFolder = strResult; return TRUE; } void CTTSZDlg::OnBnClickedButton1() { CString sFileName; CString sPath = _T("c:\\"); int nPos = m_sDwgFile.ReverseFind(_T('\\')); if (nPos != NULL) { sPath = m_sDwgFile.Mid(0,nPos + 1); sFileName = m_sDwgFile.Mid(nPos+1); } HWND hWnd = ::AfxGetMainWnd()->m_hWnd; BOOL bSuccess = BrowseForFolder(hWnd,sPath,_T("请选择放置文件路径,然后确定."),0); if(!bSuccess) { return; } sPath.TrimRight(_T('\\')); sPath += _T("\\"); sPath += sFileName; m_sDwgFile = sPath; UpdateData(FALSE); } void CTTSZDlg::OnBnClickedOk() { OnOK(); } AcGeScale3d CTTSZDlg::GetUnitScale(struct resbuf& rb) const { AcGeScale3d scale(1,1,1); AcDb::UnitsValue nOther = GetUnit(); if (rb.resval.rint == AcDb::kUnitsMeters) //当前图是米制 { if (nOther == AcDb::kUnitsMillimeters)//毫米 { //对方毫米 scale.set(1000.0,1000.0,1000.0); } else if (nOther == AcDb::kUnitsCentimeters)//厘米单位 { //对方厘米 scale.set(100.0,100.0,100.0); } else if (nOther == AcDb::kUnitsDecimeters)//分米单位 { //分米 scale.set(10.0,10.0,10.0); } else if (nOther == AcDb::kUnitsUndefined) { //对方无单位 scale.set(1000.0,1000.0,1000.0); } else if (nOther == AcDb::kUnitsMeters) { //对方米 scale.set(1.0,1.0,1.0); } } else if(rb.resval.rint == AcDb::kUnitsMillimeters)//当前是毫米 { if (nOther == AcDb::kUnitsMillimeters)//毫米 { //对方毫米 scale.set(1.0,1.0,1.0); } else if (nOther == AcDb::kUnitsCentimeters)//厘米单位 { //对方厘米 scale.set(0.1,0.1,0.1); } else if (nOther == AcDb::kUnitsDecimeters)//分米单位 { //对方分米 scale.set(0.01,0.01,0.01); } else if (nOther == AcDb::kUnitsUndefined) { //对方无单位,按毫米 scale.set(1.0,1.0,1.0); } else if (nOther == AcDb::kUnitsMeters) { //对方米 scale.set(0.001,0.001,0.001); } } else if(rb.resval.rint == AcDb::kUnitsCentimeters)//当前是厘米单位 { if (nOther == AcDb::kUnitsMillimeters)//毫米 { //对方毫米 scale.set(10.0,10.0,10.0); } else if (nOther == AcDb::kUnitsCentimeters)//厘米单位 { //对方毫米 scale.set(1.0,1.0,1.0); } else if (nOther == AcDb::kUnitsDecimeters)//分米单位 { //对方分米 scale.set(0.1,0.1,0.1); } else if (nOther == AcDb::kUnitsUndefined)//无单位 { //对方无单位 scale.set(10.0,10.0,10.0); } else if (nOther == AcDb::kUnitsMeters) { //对方米 scale.set(0.01,0.01,0.01); } } else if(rb.resval.rint == AcDb::kUnitsCentimeters)//当前是分米单位 { if (nOther == AcDb::kUnitsMillimeters)//毫米 { //对方毫米 scale.set(100.0,100.0,100.0); } else if (nOther == AcDb::kUnitsCentimeters)//厘米单位 { //对方毫米 scale.set(10.0,10.0,10.0); } else if (nOther == AcDb::kUnitsDecimeters)//分米单位 { //对方毫米 scale.set(1.0,1.0,1.0); } else if (nOther == AcDb::kUnitsUndefined) { //对方无单位,按毫米 scale.set(100.0,100.0,100.0); } else if (nOther == AcDb::kUnitsMeters) { //对方米 scale.set(0.1,0.1,0.1); } } else if(rb.resval.rint == AcDb::kUnitsUndefined)//当前图无单位 { if (nOther == AcDb::kUnitsMillimeters)//毫米 { //对方毫米 scale.set(1.0,1.0,1.0); } else if (nOther == AcDb::kUnitsCentimeters)//厘米单位 { //对方毫米 scale.set(0.1,0.1,0.1); } else if (nOther == AcDb::kUnitsDecimeters)//分米单位 { //对方分米 scale.set(0.01,0.01,0.01); } else if (nOther == AcDb::kUnitsUndefined) { //对方无单位,按毫米 scale.set(1.0,1.0,1.0); } else if (nOther == AcDb::kUnitsMeters) { //对方米 scale.set(0.001,0.001,0.001); } } return scale; } AcDb::UnitsValue CTTSZDlg::GetUnit() const { if (m_nUnit == 0) { return AcDb::kUnitsMeters; } if (m_nUnit == 1) { return AcDb::kUnitsDecimeters; } if (m_nUnit == 2) { return AcDb::kUnitsCentimeters; } if (m_nUnit == 3) { return AcDb::kUnitsMillimeters; } return AcDb::kUnitsMillimeters; } void CTTSZDlg::OnBnClickedCheck1() { }