Files
envi-code/SourceCode/Code2026/EarthWormCmd/YXMGDlg.cpp
T
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

994 lines
23 KiB
C++

#include "stdafx.h"
#include "resource.h"
#include "YXMGDlg.h"
#include "UITools.h"
#include "AecDbEarthWormFitting.h"
#include "AecDbXXXDoghouse.h"
#include "KTCadUtility.h"
#include "coretools.h"
#define STANDARD_DB _T("\\cityStandard.db")
#define STANDARD_TABLE _T("standard")
#define IMG_FOLDER 0
#define IMG_CLASS 1
#define IMG_REMOTE 2
#define IMG_LOCAL 3
#define WM_TRUERELOAD (WM_USER + 0x1201)
namespace
{
bool IsLocal(CTreeCtrl &tree, HTREEITEM hLocal)
{
HTREEITEM item = tree.GetRootItem();
if (!item) return false;
return item == hLocal;
}
bool hasChild(CTreeCtrl &tree)
{
HTREEITEM item = tree.GetSelectedItem();
if (!item) return false;
return tree.ItemHasChildren(item) == FALSE ? false : true;
}
bool IsRoot(CTreeCtrl &tree)
{
HTREEITEM item = tree.GetSelectedItem();
if (!item) return false;
HTREEITEM root = tree.GetRootItem();
return item == root;
}
bool IsDir(CTreeCtrl &tree)
{
HTREEITEM item = tree.GetSelectedItem();
if (!item) return false;
if (IsRoot(tree)) return false;
return tree.GetParentItem(item) == tree.GetRootItem();
}
bool IsCategory(CTreeCtrl &tree)
{
HTREEITEM item = tree.GetSelectedItem();
if (!item) return false;
if (IsRoot(tree)) return false;
return !IsDir(tree);
}
bool hasChild(CTreeCtrl &tree, HTREEITEM hParent, LPCTSTR pszSub)
{
CString str;
HTREEITEM item = tree.GetChildItem(hParent);
while (item)
{
str = tree.GetItemText(item);
if (str.CompareNoCase(pszSub) == 0)
return true;
item = tree.GetNextSiblingItem(item);
}
return false;
}
}
extern Acad::ErrorStatus AddToModelSpace(AcDbEntity* pEnt,AcDbObjectId& id,AcDbDatabase* pDb,bool bClose);
IMPLEMENT_DYNAMIC(CYXMGDlg, CDialog)
CYXMGDlg::CYXMGDlg(CWnd* pParent /*=NULL*/)
: CDialog(CYXMGDlg::IDD, pParent)
, m_bAndXXXHouse(TRUE)
, m_dRote(0)
, m_bSimpleMode(false)
{
m_sFolderShow = _T("");
m_sClassShow = _T("");
m_pCurHos = NULL;
m_pCurFit = NULL;
m_hLocal = NULL;
m_hRemote = NULL;
m_bSelAsSubModel = FALSE;
m_ssSpecName = _T("");
m_sUser = _T("");
m_sPassword = _T("");
m_sSQLSrv = _T("");
}
CYXMGDlg::~CYXMGDlg()
{
}
void CYXMGDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_TREE1, m_wndYXTree);
DDX_Check(pDX, IDC_CHECK2, m_bAndXXXHouse);
DDX_Text(pDX, IDC_EDIT1, m_dRote);
DDX_Control(pDX, IDC_STATIC_SUB, m_wndStaticSub);
DDX_Control(pDX, IDC_EDIT1, m_wndEditRot);
DDX_Control(pDX, IDC_STATIC_D, m_wndStaticD);
DDX_Control(pDX, IDC_CHECK2, m_wndBtAndHouse);
}
BEGIN_MESSAGE_MAP(CYXMGDlg, CDialog)
ON_BN_CLICKED(IDOK, &CYXMGDlg::OnBnClickedOk)
ON_NOTIFY(TVN_SELCHANGED, IDC_TREE1, &CYXMGDlg::OnTvnSelchangedTree1)
ON_BN_CLICKED(IDC_BUTTON1, &CYXMGDlg::OnBnClickedButton1)
ON_BN_CLICKED(IDC_BUTTON4, &CYXMGDlg::OnBnClickedButton4)
ON_BN_CLICKED(IDC_BUTTON5, &CYXMGDlg::OnBnClickedButton5)
ON_BN_CLICKED(IDC_BUTTON6, &CYXMGDlg::OnBnClickedButton6)
ON_BN_CLICKED(IDC_BUTTON3, &CYXMGDlg::OnBnClickedButton3)
ON_BN_CLICKED(IDC_BUTTON12, &CYXMGDlg::OnBnClickedButton12)
ON_BN_CLICKED(IDC_BUTTON2, &CYXMGDlg::OnBnClickedButton2)
ON_MESSAGE(WM_TRUERELOAD,&CYXMGDlg::OnTrueReloadMsg)
END_MESSAGE_MAP()
BOOL CYXMGDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CRect rc;
GetDlgItem(IDC_STATICVIEW)->GetWindowRect(rc);
GetDlgItem(IDC_STATICVIEW)->ShowWindow(SW_HIDE);
ScreenToClient(rc);
m_wndPreview.Create(rc,this,IDC_STATICVIEW);
m_wndPreview.Init(_hdllInstance,3,5,-1,NULL);
CBitmap bmp;
if (!bmp.LoadBitmap (IDB_BITMAPDIR))
{
AfxMessageBox(_T ("Can't load bitmap: %x\n"), IDB_BITMAPDIR);
ASSERT (FALSE);
return FALSE;
}
BITMAP bmpObj;
bmp.GetBitmap (&bmpObj);
UINT nFlags = ILC_COLOR24 | ILC_MASK;
m_Imagelist.Create (16, bmpObj.bmHeight, nFlags, 0, 0);
m_Imagelist.Add (&bmp, RGB (255, 0, 0));
m_wndYXTree.SetImageList(&m_Imagelist,TVSIL_NORMAL);
// 数据库
CString path = FilePath::GetSysDir() + STANDARD_DB;
if (!m_dbSQLite.InitADOServer(path))
{
AfxMessageBox(CString(_T("数据库初始化失败,请检查 sys")) + STANDARD_DB + _T("文件是否存在."));
return FALSE;
}
CFont* pFont = m_wndYXTree.GetFont();
LOGFONT lf;
memset(&lf,0,sizeof(LOGFONT));
if (pFont->GetLogFont(&lf))
{
m_wndPreview.SetLogFont(&lf);
}
m_hLocal = m_wndYXTree.InsertItem(_T("本地"),IMG_LOCAL,IMG_LOCAL);
//使用mdb 数据库
ShowEquipFolder();
if (!m_bSelAsSubModel)
{
m_wndStaticSub.ShowWindow(SW_HIDE);
m_wndEditRot.ShowWindow(SW_HIDE);
m_wndStaticD.ShowWindow(SW_HIDE);
}
UpdateData(FALSE);
return TRUE;
}
void CYXMGDlg::SetFolderShow(LPCTSTR pszFolder)
{
m_sFolderShow = pszFolder;
}
void CYXMGDlg::SetClassShow(LPCTSTR pszClass)
{
m_sClassShow = pszClass;
}
void CYXMGDlg::ShowEquipFolder()
{
CString sSQL,sKey;
if (m_sFolderShow.IsEmpty())
{
sSQL = _T("select id,folder from aec_folder");
}
else
{
sSQL.Format(_T("select id,folder from aec_folder where folder='%s'"),m_sFolderShow);
}
CStringArray arFolders;
CUIIValueTable table;
m_dbSQLite.GetSelData(sSQL,table);
for (int i = 0;i < table.GetTableLogicSize();i++)
{
arFolders.RemoveAll();
table.GetValueRecord(i,arFolders);
if (arFolders.GetSize() >= 2)
{
HTREEITEM hItem = m_wndYXTree.InsertItem(arFolders.GetAt(1),IMG_FOLDER,IMG_FOLDER,m_hLocal);
ShowEquipClass(hItem,arFolders.GetAt(0));
m_wndYXTree.Expand(hItem,TVE_EXPAND);
sKey.Format(_T("%p"),hItem);
m_mapItem2FolderID.SetAt(sKey,arFolders.GetAt(0));
}
}
m_wndYXTree.Expand(m_hLocal,TVE_EXPAND);
}
void CYXMGDlg::ShowEquipFromSQLServer()
{
if (m_dbSQLsrv.IsDatabaseOpen())
{
CString sSQL,sKey,sID;
if (m_sFolderShow.IsEmpty())
{
sSQL = _T("select id,folder from aec_folder");
}
else
{
sSQL.Format(_T("select id,folder from aec_folder where folder='%s'"),m_sFolderShow);
}
CStringArray arFolders;
CUIIValueTable table;
m_dbSQLsrv.GetSelData(sSQL,table);
for (int i = 0;i < table.GetTableLogicSize();i++)
{
arFolders.RemoveAll();
table.GetValueRecord(i,arFolders);
if (arFolders.GetSize() >= 2)
{
sID = arFolders.GetAt(0);
HTREEITEM hItem = m_wndYXTree.InsertItem(arFolders.GetAt(1),IMG_FOLDER,IMG_FOLDER,m_hRemote);
ShowEquipClassSQLServer(hItem,sID);
m_wndYXTree.Expand(hItem,TVE_EXPAND);
sKey.Format(_T("%p"),hItem);
m_mapItem2FolderID.SetAt(sKey,sID);
}
}
m_wndYXTree.Expand(m_hRemote,TVE_EXPAND);
}
}
void CYXMGDlg::ShowEquipClassSQLServer(HTREEITEM hFolder,LPCTSTR pszFolderID)
{
CString sSQL,sKey;
if (m_sClassShow.IsEmpty())
{
sSQL.Format(_T("select id,class from aec_class where idfolder=%d"),_ttoi(pszFolderID));
}
else
{
sSQL.Format(_T("select id,class from aec_class where idfolder=%d and class like '%%%s%%'"),_ttoi(pszFolderID),m_sClassShow);
}
CStringArray arClass;
CUIIValueTable table;
m_dbSQLsrv.GetSelData(sSQL,table);
for (int i = 0;i < table.GetTableLogicSize();i++)
{
arClass.RemoveAll();
table.GetValueRecord(i,arClass);
if (arClass.GetSize() >= 2)
{
HTREEITEM hItem = m_wndYXTree.InsertItem(arClass.GetAt(1),IMG_CLASS,IMG_CLASS,hFolder);
sKey.Format(_T("%p"),hItem);
m_mapItem2FolderID.SetAt(sKey,arClass.GetAt(0));
}
}
}
void CYXMGDlg::ShowEquipClass(HTREEITEM hFolder,LPCTSTR pszFolderID)
{
CString sSQL,sKey;
if (m_sClassShow.IsEmpty())
{
sSQL.Format(_T("select id,class from aec_class where idfolder=%d"),_ttoi(pszFolderID));
}
else
{
sSQL.Format(_T("select id,class from aec_class where idfolder=%d and class like '%%%s%%'"),_ttoi(pszFolderID),m_sClassShow);
}
CStringArray arClass;
CUIIValueTable table;
m_dbSQLite.GetSelData(sSQL,table);
for (int i = 0;i < table.GetTableLogicSize();i++)
{
arClass.RemoveAll();
table.GetValueRecord(i,arClass);
if (arClass.GetSize() >= 2)
{
HTREEITEM hItem = m_wndYXTree.InsertItem(arClass.GetAt(1),IMG_CLASS,IMG_CLASS,hFolder);
sKey.Format(_T("%p"),hItem);
m_mapItem2FolderID.SetAt(sKey,arClass.GetAt(0));
}
}
}
void CYXMGDlg::OnBnClickedOk()
{
if (m_bSimpleMode)
{
OnOK();
return;
}
int nindex = m_wndPreview.GetCurSelIndex();
if (nindex == -1)
{
AfxMessageBox(_T("族节点没有加载,请点击选择的像加载!"));
return;
}
if (nindex != -1 && nindex < m_arFitHouseGroups.length() )
{
FitHouseGroup group = m_arFitHouseGroups.at(nindex);
if ( group.pHouse == NULL && group.pFit == NULL)
{
AfxMessageBox(_T("族节点没有加载,请点击选择的像加载!"));
return;
}
m_pCurFit = group.pFit;
if (group.pHouse && group.pHouse->GetX3dPartCount())
m_pCurHos = group.pHouse;
else
m_pCurHos = NULL;
m_ssSpecName = group.sSpecName;
}
OnOK();
}
//目录
void CYXMGDlg::OnBnClickedButton1()
{
if (!IsLocal(m_wndYXTree, m_hLocal)) return;
CString sName(_T(""));
if (!CoreTools::getNameByDialog(_T("请输入新名称"), _T("名称:"), sName)) return;
if (hasChild(m_wndYXTree, m_wndYXTree.GetRootItem(), sName))
{
AfxMessageBox(_T("已经存在此节点。"));
return;
}
CString value(_T(""));
CString sql(_T("select max(id) from aec_folder"));
if (!m_dbSQLite.GetSelData(sql, value)) return;
int iMax = _ttoi(value) + 1;
sql.Format(_T("insert into aec_folder values ('%d', '%s')"), iMax, sName);
if (m_dbSQLite.ExecuteSQL(sql))
{
m_wndYXTree.InsertItem(sName, IMG_FOLDER, IMG_FOLDER, m_wndYXTree.GetRootItem());
m_wndYXTree.Expand(m_wndYXTree.GetRootItem(), TVE_EXPAND);
}
}
//分类
void CYXMGDlg::OnBnClickedButton4()
{
if (!IsLocal(m_wndYXTree, m_hLocal)) return;
CString sName(_T(""));
if (!CoreTools::getNameByDialog(_T("请输入新名称"), _T("名称:"), sName)) return;
HTREEITEM item = m_wndYXTree.GetSelectedItem();
if (!IsDir(m_wndYXTree)) return;
if (hasChild(m_wndYXTree, item, sName))
{
AfxMessageBox(_T("已经存在此节点。"));
return;
}
CString str = m_wndYXTree.GetItemText(item);
CString sql(_T(""));
sql.Format(_T("select id from aec_folder where folder='%s'"), str);
CString value(_T(""));
if (!m_dbSQLite.GetSelData(sql, value)) return;
int idFolder = _ttoi(value);
sql = _T("select max(id) from aec_class");
if (!m_dbSQLite.GetSelData(sql, value)) return;
int iMax = _ttoi(value) + 1;
sql.Format(_T("insert into aec_class values ('%d','%s','%d')"), iMax, sName, idFolder);
if (m_dbSQLite.ExecuteSQL(sql))
{
m_wndYXTree.InsertItem(sName, IMG_CLASS, IMG_CLASS, item);
m_wndYXTree.Expand(item, TVE_EXPAND);
}
}
//命名
void CYXMGDlg::OnBnClickedButton5()
{
if (!IsLocal(m_wndYXTree, m_hLocal)) return;
if (IsRoot(m_wndYXTree)) return;
HTREEITEM item = m_wndYXTree.GetSelectedItem();
if (!item) return;
CString str = m_wndYXTree.GetItemText(item);
CString sName(_T(""));
if (!CoreTools::getNameByDialog(_T("请输入新名称"), _T("名称:"), sName)) return;
// 修改数据库
CString sql(_T(""));
if (IsDir(m_wndYXTree))
sql.Format(_T("update aec_folder set folder='%s' where folder=='%s'"), sName, str);
else
sql.Format(_T("update aec_class set class='%s' where class=='%s'"), sName, str);
if (m_dbSQLite.ExecuteSQL(sql))
m_wndYXTree.SetItemText(item, sName);
}
//删除
void CYXMGDlg::OnBnClickedButton6()
{
if (!IsLocal(m_wndYXTree, m_hLocal)) return;
if (IsRoot(m_wndYXTree)) return;
bool isDir(false);
if (IsDir(m_wndYXTree))
{
if (hasChild(m_wndYXTree))
{
AfxMessageBox(_T("请先删除子节点。"));
return;
}
isDir = true;
}
else
{
if (!m_arFitHouseGroups.isEmpty())
{
AfxMessageBox(_T("请先删除子节点。"));
return;
}
}
int nRes = AfxMessageBox(_T("删除为永久性删除!确认要删除吗"),MB_YESNO);
if (nRes != IDYES) return;
HTREEITEM item = m_wndYXTree.GetSelectedItem();
if (!item) return;
CString str = m_wndYXTree.GetItemText(item);
// 删除 sqlite
// 涉及2个表, aec_class / aec_folder
CString sql(_T(""));
if (isDir)
sql.Format(_T("delete from aec_folder where folder = '%s'"), str);
else
sql.Format(_T("delete from aec_class where class='%s'"), str);
if (m_dbSQLite.ExecuteSQL(sql))
m_wndYXTree.DeleteItem(item);
}
//添加
void CYXMGDlg::OnBnClickedButton3()
{
// TODO: 在此添加控件通知处理程序代码
}
//删除
void CYXMGDlg::OnBnClickedButton12()
{
int nindex = m_wndPreview.GetCurSelIndex();
if (nindex != -1 && nindex < m_arFitHouseGroups.length() )
{
int nRes = AfxMessageBox(_T("删除为永久性删除!确认要删除吗"),MB_YESNO);
if (nRes != IDYES)
return;
FitHouseGroup group = m_arFitHouseGroups.at(nindex);
m_pCurFit = group.pFit;
m_pCurHos = group.pHouse;
int nPackageID = group.nPackageID;
CString sSQL;
if (group.nPos == 0)
{
sSQL.Format(_T("delete from aec_package where id=%d"),nPackageID);
if ( m_dbSQLite.ExecuteSQL(sSQL) )
{
m_arFitHouseGroups.removeAt(nindex);
m_pCurFit = NULL;
m_pCurHos = NULL;
m_wndPreview.Clear(nindex);
}
}
else
{
if (m_dbSQLsrv.IsDatabaseOpen())
{
if ( m_dbSQLsrv.ExecuteSQL(sSQL) )
{
m_arFitHouseGroups.removeAt(nindex);
m_pCurFit = NULL;
m_pCurHos = NULL;
m_wndPreview.Clear(nindex);
}
}
}
m_wndPreview.Redraw();
}
}
void CYXMGDlg::OnTvnSelchangedTree1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
int nImage = -1,nSelImg = -1;
m_wndYXTree.GetItemImage(pNMTreeView->itemNew.hItem,nImage,nSelImg);
if (nImage == IMG_LOCAL || nImage == IMG_REMOTE)
{
GetDlgItem(IDC_BUTTON1)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON4)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON5)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON6)->EnableWindow(FALSE);
}
else if (nImage == IMG_FOLDER)
{
GetDlgItem(IDC_BUTTON1)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON4)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON5)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON6)->EnableWindow(TRUE);
}
else if (nImage == IMG_CLASS)
{
GetDlgItem(IDC_BUTTON1)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON4)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON5)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON6)->EnableWindow(TRUE);
}
if (nImage == IMG_CLASS)
{
m_wndPreview.Clear();
FreeBuffer();
CString sKey,sID;
sKey.Format(_T("%p"),pNMTreeView->itemNew.hItem);
if ( m_mapItem2FolderID.Lookup(sKey,sID) )
{
//
HTREEITEM hParent = m_wndYXTree.GetParentItem(pNMTreeView->itemNew.hItem);
if (hParent != NULL)
{
// m_wndPreview.Clear();
// FreeBuffer();
hParent = m_wndYXTree.GetParentItem(hParent);
if (hParent == m_hLocal)
{
//先不加载
PreShowClassEquips(sID,&m_dbSQLite);
}
else if (hParent == m_hRemote)
{
//先不加载
PreShowClassEquips(sID,&m_dbSQLsrv);
}
}
}
}
}
AecDbEarthWormFitting* CYXMGDlg::GetCurSelFit()
{
return m_pCurFit;
}
AecDbXXXDoghouse* CYXMGDlg::GetCurSelHouse()
{
if (m_pCurHos != NULL)
{
m_pCurHos->UpdateDraw();
}
return m_pCurHos;
}
void CYXMGDlg::FreeBuffer()
{
for (int i = 0;i < m_arFitHouseGroups.length();i++)
{
FitHouseGroup& group = m_arFitHouseGroups.at(i);
if (group.pHouse != NULL)
{
DELETE_PTR(group.pHouse);
}
if (group.pFit != NULL)
{
DELETE_PTR(group.pFit);
}
}
m_arFitHouseGroups.removeAll();
}
void CYXMGDlg::PreShowClassEquips(CString& sClassid,CUIISQLiteServer* pDb)
{
if (pDb == NULL) return;
//解压到本地
CString sSQL;
sSQL.Format(_T("select id from aec_package where idclass=%d"),_ttoi(sClassid));
CStringArray arIDs;
pDb->GetSelData(sSQL,arIDs);
m_wndPreview.Clear();
m_wndPreview.Init(_hdllInstance,3,3,arIDs.GetSize());
FreeBuffer();
CStringArray arVals;
CString sFile,sName,sID2,sRem,sSpec;
for (int i = 0;i < arIDs.GetSize();i++)//packageids
{
sID2 = arIDs.GetAt(i);
sSQL.Format(_T("select Name,Rem from aec_package where idclass=%d and ID=%d"),_ttoi(sClassid),_ttoi(sID2));
arVals.RemoveAll();
pDb->GetSelData(sSQL,arVals);
if (arVals.GetSize() > 1)
{
sName = arVals.GetAt(0);
sRem = arVals.GetAt(1);
int nPos = sRem.ReverseFind(_T('|'));
if (nPos != -1)
{
sSpec = sRem.Mid(nPos);
sName += sSpec;
}
}
//临时加一个点
AcDbPoint* pPt = new AcDbPoint;
pPt->setNormal(AcGeVector3d::kZAxis);
pPt->setPosition(AcGePoint3d::kOrigin);
AcDbExtents ext;
pPt->getGeomExtents(ext);
m_wndPreview.Add(pPt,i,sName,&ext);
FitHouseGroup fithsgrp;
fithsgrp.pFit = NULL;
fithsgrp.pHouse = NULL;
fithsgrp.sClassID = sClassid;
fithsgrp.nPackageID = _ttoi(sID2);
fithsgrp.nPos = (&m_dbSQLite == pDb) ? 0 : 1;
fithsgrp.sSpecName = sSpec;
m_arFitHouseGroups.append(fithsgrp);
}
m_wndPreview.Redraw();
}
LRESULT CYXMGDlg::OnTrueReloadMsg(WPARAM wp,LPARAM lp)
{
int nIndex = (int)wp;
if (nIndex > -1 && nIndex < m_arFitHouseGroups.length() )
{
FitHouseGroup& fithsgrp = m_arFitHouseGroups.at(nIndex);
CString sID2;
sID2.Format(_T("%d"),fithsgrp.nPackageID);
CWaitCursor wait;
CUIISQLiteServer* pDb = fithsgrp.nPos == 0 ? &m_dbSQLite : &m_dbSQLsrv;
ShowClassEquips(fithsgrp.sClassID,sID2,pDb,nIndex);
}
return 0L;
}
bool CYXMGDlg::ShowClassEquips(CString& sClassid,CString& sID2,CUIISQLiteServer* pDb,int nIndex)
{
if (pDb == NULL) return false;
//解压到本地
CString sSQL;
CStringArray arVals;
CString sFile,sName,sRem,sSpec;
bool bSuccess = false;
{
sSQL.Format(_T("select Name,Rem from aec_package where idclass=%d and ID=%d"),_ttoi(sClassid),_ttoi(sID2));
arVals.RemoveAll();
pDb->GetSelData(sSQL,arVals);
if (arVals.GetSize() > 1)
{
sName = arVals.GetAt(0);
sRem = arVals.GetAt(1);
int nPos = sRem.ReverseFind(_T('|'));
if (nPos != -1)
{
sSpec = sRem.Mid(nPos);
sName += sSpec;
}
}
//解包到临时文件
sSQL.Format(_T("select packageew from aec_package where ID=%d"),_ttoi(sID2));
TCHAR szPath[MAX_PATH];
GetTempPath(MAX_PATH,szPath);
CString sFullFile1 = _T(""),sFullFile2 = _T("");
TCHAR lpTempFile[MAX_PATH];
UINT nResult = ::GetTempFileName(szPath,_T("ewm"),0,lpTempFile);
if(nResult != 0)
{
sFullFile1 = lpTempFile;
sFullFile1.MakeLower();
sFullFile1.Replace(_T(".tmp"),_T(".ewm"));
sFullFile1.MakeLower();
DeleteFile(sFullFile1);
AecDbEarthWormFitting* pFit = NULL;
if ( pDb->GetSelBlob(sSQL,sFullFile1) > 0)
{
pFit = new AecDbEarthWormFitting;
if ( pFit->ReadFrom(sFullFile1) )
{
AcDbObjectId idLayer = CKTCadUtility::Initlayer(_T("0"));
pFit->setLayer(idLayer);
pFit->setDatabaseDefaults(acdbCurDwg());
//AcDbObjectId id;
//AddToModelSpace(pFit,id,NULL,true);
AcDbExtents ext;
pFit->getGeomExtents(ext);
m_wndPreview.Add(pFit,nIndex,sName,&ext);
bSuccess = true;
}
else
{
DELETE_PTR(pFit);
}
}
sFullFile2 = sFullFile1;
sFullFile2.Replace(_T(".ewm"),_T(".xdh"));
//解包到临时文件
sSQL.Format(_T("select packagehs from aec_package where ID=%d"),_ttoi(sID2));
DeleteFile(sFullFile2);
AecDbXXXDoghouse* pHos = NULL;
if ( pDb->GetSelBlob(sSQL,sFullFile2) > 0)
{
pHos = new AecDbXXXDoghouse;
if ( pHos->ReadFrom(sFullFile2) )
{
AcDbObjectId idLayer = CKTCadUtility::Initlayer(_T("0"));
pHos->setLayer(idLayer);
pHos->setDatabaseDefaults(acdbCurDwg());
//AcDbObjectId id;
//AddToModelSpace(pHos,id,NULL,true);
AcDbExtents ext;
pHos->getGeomExtents(ext);
m_wndPreview.Add(pHos,nIndex,sName,&ext);
bSuccess = true;
}
else
{
DELETE_PTR(pHos);
}
}
if (bSuccess)
{
FitHouseGroup& fithsgrp = m_arFitHouseGroups.at(nIndex);
fithsgrp.pFit = pFit;
fithsgrp.pHouse = pHos;
}
}
}
m_wndPreview.Redraw();
return bSuccess;
}
void CYXMGDlg::ShowClassEquips(CString& sClassid,CUIISQLiteServer* pDb)
{
if (pDb == NULL) return;
//解压到本地
CString sSQL;
sSQL.Format(_T("select id from aec_package where idclass=%d"),_ttoi(sClassid));
CStringArray arIDs;
pDb->GetSelData(sSQL,arIDs);
m_wndPreview.Clear();
m_wndPreview.Init(_hdllInstance,3,3,arIDs.GetSize());
FreeBuffer();
CStringArray arVals;
CString sFile,sName,sID2,sRem,sSpec;
for (int i = 0;i < arIDs.GetSize();i++)//packageids
{
sID2 = arIDs.GetAt(i);
sSQL.Format(_T("select Name,Rem from aec_package where idclass=%d and ID=%d"),_ttoi(sClassid),_ttoi(sID2));
arVals.RemoveAll();
pDb->GetSelData(sSQL,arVals);
if (arVals.GetSize() > 1)
{
sName = arVals.GetAt(0);
sRem = arVals.GetAt(1);
int nPos = sRem.ReverseFind(_T('|'));
if (nPos != -1)
{
sSpec = sRem.Mid(nPos);
sName += sSpec;
}
}
//解包到临时文件
sSQL.Format(_T("select packageew from aec_package where ID=%d"),_ttoi(sID2));
TCHAR szPath[MAX_PATH];
GetTempPath(MAX_PATH,szPath);
CString sFullFile1 = _T(""),sFullFile2 = _T("");
TCHAR lpTempFile[MAX_PATH];
UINT nResult = ::GetTempFileName(szPath,_T("ewm"),0,lpTempFile);
if(nResult != 0)
{
sFullFile1 = lpTempFile;
sFullFile1.MakeLower();
sFullFile1.Replace(_T(".tmp"),_T(".ewm"));
sFullFile1.MakeLower();
DeleteFile(sFullFile1);
AecDbEarthWormFitting* pFit = NULL;
if ( pDb->GetSelBlob(sSQL,sFullFile1) > 0)
{
pFit = new AecDbEarthWormFitting;
if ( pFit->ReadFrom(sFullFile1) )
{
AcDbObjectId idLayer = CKTCadUtility::Initlayer(_T("0"));
pFit->setLayer(idLayer);
pFit->setDatabaseDefaults(acdbCurDwg());
//AcDbObjectId id;
//AddToModelSpace(pFit,id,NULL,true);
AcDbExtents ext;
pFit->getGeomExtents(ext);
m_wndPreview.Add(pFit,i,sName,&ext);
}
else
{
DELETE_PTR(pFit);
}
}
sFullFile2 = sFullFile1;
sFullFile2.Replace(_T(".ewm"),_T(".xdh"));
//解包到临时文件
sSQL.Format(_T("select packagehs from aec_package where ID=%d"),_ttoi(sID2));
DeleteFile(sFullFile2);
AecDbXXXDoghouse* pHos = NULL;
if ( pDb->GetSelBlob(sSQL,sFullFile2) > 0)
{
pHos = new AecDbXXXDoghouse;
if ( pHos->ReadFrom(sFullFile2) )
{
AcDbObjectId idLayer = CKTCadUtility::Initlayer(_T("0"));
pHos->setLayer(idLayer);
pHos->setDatabaseDefaults(acdbCurDwg());
//AcDbObjectId id;
//AddToModelSpace(pHos,id,NULL,true);
AcDbExtents ext;
pHos->getGeomExtents(ext);
m_wndPreview.Add(pHos,i,sName,&ext);
}
else
{
DELETE_PTR(pHos);
}
}
FitHouseGroup fithsgrp;
fithsgrp.pFit = pFit;
fithsgrp.pHouse = pHos;
fithsgrp.nPackageID = _ttoi(sID2);
fithsgrp.nPos = (&m_dbSQLite == pDb) ? 0 : 1;
fithsgrp.sSpecName = sSpec;
m_arFitHouseGroups.append(fithsgrp);
}
}
m_wndPreview.Redraw();
}
void CYXMGDlg::OnBnClickedButton2()
{
CWaitCursor wait;
CString sProductIni = FilePath::GetSysDir() + _T("\\product.ini");
TCHAR szVal[MAX_PATH];
::GetPrivateProfileString(_T("Product"), _T("SQLServer"), _T(""), szVal, MAX_PATH, sProductIni);
m_sSQLSrv = szVal;
::GetPrivateProfileString(_T("Product"), _T("UserID"), _T(""), szVal, MAX_PATH, sProductIni);
m_sUser = szVal;
::GetPrivateProfileString(_T("Product"), _T("Password"), _T(""), szVal, MAX_PATH, sProductIni);
m_sPassword = szVal;
CString sConnect;
sConnect.Format(_T("Provider=sqloledb;Data Source=%s;Initial Catalog=%s;User Id=%s;Password=%s;"),
m_sSQLSrv,_T("SH-EarthWorm"),m_sUser,m_sPassword);
if (m_dbSQLsrv.InitSQLServer(sConnect))
{
}
if (m_hRemote != NULL)
{
m_wndYXTree.DeleteItem(m_hRemote);
m_hRemote = NULL;
}
CString sRootRo;
sRootRo.Format(_T("远程(%s)"),m_sSQLSrv);
m_hRemote = m_wndYXTree.InsertItem(sRootRo,IMG_REMOTE,IMG_REMOTE);
ShowEquipFromSQLServer();
}