302 lines
5.9 KiB
C++
302 lines
5.9 KiB
C++
#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()
|
|
{
|
|
}
|