Files
envi-code/SourceCode/Code2026/shsTK/shsTK.cpp
T
2026-09-28 15:28:50 +08:00

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