#include "StdAfx.h" #include "StdArx.h" #include "resource.h" #include #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; nLensendStringToExecute(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(); }