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

228 lines
7.9 KiB
C++

#include "stdafx.h"
#include "rxregsvc.h"
#include "TDbPipeMultDim.h"
#include "DbVPipeDim.h"
#include "DbMTextNew.h"
HINSTANCE _hdllInstance = NULL ;
AC_IMPLEMENT_EXTENSION_MODULE(arxmfcDLL);
extern void InitAol(const TCHAR *szAppName);
extern "C"
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpReserved*/)
{
if (dwReason == DLL_PROCESS_ATTACH)
{
_hdllInstance = hInstance;
arxmfcDLL.AttachInstance(hInstance);
// Insert this DLL into the resource chain
// new CDynLinkLibrary(arxmfcDLL);
//Init for AOL
InitAol(TCHXD);
InitGeLib();
//InitAcUiDLL();
}
else if (dwReason == DLL_PROCESS_DETACH)
{
arxmfcDLL.DetachInstance();
}
return TRUE;
}
// 以下是命令函数
extern void LeaderDim(); // 引出标注
extern void DimSymbElevation(); // 单注标高
extern void SetPipeElevation(); // 单管标高
extern void DimSanitary(); // 标注洁具
extern void PipeSerialSort(); // 入户排序
extern void VPipeSerialSort(); // 立管排序
extern void DimPipeSerial(); // 入户管号
extern void DimPipeLength(); // 标注管长
extern void DimPipeGradient(); // 管道坡度
extern void MirrorDimCmd(); // 标注镜像
extern void MoveDnDimCmd(); // 管径移动
extern void ResetDimPosition(); // 标注复位
extern void DimSinglePipeDnRadius(); // 单管管径
extern void DimPipeDnRadius(); // 管径标注
extern void MultiPipeDimDn(); // 多管标注
extern void DimPipeDnFromSprink(); // 喷淋管径
extern void ModidyMultiDimDn(); // 多管标注修改
extern void EditElevation(); // 修改标高
extern void PlusPipeSerial(); // 编号增一
extern void MinusPipeSerial(); // 编号减一
extern void ShowPipeElevation(); // 显示标高
extern void ChangePipeDirection(); // 改变流向
extern void UpdateToolBar(); // 工具条升级
extern void DimContinue(); // 逐点标注
extern void TextMLine(); // 多行文字
extern void UpdateToolBarCmd(); // 工具条升级
extern void test();//test
// 菜单开关
extern int GetPipeEleState(); // 标高读取
extern int SetPipeEleState(); // 标高设置
// 编辑函数
int EditMutiPipeDim(AcDbObjectId id);
int EditVPipeDim(AcDbObjectId id);
int EditLeaderDim(AcDbObjectId id);
int EditMutiText(AcDbObjectId id);
//int EditFloorRect(AcDbObjectId id); // cet 2013.1.8 add
static AecObjectEditMethod g_pOldEditMutiPipeDim=NULL;
static AecObjectEditMethod g_pOldEditVPipeDim=NULL;
static AecObjectEditMethod g_pOldEditLeaderDim = NULL;
static AecObjectEditMethod g_pOldEditMutiText = NULL;
//static AecObjectEditMethod g_pOldEditFloorRect = NULL; // cet 2013.1.8 add
static ArxCommandTable g_acedCmdTable[] = {
//{_T("ycbz"), LeaderDim, ACRX_CMD_MODAL| ACRX_CMD_USEPICKSET }, // 引出标注
//{_T("dzbg"), DimSymbElevation, ACRX_CMD_MODAL| ACRX_CMD_USEPICKSET }, // 单注标高 2003.11.20
{_T("dgbg"), SetPipeElevation, ACRX_CMD_MODAL| ACRX_CMD_USEPICKSET }, // 单管标高 2003.11.17
//{_T("bzjj"), DimSanitary, ACRX_CMD_MODAL| ACRX_CMD_USEPICKSET }, // 标注洁具 2003.11.11
//{_T("rhpx"), PipeSerialSort, ACRX_CMD_MODAL| ACRX_CMD_USEPICKSET }, // 入户排序 2006.11.29
//{_T("lgpx"), VPipeSerialSort, ACRX_CMD_MODAL| ACRX_CMD_USEPICKSET }, // 立管排序 2007.1.31
//{_T("rhgh"), DimPipeSerial, ACRX_CMD_MODAL| ACRX_CMD_USEPICKSET }, // 入户管号 2003.11.6
{_T("gcbz"), DimPipeLength, ACRX_CMD_MODAL| ACRX_CMD_USEPICKSET }, // 标注管长 2007.9.13
{_T("gdpd"), DimPipeGradient, ACRX_CMD_MODAL| ACRX_CMD_USEPICKSET }, // 管道坡度 2004.3.10
{_T("bzjx"), MirrorDimCmd, ACRX_CMD_MODAL| ACRX_CMD_USEPICKSET }, // 标注镜像 2009.4.20
{_T("gjyd"), MoveDnDimCmd, ACRX_CMD_MODAL| ACRX_CMD_USEPICKSET }, // 管径移动 2008.10.27
{_T("bzfw"), ResetDimPosition, ACRX_CMD_MODAL| ACRX_CMD_USEPICKSET }, // 标注复位 2004.6.22
{_T("dggj"), DimSinglePipeDnRadius, ACRX_CMD_MODAL| ACRX_CMD_USEPICKSET }, // 单管管径 2006.12.19
{_T("gjbz"), DimPipeDnRadius, ACRX_CMD_MODAL| ACRX_CMD_USEPICKSET }, // 管径标注 2003.11.19
{_T("dgbz"), MultiPipeDimDn, ACRX_CMD_MODAL| ACRX_CMD_USEPICKSET }, // 多管标注 2004.3.19
//{_T("plgj"), DimPipeDnFromSprink, ACRX_CMD_MODAL| ACRX_CMD_USEPICKSET }, // 喷淋管径 2003.11.20
//{_T("dbxg"), ModidyMultiDimDn, ACRX_CMD_MODAL| ACRX_CMD_USEPICKSET }, // 多管标注修改2004.8.30
//{_T("xgbg"), EditElevation, ACRX_CMD_MODAL| ACRX_CMD_USEPICKSET }, // 修改标高 2003.11.24
//{_T("bhzy"), PlusPipeSerial, ACRX_CMD_MODAL| ACRX_CMD_USEPICKSET }, // 编号增一 2004.10.14
//{_T("bhjy"), MinusPipeSerial, ACRX_CMD_MODAL| ACRX_CMD_USEPICKSET }, // 编号减一 2004.10.14
//{_T("xsbg"), ShowPipeElevation, ACRX_CMD_MODAL| ACRX_CMD_USEPICKSET }, // 显示标高 2003.12.5
//{_T("gblx"), ChangePipeDirection, ACRX_CMD_MODAL| ACRX_CMD_USEPICKSET }, // 改变流向 2005.3.17
//{_T("gjtsj"), UpdateToolBar, ACRX_CMD_MODAL| ACRX_CMD_USEPICKSET }, // 工具条升级 2012.07.10
//{_T("zdbz"), DimContinue, ACRX_CMD_MODAL| ACRX_CMD_USEPICKSET }, // 逐点标注 2012.09.04 从tch_anotate移植而来
//{_T("dhwz2"), TextMLine, ACRX_CMD_MODAL| ACRX_CMD_USEPICKSET }, // 多行文字
//{_T("gjtsj2"),UpdateToolBarCmd, ACRX_CMD_MODAL| ACRX_CMD_USEPICKSET }, // 新工具条升级2013.03.28
};
void OnLoadApp()
{
for(int i=0; i<ELEMENTS(g_acedCmdTable); i++) {
acedRegCmds->addCommand(_T("SHWF_ANOTATE"), g_acedCmdTable[i].szCmdGlobal,
g_acedCmdTable[i].szCmdGlobal, g_acedCmdTable[i].nCmdFlag, g_acedCmdTable[i].pFun);
}
g_pOldEditMutiPipeDim=TDbPipeMultDim::SetEditMethod(EditMutiPipeDim);
g_pOldEditVPipeDim = TDbVPipeDim::SetEditMethod(EditVPipeDim);
g_pOldEditLeaderDim = TDbSymbMultiLeader::SetEditMethod(EditLeaderDim);
// TDbMTextNew::SetEditMethod(NULL);
g_pOldEditMutiText = TDbMTextNew::SetEditMethod(EditMutiText);
// g_pOldEditFloorRect = TDbFloorRect::SetEditMethod(EditFloorRect); // cet 2013.1.8 add
AfxInitRichEdit();// zxl 2013.01.29 add 提供CRICHEDITCTRL支持
}
void OnUnloadApp()
{
acedRegCmds->removeGroup(_T("SHWF_ANOTATE"));
TDbPipeMultDim::SetEditMethod(g_pOldEditMutiPipeDim);
TDbVPipeDim::SetEditMethod(g_pOldEditVPipeDim);
TDbSymbMultiLeader::SetEditMethod(g_pOldEditLeaderDim);
TDbMTextNew::SetEditMethod(g_pOldEditMutiText);
// TDbFloorRect::SetEditMethod(g_pOldEditFloorRect); // cet 2013.1.8 add
}
static extern_fun cmdtab[] = {
{_T("GetPipeEleState"), GetPipeEleState},
{_T("SetPipeEleState"), SetPipeEleState},
};
int OnDoFunc()
{
int cindex;
cindex = ads_getfuncode();
int nRet=RTNORM;
if (cindex >= 0 && cindex < ELEMENTS(cmdtab)) {
if(cmdtab[cindex].cmdname[1]==_T(':')) {
(*cmdtab[cindex].cmdfunc)();
ads_retvoid();
} else {
(*cmdtab[cindex].cmdfunc)();
}
nRet = RTNORM;
}
else nRet=RTERROR;
return nRet;
}
int OnDwgLoaded()
{
if(g_nProductId != 8)
return RTNORM;
for(int i=0;i<ELEMENTS(cmdtab); i++)
{
ads_defun(cmdtab[i].cmdname,i);
}
return RTNORM;
}
//////////////////////////////////////////////////////////////
//
// Entry point
//
//////////////////////////////////////////////////////////////
extern "C" AcRx::AppRetCode acrxEntryPoint(AcRx::AppMsgCode msg, void* pkt)
{
switch (msg) {
case AcRx::kInitAppMsg:
acrxUnlockApplication(pkt);
acrxDynamicLinker->registerAppMDIAware(pkt);
// InitModule(_hdllInstance, DLL_PROCESS_ATTACH, NULL);
OnLoadApp();
break;
case AcRx::kLoadDwgMsg:
OnDwgLoaded();
break;
case AcRx::kInvkSubrMsg:
OnDoFunc();
break;
case AcRx::kSaveMsg:
break;
case AcRx::kUnloadDwgMsg: //Bug no message coming
break;
case AcRx::kInitDialogMsg:
break;
case AcRx::kUnloadAppMsg:
OnUnloadApp();
// InitModule(_hdllInstance, DLL_PROCESS_DETACH, NULL);
break;
}
return AcRx::kRetOK;
}