#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(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(); }