210 lines
5.4 KiB
C++
210 lines
5.4 KiB
C++
#include "StdAfx.h"
|
|
#include "StdArx.h"
|
|
#include "resource.h"
|
|
#include <afxdllx.h>
|
|
#include "DockPane.h"
|
|
#include "rDocManagerReactor.h"
|
|
#include "tkcsdlg.h"
|
|
#include "CoreTools.h"
|
|
|
|
HINSTANCE _hdllInstance = NULL;
|
|
CString g_sDwgPathName;
|
|
CTkcsDlg *g_TkcsDlg = NULL;
|
|
AsdkDocManagerReactor *g_pDocReactor = NULL;
|
|
extern CDockPane *g_pDockPane;
|
|
|
|
void InitApplication();
|
|
void UnloadApplication();
|
|
|
|
AC_IMPLEMENT_EXTENSION_MODULE(shsTK);
|
|
|
|
extern "C" BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpReserved*/)
|
|
{
|
|
if (dwReason == DLL_PROCESS_ATTACH)
|
|
{
|
|
_hdllInstance = hInstance;
|
|
shsTK.AttachInstance(hInstance);
|
|
}
|
|
else if (dwReason == DLL_PROCESS_DETACH)
|
|
{
|
|
shsTK.DetachInstance();
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
extern "C" AcRx::AppRetCode acrxEntryPoint(AcRx::AppMsgCode msg, void *pkt)
|
|
{
|
|
switch (msg)
|
|
{
|
|
case AcRx::kInitAppMsg:
|
|
acrxDynamicLinker->unlockApplication(pkt);
|
|
acrxDynamicLinker->registerAppMDIAware(pkt);
|
|
InitApplication();
|
|
break;
|
|
case AcRx::kUnloadAppMsg:
|
|
UnloadApplication();
|
|
break;
|
|
}
|
|
return AcRx::kRetOK;
|
|
}
|
|
|
|
void openSyncDocHelper(void *pData)
|
|
{
|
|
AcApDocument *pDoc = acDocManager->curDocument();
|
|
if (acDocManager->isApplicationContext())
|
|
{
|
|
acutPrintf(_T("\nSucess\n"));
|
|
acDocManager->appContextOpenDocument(g_sDwgPathName);
|
|
pDoc = acDocManager->curDocument();
|
|
acutPrintf(_T("\nERROR: %s\n"), pDoc->fileName());
|
|
AcApDocument *pDoc = acDocManager->curDocument();
|
|
//取消当前命令
|
|
HWND hdoc = acedGetAcadTextCmdLine()->m_hWnd;
|
|
if (pDoc!=NULL)
|
|
{
|
|
AcDbDatabase *pDb = pDoc->database();
|
|
AcDbObjectIdArray Ids;
|
|
pDb->purge(Ids);
|
|
if (Ids.logicalLength()>0)
|
|
AfxMessageBox(_T("清除垃圾块"));
|
|
for (int nLen = 0; nLen<Ids.logicalLength(); nLen++)
|
|
{
|
|
BaseFuncs::DeleteEnt(Ids[nLen]);
|
|
|
|
}
|
|
}
|
|
acDocManager->sendStringToExecute(pDoc, _T("blockIcon *"));
|
|
::SendMessage(hdoc, WM_CHAR, VK_RETURN, 0);
|
|
pDoc->cDoc()->SetModifiedFlag(FALSE);
|
|
acDocManager->sendStringToExecute(pDoc, _T("qsave "));
|
|
::SendMessage(hdoc, WM_CHAR, VK_RETURN, 0);
|
|
acDocManager->sendStringToExecute(pDoc, _T("close "));
|
|
::SendMessage(hdoc, WM_CHAR, VK_RETURN, 0);
|
|
acutPrintf(_T("\nOpened :%s.\n"), g_sDwgPathName);
|
|
}
|
|
else
|
|
acutPrintf(_T("\nERROR: %s\n"), pDoc->fileName());
|
|
}
|
|
|
|
void openSyncDoc(CString sPathName)
|
|
{
|
|
AcApDocument *pDoc = acDocManager->curDocument();
|
|
if (pDoc)
|
|
{
|
|
acDocManager->executeInApplicationContext(openSyncDocHelper, NULL);
|
|
}
|
|
}
|
|
|
|
void opendocFun()
|
|
{
|
|
openSyncDoc(g_sDwgPathName);
|
|
g_pDockPane->m_DockDialog.getListCtrl().DeleteAllItems();
|
|
g_pDockPane->m_DockDialog.AddItemToListCtrl(g_sDwgPathName);
|
|
acedGetAcadFrame()->ShowControlBar(g_pDockPane, TRUE, FALSE);
|
|
}
|
|
|
|
void tk_scgl();
|
|
void tk_swtk();
|
|
void tk_fmfj();
|
|
void tk_gdfj();
|
|
void tk_cyyb();
|
|
void tk_xtfj();
|
|
|
|
void InitApplication()
|
|
{
|
|
void AsdkHYCreateDC();
|
|
void UpdatePreview();
|
|
CoreTools::AddCommand(_T("SHSTK"), _T("tk_shtk"), _T("tk_shtk"), ACRX_CMD_TRANSPARENT | ACRX_CMD_USEPICKSET, AsdkHYCreateDC);
|
|
CoreTools::AddCommand(_T("SHSTK"), _T("tk_shup"), _T("tk_shup"), ACRX_CMD_TRANSPARENT | ACRX_CMD_USEPICKSET, UpdatePreview);
|
|
CoreTools::AddCommand(_T("SHSTK"), _T("tk_open"), _T("tk_open"), ACRX_CMD_TRANSPARENT | ACRX_CMD_USEPICKSET, opendocFun);
|
|
CoreTools::AddCommand(_T("SHSTK"), _T("tk_draw"), _T("tk_draw"), ACRX_CMD_TRANSPARENT | ACRX_CMD_USEPICKSET, BaseFuncs::DrawBlockFun);
|
|
CoreTools::AddCommand(_T("SHSTK"), _T("tk_scgl"), _T("tk_scgl"), ACRX_CMD_TRANSPARENT | ACRX_CMD_USEPICKSET, tk_scgl);
|
|
CoreTools::AddCommand(_T("SHSTK"), _T("tk_swtk"), _T("tk_swtk"), ACRX_CMD_TRANSPARENT | ACRX_CMD_USEPICKSET, tk_swtk);
|
|
|
|
CoreTools::AddCommand(_T("SHSTK"), _T("tk_fmfj"), _T("tk_fmfj"), ACRX_CMD_TRANSPARENT | ACRX_CMD_USEPICKSET, tk_fmfj);
|
|
CoreTools::AddCommand(_T("SHSTK"), _T("tk_gdfj"), _T("tk_gdfj"), ACRX_CMD_TRANSPARENT | ACRX_CMD_USEPICKSET, tk_gdfj);
|
|
CoreTools::AddCommand(_T("SHSTK"), _T("tk_cyyb"), _T("tk_cyyb"), ACRX_CMD_TRANSPARENT | ACRX_CMD_USEPICKSET, tk_cyyb);
|
|
CoreTools::AddCommand(_T("SHSTK"), _T("tk_xtfj"), _T("tk_xtfj"), ACRX_CMD_TRANSPARENT | ACRX_CMD_USEPICKSET, tk_xtfj);
|
|
g_pDocReactor = new AsdkDocManagerReactor();
|
|
}
|
|
|
|
|
|
void UnloadApplication()
|
|
{
|
|
if (g_pDocReactor != NULL)
|
|
delete g_pDocReactor;
|
|
if (g_TkcsDlg)
|
|
{
|
|
g_TkcsDlg->DestroyWindow();
|
|
g_TkcsDlg = NULL;
|
|
}
|
|
}
|
|
|
|
void ShowDockPane(BOOL bShow)
|
|
{
|
|
if (g_pDockPane!=NULL)
|
|
{
|
|
acedGetAcadFrame()->ShowControlBar(g_pDockPane, bShow, FALSE);
|
|
|
|
}
|
|
}
|
|
void AsdkHYCreateDC()
|
|
{
|
|
BaseFuncs::OpenTkAndSelectByName(NULL, NULL);
|
|
}
|
|
|
|
void tk_scgl()
|
|
{
|
|
BaseFuncs::OpenTkAndSelectByName(_T("水池库"), _T("水处理构筑物.dwg"));
|
|
}
|
|
|
|
void tk_swtk()
|
|
{
|
|
BaseFuncs::OpenTkAndSelectByName(_T("室外图库"), _T("树.dwg"));
|
|
}
|
|
|
|
// 阀门阀件
|
|
void tk_fmfj()
|
|
{
|
|
BaseFuncs::OpenTkAndSelectByName(_T("阀门"), _T("平面阀门.dwg"));
|
|
}
|
|
|
|
// 管道附件
|
|
void tk_gdfj()
|
|
{
|
|
BaseFuncs::OpenTkAndSelectByName(_T("阀门"), _T("平面附件.dwg"));
|
|
}
|
|
|
|
// 常用仪表
|
|
void tk_cyyb()
|
|
{
|
|
BaseFuncs::OpenTkAndSelectByName(_T("阀门"), _T("平面仪表.dwg"));
|
|
}
|
|
|
|
// 系统附件
|
|
void tk_xtfj()
|
|
{
|
|
BaseFuncs::OpenTkAndSelectByName(_T("阀门"), _T("系统附件.dwg"));
|
|
}
|
|
|
|
BOOL IsDockPaneCreate()
|
|
{
|
|
if (g_pDockPane==NULL)
|
|
return FALSE;
|
|
return TRUE;
|
|
}
|
|
|
|
extern CString g_sDescDwg;
|
|
extern AcDbObjectIdArray g_BlockIds;
|
|
void UpdatePreview()
|
|
{
|
|
SHacedCommand(RTSTR, _T("blockIcon"), RTSTR, _T(""), 0);
|
|
BaseFuncs::dist_blkrcd_insert(g_sDescDwg, g_BlockIds);
|
|
g_pDockPane->m_DockDialog.getListCtrl().DeleteAllItems();
|
|
g_pDockPane->m_DockDialog.AddItemToListCtrl(g_sDescDwg);
|
|
g_pDockPane->m_DockDialog.getListCtrl().RedrawWindow();
|
|
}
|
|
|
|
|
|
|