994 lines
23 KiB
C++
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();
|
|
} |