862 lines
24 KiB
C++
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;
|
|
}
|