Files
envi-code/SourceCode/Code2026/tg_shs/shs_kernal/TExportFileDlg.cpp
T
2026-09-28 15:28:50 +08:00

862 lines
24 KiB
C++

#include "stdafx.h"
#include "TExportFileDlg.h"
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 全局变量定义
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int g_nFilterType = 0;
int g_nDividerFilter = 2;
int g_nCurtainFilter = 2;
int g_nFillFilter = 2;
int g_nFill1Filter = 2;
int g_nFill2Filter = 2;
int g_nBrickFilter = 1;
int g_nPostFix = 1;
int g_nBatchSaveTgVer = 7; //change by jsx 20160824 新增版本 6-->7
/*wlw 2013.10.11 以后导出旧版从cad2004版本开始。cad2000版本存在图形变大
// R16平台,不能保存成R14版本
#if (ADS == 16)
int g_nDownGradeSaveCadVer = 0;
int g_nBatchSaveCadVer = 0;
#else
int g_nDownGradeSaveCadVer = 1;
int g_nBatchSaveCadVer = 1;
#endif
*/
#if (ADS == 16)
int g_nDownGradeSaveCadVer = 0;
int g_nBatchSaveCadVer = 0;
#else
int g_nDownGradeSaveCadVer = 2;
int g_nBatchSaveCadVer = 2;
#endif
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// “图形导出”中的“配置”对话框
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
CSaveFilter::CSaveFilter(CWnd* pParent): CDialog(IDD_FILTER, pParent)
{
m_nDividerFilter=g_nDividerFilter;
m_nCurtainFilter=g_nCurtainFilter;
m_nFillFilter=g_nFillFilter;
m_nFill1Filter=g_nFill1Filter;
m_nFill2Filter=g_nFill2Filter;
m_nBrickFilter=g_nBrickFilter;
}
void CSaveFilter::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CSaveFilter)
DDX_CBIndex(pDX, IDC_COMBO_DIVIDER, m_nDividerFilter);
DDX_CBIndex(pDX, IDC_COMBO_CURTAIN, m_nCurtainFilter);
DDX_CBIndex(pDX, IDC_COMBO_FILL, m_nFillFilter);
DDX_CBIndex(pDX, IDC_COMBO_FILL1, m_nFill1Filter);
DDX_CBIndex(pDX, IDC_COMBO_FILL2, m_nFill2Filter);
DDX_CBIndex(pDX, IDC_COMBO_BRICK, m_nBrickFilter);
//}}AFX_DATA_MAP
}
BOOL CSaveFilter::OnInitDialog()
{
BOOL bRet=CDialog::OnInitDialog();
return bRet;
}
void CSaveFilter::OnOK()
{
UpdateData();
g_nDividerFilter=m_nDividerFilter;
g_nCurtainFilter=m_nCurtainFilter;
g_nFillFilter=m_nFillFilter;
g_nFill1Filter=m_nFill1Filter;
g_nFill2Filter=m_nFill2Filter;
g_nBrickFilter=m_nBrickFilter;
CDialog::OnOK();
CRegProperty regProp(::GetRegLocation(), _T("Settings\\Export"));
regProp.SetTopRootKey(HKEY_CURRENT_USER);
regProp.SetValue(_T("Divider"),g_nDividerFilter);
regProp.SetValue(_T("Curtain"),g_nCurtainFilter);
regProp.SetValue(_T("Fill"),g_nFillFilter);
regProp.SetValue(_T("Fill1"),g_nFill1Filter);
regProp.SetValue(_T("Fill2"),g_nFill2Filter);
regProp.SetValue(_T("Brick"),g_nBrickFilter);
}
void CSaveFilter::PreSave(AcDbDatabase* pDb)
{
if(g_nFilterType!=0)
{
DList<AcDbObjectId> lstId;
GetEntityFromDatabase(lstId,*pDb,_T("ATS_DIMENSION,ATS_DIMENSION2,DIMENSION"),1,ACDB_MODEL_SPACE);
for(long i=0;i<lstId.Length();i++)
{
AcDbEntity *pDim=NULL;
acdbOpenObject(pDim,*lstId[i],AcDb::kForWrite);
if(pDim!=NULL)
{
TCHAR * pLayer=pDim->layer();
if(_tcsicmp(pLayer,LAY_DIMAX)!=0)//不是轴线图层
pDim->erase();
pDim->close();
acutDelString(pLayer);
}
}
}
switch(g_nFilterType)
{
case 1://三维模型
{
// //去二维对象
// DList<AcDbObjectId> lstId;
// GetEntityFromDatabase(lstId,*pDb,_T("ATS_DIMENSION,ATS_DIMENSION2,ATS_TEXT"),1,ACDB_MODEL_SPACE);
// for(long i=0;i<lstId.Length();i++)
// {
// AcDbEntity *pOpening=NULL;
// acdbOpenObject(pOpening,*lstId[i],AcDb::kForWrite);
// if(pOpening!=NULL)
// {
// pOpening->erase();
// pOpening->close();
// }
// }
}
break;
case 2://结构基础条件图
{
//去门窗房间
DList<AcDbObjectId> lstId;
GetEntityFromDatabase(lstId,*pDb,_T("ATS_OPENING,ATS_CORNER_WINDOW,ATS_SPACE"),1,ACDB_MODEL_SPACE);
for(long i=0;i<lstId.Length();i++)
{
AcDbEntity *pOpening=NULL;
acdbOpenObject(pOpening,*lstId[i],AcDb::kForWrite);
if(pOpening!=NULL)
{
pOpening->erase();
pOpening->close();
}
}
//处理墙
lstId.Reset();
GetEntityFromDatabase(lstId,*pDb,_T("ATS_WALL,ATS_CURTAIN_WALL"),1,ACDB_MODEL_SPACE);
for(i=0;i<lstId.Length();i++)
{
TDbWall *pWall=NULL;
acdbOpenObject(pWall,*lstId[i],AcDb::kForWrite);
if(pWall!=NULL)
{
int nOp=0;
if(pWall->GetUsageFlag()!=TWallData::kNormal)
nOp=2;
else
{
switch(pWall->GetStyle())
{
case TWallData::kDivider:nOp=g_nDividerFilter;break;
case TWallData::kCurtain:nOp=g_nCurtainFilter;break;
case TWallData::kFill:nOp=g_nFillFilter;break;
case TWallData::kFill1:nOp=g_nFill1Filter;break;
case TWallData::kFill2:nOp=g_nFill2Filter;break;
case TWallData::kBrick:nOp=g_nBrickFilter;break;
}
}
if(nOp==1)
pWall->setLayer(InitLayer(LAY_BEAM,pDb));
else if(nOp==2)
{
pWall->PreErase();
pWall->erase();
}
pWall->close();
}
}
//去矮柱
lstId.Reset();
GetEntityFromDatabase(lstId,*pDb,_T("ATS_COLUMN"),1,ACDB_MODEL_SPACE);
for(i=0;i<lstId.Length();i++)
{
TDbColumn *pColumn=NULL;
acdbOpenObject(pColumn,*lstId[i],AcDb::kForWrite);
if(pColumn!=NULL)
{
if(pColumn->IsShortColumn())
{
pColumn->PreErase();
pColumn->erase();
}
pColumn->close();
}
}
}
break;
case 3://结构平面条件图,
{
//处理门窗,门窗变洞口
DList<AcDbObjectId> lstId;
GetEntityFromDatabase(lstId,*pDb,_T("ATS_OPENING,ATS_CORNER_WINDOW"),1,ACDB_MODEL_SPACE);
for(long i=0;i<lstId.Length();i++)
{
AcDbEntity *pOpening=NULL;
acdbOpenObject(pOpening,*lstId[i],AcDb::kForWrite);
if(pOpening!=NULL)
{
if(pOpening->isKindOf(TDbOpening::desc()))//没有处理组合门窗!
{
TDbOpening*pWin=TDbOpening::cast(pOpening);
pWin->SetLabelVisible(false);
if(!(pWin->GetKind()==TDbOpening::OP_PROWIN&&pWin->GetElevation()<1))//不是落地突窗
{
bool bWin=!pWin->IsDoor();
pWin->SetKind(TDbOpening::OP_HOLE);
if(bWin)
{
pWin->m_nOpStyle |= OPS_HOLE_FLAG1;
pWin->m_nOpStyle &= ~OPS_HOLE_FLAG2;
pWin->m_nOpStyle &= ~ OPS_ATHIGH;
}
}
}
else
{
TDbCornerWin*pWin=TDbCornerWin::cast(pOpening);
pWin->SetHideLabel(true);
}
pOpening->close();
}
}
//去房间对象
lstId.Reset();
GetEntityFromDatabase(lstId,*pDb,_T("ATS_SPACE"),1,ACDB_MODEL_SPACE);
for(i=0;i<lstId.Length();i++)
{
AcDbEntity *pOpening=NULL;
acdbOpenObject(pOpening,*lstId[i],AcDb::kForWrite);
if(pOpening!=NULL)
{
pOpening->erase();
pOpening->close();
}
}
//处理墙
lstId.Reset();
GetEntityFromDatabase(lstId,*pDb,_T("ATS_WALL,ATS_CURTAIN_WALL"),1,ACDB_MODEL_SPACE);
for(i=0;i<lstId.Length();i++)
{
TDbWall *pWall=NULL;
acdbOpenObject(pWall,*lstId[i],AcDb::kForWrite);
if(pWall!=NULL)
{
int nOp=0;
if(pWall->GetUsageFlag()!=TWallData::kNormal)
nOp=2;
else
{
switch(pWall->GetStyle())
{
case TWallData::kDivider:nOp=g_nDividerFilter;break;
case TWallData::kCurtain:nOp=g_nCurtainFilter;break;
case TWallData::kFill:nOp=g_nFillFilter;break;
case TWallData::kFill1:nOp=g_nFill1Filter;break;
case TWallData::kFill2:nOp=g_nFill2Filter;break;
case TWallData::kBrick:nOp=g_nBrickFilter;break;
}
}
if(nOp==1)
{
const DList<AcDbSoftPointerId> &lstOpening=pWall->GetOpeningIdList();
for(long i=0;i<lstOpening.Length();i++)
{
AcDbObjectId id=lstOpening[i];
AcDbEntity*pOpen=NULL;
acdbOpenObject(pOpen,id,AcDb::kForWrite);
if(pOpen!=NULL)
{
pOpen->erase();
pOpen->close();
}
}
pWall->setLayer(InitLayer(LAY_BEAM,pDb));
}
else if(nOp==2)
{
pWall->PreErase();
pWall->erase();
}
pWall->close();
}
}
//去矮柱
lstId.Reset();
GetEntityFromDatabase(lstId,*pDb,_T("ATS_COLUMN"),1,ACDB_MODEL_SPACE);
for(i=0;i<lstId.Length();i++)
{
TDbColumn *pColumn=NULL;
acdbOpenObject(pColumn,*lstId[i],AcDb::kForWrite);
if(pColumn!=NULL)
{
if(pColumn->IsShortColumn())
{
pColumn->PreErase();
pColumn->erase();
}
pColumn->close();
}
}
}
break;
case 4://设备专业门窗编号
{
DList<AcDbObjectId> lstId;
GetEntityFromDatabase(lstId,*pDb,_T("ATS_OPENING,ATS_CORNER_WINDOW"),1,ACDB_MODEL_SPACE);
for(long i=0;i<lstId.Length();i++)
{
AcDbEntity *pOpening=NULL;
acdbOpenObject(pOpening,*lstId[i],AcDb::kForWrite);
if(pOpening!=NULL)
{
if(pOpening->isKindOf(TDbOpening::desc()))
{
TDbOpening*pWin=TDbOpening::cast(pOpening);
pWin->SetLabelVisible(false);
}
else
{
TDbCornerWin*pWin=TDbCornerWin::cast(pOpening);
pWin->SetHideLabel(true);
}
pOpening->close();
}
}
}
break;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 导出内容下拉列表
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL CFilterCombo::OnCommand(WPARAM wParam,LPARAM lParam)
{
BOOL bRet=CComboBox::OnCommand(wParam,lParam);
if(HIWORD(wParam)==CBN_SELCHANGE)
{
if(GetCurSel()==GetCount()-1)
{
CSaveFilter dlg(this);
dlg.DoModal();
SetCurSel(g_nFilterType);
}
else
{
g_nFilterType=GetCurSel();
if(g_nFilterType==1)//三维模型
{
if(m_pDialog!=NULL)
// sg modify 111206,增加导出T9
//m_pDialog->ChangeType(5);//TArch3格式
m_pDialog->ChangeType(6);//TArch3格式
}
}
}
return bRet;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// CAD版本选择下拉列表
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL CSelCADCombo::OnCommand(WPARAM wParam, LPARAM lParam)
{
BOOL bRet = CComboBox::OnCommand(wParam,lParam);
if (HIWORD(wParam) == CBN_SELCHANGE)
{
int nIndex = GetCurSel();
if (nDlgType == 0) // 图形导出
g_nDownGradeSaveCadVer = nIndex;
else // 批量转旧
g_nBatchSaveCadVer = nIndex;
}
return bRet;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 自动添加文件名后缀的CHECK BOX
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BEGIN_MESSAGE_MAP(CPostFixCheck, CButton)
ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()
void CPostFixCheck::OnLButtonDown(UINT nFlags, CPoint point)
{
g_nPostFix = !g_nPostFix;
CButton::OnLButtonDown(nFlags, point);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// “图形导出”中的“配置”对话框
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
CTArchFileDialog::CTArchFileDialog(const TCHAR *szDefault, int idx)
:CFileDialog(FALSE, _T("*.dwg"), szDefault,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_ENABLESIZING,
g_nProductId==kTARCH ?
_T("AutoCAD文件 (*.dwg)|*.dwg||"):_T("AutoCAD文件 (*.dwg)|*.dwg||")
//_T("AutoCAD文件 (*.dwg) |*.dwg|上华9文件 (*.dwg) |*.dwg|上华8文件 (*.dwg) |*.dwg|上华7文件 (*.dwg) |*.dwg|上华6文件 (*.dwg) |*.dwg|上华5文件 (*.dwg) |*.dwg|上华3文件 (*.dwg) |*.dwg||")
, acedGetAcadFrame()
#if ADS>17
,0,FALSE
#endif
)
{
m_comboFilter.m_pDialog = this;
m_nFileType = 0;
m_ofn.nFilterIndex = idx;
m_comboCADVer.nDlgType = 0;
CRegProperty regProp(::GetRegLocation(), _T("Settings\\Export"));
regProp.SetTopRootKey(HKEY_CURRENT_USER);
regProp.GetValue(_T("Divider"),g_nDividerFilter);
regProp.GetValue(_T("Curtain"),g_nCurtainFilter);
regProp.GetValue(_T("Fill"),g_nFillFilter);
regProp.GetValue(_T("Fill1"),g_nFill1Filter);
regProp.GetValue(_T("Fill2"),g_nFill2Filter);
regProp.GetValue(_T("Brick"),g_nBrickFilter);
}
BOOL CTArchFileDialog::OnInitDialog()
{
BOOL bRet = CFileDialog::OnInitDialog();
// sg modify 111124,新增加的“CAD版本”选择部分,设备专业也要求可以选择,因此把这部分内容挪到专业判断外面来
CRect rect1, rect2, rect3, rect;
GetParent()->GetDlgItem(0x441)->GetWindowRect(rect1); // 保存类型
GetParent()->GetDlgItem(0x470)->GetWindowRect(rect2); // 保存类型选择列表
GetParent()->GetDlgItem(IDCANCEL)->GetWindowRect(rect3); // 取消
GetParent()->ScreenToClient(rect1);
GetParent()->ScreenToClient(rect2);
GetParent()->ScreenToClient(rect3);
GetWindowRect(rect); // 对话框大小
long cy = (long)(rect2.Height()*5/4);
// sg modify 111123,根据9.0的需求,在对话框上增加了CAD版本选择,需要对应调整对话框及部分控件的尺寸
// rect.bottom += cy;
rect.bottom += cy*1;
rect1.top+=cy;
rect1.bottom+=cy;
rect2.top+=cy;
rect2.bottom+=cy*5; // ?5
//rect3.bottom+=cy;
//rect3.top+=cy;
rect3.bottom+=cy*2;
rect3.top+=cy*2;
// sg modify 120409,解决16平台下,对话框下面有一大片空白的问题
//#if ADS<16
#if ADS<17
rect.bottom-=20;
#endif
GetParent()->ScreenToClient(rect);
MoveWindow(rect);
#if ADS>15
CWnd *pWnd=GetParent()->GetDlgItem(0x4A0); // 高版本左侧出现的工具条
if(pWnd!=NULL)
{
CRect rectLeft;
pWnd->GetWindowRect(rectLeft);
GetParent()->ScreenToClient(rectLeft);
// sg modify 111123,根据9.0的需求,在对话框上增加了CAD版本选择,需要调整部分控件的尺寸
// rectLeft.bottom+=cy;
rectLeft.bottom+=cy*2;
pWnd->MoveWindow(rectLeft);
}
#endif
// sg modify 111123,根据9.0的需求,在对话框上增加了一行CAD版本选择
m_staticCADVer.Create(_T("CAD版本:"), WS_VISIBLE|WS_CHILD, rect1, GetParent(), IDC_CADVER_TYPE);
m_staticCADVer.SetFont(GetParent()->GetFont());
rect1.top+=cy;
rect1.bottom+=cy;
m_comboCADVer.Create(WS_VISIBLE|WS_CHILD|CBS_DROPDOWNLIST,rect2,GetParent(),IDC_CMB_CADVER_TYPE);
m_comboCADVer.SetFont(GetParent()->GetFont());
// sg add 111206,根据当前软件的版本,确定可以支持导出的CAD版本文件格式
CStringArray aryCADVer;
GetDownloadACADVer(aryCADVer);
for (int i = 0; i < (int)aryCADVer.GetSize(); i++)
{
m_comboCADVer.AddString(aryCADVer[i]);
}
m_comboCADVer.SetCurSel(g_nDownGradeSaveCadVer); // 默认选择2000版本的格式,支持记忆
rect2.top+=cy;
rect2.bottom+=cy*5; // ?5
if (g_nProductId == kTARCH) // 仅仅建筑专业增加“导出内容”及下拉列表
{
//m_staticFilter.Create(_T("导出内容:"), WS_VISIBLE|WS_CHILD, rect1, GetParent(), IDC_FILTER_DESC);
//m_staticFilter.SetFont(GetParent()->GetFont());
//m_comboFilter.Create(WS_VISIBLE|WS_CHILD|CBS_DROPDOWNLIST, rect2, GetParent(), IDC_FILTER_TYPE);
//m_comboFilter.SetFont(GetParent()->GetFont());
//m_comboFilter.AddString(_T("全部内容"));
//m_comboFilter.AddString(_T("三维模型"));
//m_comboFilter.AddString(_T("结构基础条件图"));
//m_comboFilter.AddString(_T("结构平面条件图"));
//m_comboFilter.AddString(_T("设备专业条件图"));
//m_comboFilter.AddString(_T("配置..."));
//m_comboFilter.SetCurSel(g_nFilterType);
}
GetParent()->SetWindowText(_T("图形导出"));
CenterWindow();
return bRet;
}
// sg add 111206,根据当前软件的版本,确定可以支持导出的CAD版本文件格式
void CTArchFileDialog::GetDownloadACADVer(CStringArray &aryCADVer) const
{
#if (ADS != 16)
aryCADVer.Add(_T("AutoCAD R14文件"));
#endif
#if (ADS == 15)
aryCADVer.Add(_T("AutoCAD 2000文件"));
#elif (ADS == 16)
aryCADVer.Add(_T("AutoCAD 2000文件"));
aryCADVer.Add(_T("AutoCAD 2004文件"));
#elif (ADS == 17)
aryCADVer.Add(_T("AutoCAD 2000文件"));
aryCADVer.Add(_T("AutoCAD 2004文件"));
aryCADVer.Add(_T("AutoCAD 2007文件"));
#elif (ADS == 18)
aryCADVer.Add(_T("AutoCAD 2000文件"));
aryCADVer.Add(_T("AutoCAD 2004文件"));
aryCADVer.Add(_T("AutoCAD 2007文件"));
aryCADVer.Add(_T("AutoCAD 2010文件"));
#else
aryCADVer.Add(_T("AutoCAD 2000文件"));
aryCADVer.Add(_T("AutoCAD 2004文件"));
aryCADVer.Add(_T("AutoCAD 2007文件"));
aryCADVer.Add(_T("AutoCAD 2010文件"));
aryCADVer.Add(_T("AutoCAD 2013文件"));
#endif
}
void CTArchFileDialog::ChangeType(int type)
{
//CWnd* pWnd=GetParent()->GetDlgItem(0x470); // 保存类型选择列表
CWnd* pWnd=GetParent()->GetDlgItem(0x470);
if (pWnd!=NULL)
pWnd->SendMessage(CB_SETCURSEL, type-1, 0);
m_ofn.nFilterIndex = type;
OnTypeChange();
}
void CTArchFileDialog::OnTypeChange()
{
m_nFileType = !m_nFileType;
CString strFile = GetFileName();
// 处理一下路径问题 返回的字符串里可能有路径
strFile = strFile.Right(strFile.GetLength() - strFile.ReverseFind(_T('\\')) - 1);
strFile = strFile.Left(strFile.ReverseFind(_T('.')));
if (strFile.GetLength() < 4) return;
CString sPostfix(_T(""));
bool bArch(g_nProductId == kTARCH);
if (m_ofn.nFilterIndex==1) // T20
sPostfix = bArch ? _T("_t20V3") : _T("_t20V2");
if (m_ofn.nFilterIndex==2) // T9
sPostfix = bArch ? _T("_t20V2") : _T("_t9");
else if (m_ofn.nFilterIndex==3) // T8
sPostfix = bArch ? _T("_t9") : _T("_t8");
else if (m_ofn.nFilterIndex==4) // T7
sPostfix = bArch ? _T("_t8") : _T("_t7");
else if (m_ofn.nFilterIndex==5) // T6
sPostfix = bArch ? _T("_t7") : _T("_t6");
else if (m_ofn.nFilterIndex==6) // T5
sPostfix = bArch ? _T("_t6") : _T("_t5");
else if (m_ofn.nFilterIndex==7) // T3
sPostfix = bArch ? _T("_t5") : _T("_t3");
else if (m_ofn.nFilterIndex==8) // T3
sPostfix = bArch ? _T("_t3") : _T("");
// 判断后 3 或 4 个字符为 _t3,_t5,_t6,_t7,_t8,_t9,_t20
CString str4 = strFile.Right(6), str3 = strFile.Right(3), str5 = strFile.Right(6);
bool b3(false), b4(false), b5(false);
if (str4 == _T("_t20V3")) b4 = true;
if (str5 == _T("_t20V2")) b5 = true;
if (str3 == _T("_t3") || str3 == _T("_t5") || str3 == _T("_t6") || str3 == _T("_t7") || str3 == _T("_t8") || str3 == _T("_t9")) b3 = true;
if (b3)
strFile = strFile.Left(strFile.GetLength()-3) + sPostfix;
else if(b4)
strFile = strFile.Left(strFile.GetLength()-6) + sPostfix;
else if(b5)
strFile = strFile.Left(strFile.GetLength()-6) + sPostfix;
strFile += _T(".dwg");
SetControlText(1152, strFile);
}
int CTArchFileDialog::GetSaveVersion() const
{
return 3;
// sg modify 111206,分别增加导出T9、T8的功能,考虑到后续版本好升级,这个地方整体调整一下
int nSaveVersion = 12; // 只需用修改默认值,比最高版本大1就可以了
if (g_nProductId != kTARCH)
nSaveVersion--;
nSaveVersion = nSaveVersion - m_ofn.nFilterIndex;
if (nSaveVersion == 4) // 没有T4的版本,T5后,直接就是T3
nSaveVersion--;
return nSaveVersion;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// // sg add 120307,根据9.0需求,需要对批量转旧命令的对话框也进行一下修改,参考图形导出来做
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
CTArchBatchSaveAsFileDialog::CTArchBatchSaveAsFileDialog(const TCHAR *szFolder, const TCHAR *szTitle)
:CFileDialog(TRUE, _T("DWG"), NULL, OFN_ALLOWMULTISELECT|OFN_HIDEREADONLY|OFN_ENABLESIZING,
_T("上华T20V2文件(*.dwg)|*.dwg|上华9文件 (*.dwg) |*.dwg|上华8文件 (*.dwg) |*.dwg|上华7文件 (*.dwg) |*.dwg|上华6文件 (*.dwg) |*.dwg|上华5文件 (*.dwg) |*.dwg|上华3文件 (*.dwg) |*.dwg||"),
acedGetAcadFrame()
#if ADS>17
,0,FALSE
#endif
)
{
const TCHAR * szDlgTitle = szTitle;
m_ofn.lpstrTitle = szDlgTitle;
m_ofn.lpstrInitialDir = szFolder;
m_ofn.nFilterIndex = g_nBatchSaveTgVer;
//LH 2012.9.7 添加文件列表缓存变量解决批量转图多选文件失败的问题
m_lpFile = new TCHAR[2562];
m_ofn.nMaxFile = 2562;
m_ofn.lpstrFile = m_lpFile;
m_ofn.lpstrFile[0] = NULL;
m_comboCADVer.nDlgType = 1;
}
CTArchBatchSaveAsFileDialog::~CTArchBatchSaveAsFileDialog()
{
delete[] m_lpFile;
}
BOOL CTArchBatchSaveAsFileDialog::OnInitDialog()
{
BOOL bRet = CFileDialog::OnInitDialog();
GetParent()->GetDlgItem(0x441)->SetWindowText(_T("上华版本:")); // 将“文件类型”的文字替换为“上华版本:”
CRect rectDlg, rect1, rect2, rect3;
GetWindowRect(rectDlg); // 对话框大小
GetParent()->GetDlgItem(0x441)->GetWindowRect(rect1); // 文件类型
GetParent()->GetDlgItem(0x470)->GetWindowRect(rect2); // 文件类型选择列表
GetParent()->ScreenToClient(rect1);
GetParent()->ScreenToClient(rect2);
long cy = (long)(rect2.Height()*5/4); // 根据观察订的调整对话框及控件大小的比例
rectDlg.bottom += cy*2;
// sg modify 120409,解决16平台下,对话框下面有一大片空白的问题
//#if ADS<16
#if ADS<17
rectDlg.bottom-=20;
#endif
GetParent()->ScreenToClient(rectDlg);
MoveWindow(rectDlg); // 调整对话框大小
#if ADS>15
CWnd *pWnd = GetParent()->GetDlgItem(0x4A0);
if (pWnd != NULL)
{
CRect rectLeft;
pWnd->GetWindowRect(rectLeft);
GetParent()->ScreenToClient(rectLeft);
rectLeft.bottom += cy*2;
pWnd->MoveWindow(rectLeft); // 调整高版本左侧工具条的大小
}
#endif
rect1.top += cy;
rect1.bottom += cy;
m_staticCADVer.Create(_T("CAD版本:"), WS_VISIBLE|WS_CHILD, rect1, GetParent(), IDC_CADVER_TYPE); // 在对话框上增加“CAD版本”选择
m_staticCADVer.SetFont(GetParent()->GetFont());
rect2.top += cy;
rect2.bottom += cy*5;
m_comboCADVer.Create(WS_VISIBLE|WS_CHILD|CBS_DROPDOWNLIST, rect2, GetParent(), IDC_CMB_CADVER_TYPE); // 在对话框上增加“CAD版本”选择列表
m_comboCADVer.SetFont(GetParent()->GetFont());
CStringArray aryCADVer;
GetDownloadACADVer(aryCADVer); // 根据当前软件的版本,确定可以支持导出的CAD版本文件格式
for (int i = 0; i < (int)aryCADVer.GetSize(); i++)
{
m_comboCADVer.AddString(aryCADVer[i]);
}
m_comboCADVer.SetCurSel(g_nBatchSaveCadVer); // 默认选择2000版本的格式,支持记忆
// 在对话框上增加是否“自动添加文件名后缀”的复选框
rect1.top += cy;
rect1.bottom += cy;
#if (ADS < 17)
rect1.right *= 4;
#else
rect1.right *= 2;
#endif
m_chkPostFix.Create(_T("导出后的文件自动添加文件名后缀"), WS_VISIBLE|WS_CHILD|BS_AUTOCHECKBOX, rect1, GetParent(), IDC_CHK_POSTFIX);
m_chkPostFix.SetFont(GetParent()->GetFont());
m_chkPostFix.SetCheck(g_nPostFix);
return bRet;
}
void CTArchBatchSaveAsFileDialog::OnTypeChange()
{
g_nBatchSaveTgVer = m_ofn.nFilterIndex;
}
// 根据当前软件的版本,确定可以支持导出的CAD版本文件格式
void CTArchBatchSaveAsFileDialog::GetDownloadACADVer(CStringArray &aryCADVer) const
{
#if (ADS != 16)
aryCADVer.Add(_T("AutoCAD R14文件"));
#endif
#if (ADS == 15)
aryCADVer.Add(_T("AutoCAD 2000文件"));
#elif (ADS == 16)
aryCADVer.Add(_T("AutoCAD 2000文件"));
aryCADVer.Add(_T("AutoCAD 2004文件"));
#elif (ADS == 17)
aryCADVer.Add(_T("AutoCAD 2000文件"));
aryCADVer.Add(_T("AutoCAD 2004文件"));
aryCADVer.Add(_T("AutoCAD 2007文件"));
#elif (ADS == 18)
aryCADVer.Add(_T("AutoCAD 2000文件"));
aryCADVer.Add(_T("AutoCAD 2004文件"));
aryCADVer.Add(_T("AutoCAD 2007文件"));
aryCADVer.Add(_T("AutoCAD 2010文件"));
#else
aryCADVer.Add(_T("AutoCAD 2000文件"));
aryCADVer.Add(_T("AutoCAD 2004文件"));
aryCADVer.Add(_T("AutoCAD 2007文件"));
aryCADVer.Add(_T("AutoCAD 2010文件"));
aryCADVer.Add(_T("AutoCAD 2013文件"));
#endif
}
// 获得要保存的版本号
int CTArchBatchSaveAsFileDialog::GetSaveVersion() const
{
// 后续版本升级时,只需用修改默认值,比导出的最高版本大1(m_ofn.nFilterIndex从1开始的),目前导出T8
//int nSaveVersion = 10;
int nSaveVersion = 11;
nSaveVersion = nSaveVersion - m_ofn.nFilterIndex;
if (nSaveVersion == 4) // 没有T4的版本,T5后,直接就是T3
nSaveVersion--;
return nSaveVersion;
}
// 获得后缀名
void CTArchBatchSaveAsFileDialog::GetPostFixName(XString &szPostFix) const
{
CString csPostFix = _T(""); // 默认不加后缀
if (g_nPostFix)
{
switch(m_ofn.nFilterIndex)
{
case 1: // T20V2
csPostFix = _T("_t20V2");
break;
case 2: // T9
csPostFix = _T("_t9");
break;
case 3: // T8
csPostFix = _T("_t8");
break;
case 4: // T7
csPostFix = _T("_t7");
break;
case 5: // T6
csPostFix = _T("_t6");
break;
case 6: // T5
csPostFix = _T("_t5");
break;
case 7: // T3
csPostFix = _T("_t3");
break;
}
}
szPostFix = csPostFix;
}
// 获得要导出的文件名
void CTArchBatchSaveAsFileDialog::GetBatchSaveFiles(XStringList &lstFiles) const
{
POSITION pos = GetStartPosition();
while (pos != NULL)
{
CString csPath = GetNextPathName(pos);
lstFiles.Append(tstrnew(csPath));
}
}
// 获得最后选择的文件夹
void CTArchBatchSaveAsFileDialog::GetSelFileFolder(XString &szRet) const
{
CString csPath = GetPathName();
POSITION pos = GetStartPosition();
while (pos != NULL)
{
csPath = GetNextPathName(pos); // 带文件名的全路径
int iPos = csPath.ReverseFind(_T('\\'));
if (iPos < 0) // 没有“\”
{
continue;
}
csPath = csPath.Left(++iPos);
break;
}
szRet = csPath;
}