#include "StdAfx.h" #include "StdArx.h" #include "resource.h" #include "AecDbEntityBaseEx.h" #include "AecDbText.h" #include "AecDbMText.h" #include "AecDbDimension.h" #include "AecDbDimension_old.h" #include "AecDbSymbNorthThumb.h" #include "AecDbRadiusDim.h" #include "AecDbSymbComposing.h" #include "AecDbSymbDrawingIndex.h" #include "AecDbSymbIndexPointer.h" #include "AecDbSymbRupture.h" #include "AecDbSymbSymmetry.h" #include "AecDbSymbMultiLeader.h" #include "AecDbSymbElevation.h" #include "AecDbSymbModi.h" #include "AecDbSymbCoord.h" #include "AecDbSymbArrow.h" #include "AecDbSymbSection.h" #include "AecDbDrawingName.h" #include "DbPipe.h" #include "DbWell.h" #include "DbPool.h" #include "HDbEquipment.h" #include "DbWellDim.h" #include "DbRect.h" #include "DbStake.h" #include "DbVerticalSection.h" #include "DbVerticalSectionFeed.h" #include "dbGridSheet.h" #include "DbPipeValve.h" #include "DbFireExtinguisher.h" HINSTANCE _hdllInstance = NULL ; #ifndef _ttof #define _ttof(pszVal) _tcstod((pszVal), NULL) #endif void AddCommand(const TCHAR* cmdGroup, const TCHAR* cmdInt, const TCHAR* cmdLoc, const int cmdFlags, const AcRxFunctionPtr cmdProc, const int idLocal = -1); void InitApplication(); void UnloadApplication(); void DI_LoadConfig(); AC_IMPLEMENT_EXTENSION_MODULE(EarthWormDLL); extern "C" BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpReserved*/) { if (dwReason == DLL_PROCESS_ATTACH) { _hdllInstance = hInstance; EarthWormDLL.AttachInstance(hInstance); } else if (dwReason == DLL_PROCESS_DETACH) { EarthWormDLL.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; case AcRx::kLoadDwgMsg: DI_LoadConfig(); break; case AcRx::kUnloadDwgMsg: GlobalFunc::setDimConfigReloadFlag(FALSE); break; } return AcRx::kRetOK; } #define ADD_CMD(cmd, func) AddCommand(_T("SH_DIM"), _T(#cmd), _T(#cmd), ACRX_CMD_TRANSPARENT | ACRX_CMD_USEPICKSET, func) #define ADD_CMD_EX(cmd, func)\ void func();\ AddCommand(_T("SH_DIM"), _T(#cmd), _T(#cmd), ACRX_CMD_TRANSPARENT | ACRX_CMD_USEPICKSET, func) #if ARX > 22 extern bool AecGlobalMsgHook(MSG *msg); #else extern BOOL AecGlobalMsgHook(MSG *msg); #endif static BOOL g_bHookMSG = FALSE; void InitApplication() { AecXDbEntityBaseEx::rxInit(); AecXDbCurveBaseEx::rxInit(); AecXDbText::rxInit(); AecXDbMText::rxInit(); AecXDbSymbWithText::rxInit(); AecXDbRadiusDim::rxInit(); AecDbDimension::rxInit(); AecXDbDimension_Old::rxInit(); AecXDbSymbNorthThumb::rxInit(); AecXDbSymbComposing::rxInit(); AecXDbSymbDrawingIndex::rxInit(); AecXDbSymbIndexPointer::rxInit(); AecXDbSymbRupture::rxInit(); AecXDbSymbSymmetry::rxInit(); AecXDbSymbMultiLeader::rxInit(); AecXDbSymbElevation::rxInit(); AecXDbSymbModi::rxInit(); AecXDbSymbCoord::rxInit(); AecXDbSymbArrow::rxInit(); AecXDbSymbSection::rxInit(); AecXDbDrawingName::rxInit(); CDbSheet::rxInit(); CDbRect::rxInit(); CDbVerticalSection::rxInit(); CDbVerticalSectionFeed::rxInit(); CDbWellDim::rxInit(); CDbStake::rxInit(); CDbPipeAttachment::rxInit(); CDbPipeLabel::rxInit(); CDbPipeText::rxInit(); CDbPipePrototype::rxInit(); CDbPipeNode::rxInit(); CDbPipe::rxInit(); CHDbEquipment::rxInit(); CDbEquipment::rxInit(); CDbPool::rxInit(); AecXDbWell::rxInit(); CDbFireExtinguisher::rxInit(); CDbPipeValve::rxInit(); extern int DBL_AEC_CHICUNBIAOZHU(AcDbObjectId id); AecDbDimension::SetEditMethod(DBL_AEC_CHICUNBIAOZHU); acrxBuildClassHierarchy(); //acrxRegisterService(_T("SH_DIM")); _tcscpy(g_Option::instance().g_sDwbPath, GlobalFunc::GetRootDir() + _T("DWB\\")); void InitLayers(BOOL bTrue); void InitTextStyles(BOOL bTrue); InitLayers(TRUE); //给层分配字符串空间 InitTextStyles(TRUE);// 初始化文字样式变量,sg add 101229 g_bHookMSG = acedRegisterFilterWinMsg(AecGlobalMsgHook); #pragma region command // 半径标注 void DI_Radius(); ADD_CMD(DI_BJBZ, DI_Radius); // 直径标注 void DI_Diameter(); ADD_CMD(DI_ZJBZ, DI_Diameter); // 载入配置 ADD_CMD(DI_ZRPZ, DI_LoadConfig); // 标注设置 void DI_Option(); ADD_CMD(DI_BZSZ, DI_Option); // 逐点标注 void DimContinue(); ADD_CMD(DI_ZDBZ, DimContinue); // 角度标注 void DimAngle(); ADD_CMD(DI_JDBZ, DimAngle); // 弧度标注 void DimArcLen(); ADD_CMD(DI_HXBZ, DimArcLen); // 快速标注 void QuickDim(); ADD_CMD(DI_KSBZ, QuickDim); // 画指北针 void SymbNorthThumb(); void DBL_AEC_ZHIBEIZHEN(); ADD_CMD(DI_HZBZ, SymbNorthThumb); ADD_CMD(DBL_AEC_ZHIBEIZHEN, DBL_AEC_ZHIBEIZHEN); // 画对称轴 void SymbSymmetry(); void DBL_AEC_DUICHENZHOU(); ADD_CMD(DI_HDCZ, SymbSymmetry); ADD_CMD(DBL_AEC_DUICHENZHOU, DBL_AEC_DUICHENZHOU); // 绘折断线 void RuptureLine(); void DBL_AEC_ZHEDUANXIAN(); ADD_CMD(DI_HZDX, RuptureLine); ADD_CMD(DBL_AEC_ZHEDUANXIAN, DBL_AEC_ZHEDUANXIAN); // 剖切符号 void SymbSection(); void DBL_AEC_POQIE(); ADD_CMD(DI_PQFH, SymbSection); ADD_CMD(DBL_AEC_POQIE, DBL_AEC_POQIE); // 箭头引注 void SymbArrow(); void DBL_AEC_JIANTOUYINZHU(); ADD_CMD(DI_JTYZ, SymbArrow); ADD_CMD(DBL_AEC_JIANTOUYINZHU, DBL_AEC_JIANTOUYINZHU); // 坐标标注 void SymbCoord(); ADD_CMD(DI_ZBBZ, SymbCoord); // 标高标注 void SymbElev3(); void DBL_AEC_BIAOGAOBIAOZHU(); ADD_CMD(DI_BGBZ, SymbElev3); ADD_CMD(DBL_AEC_BIAOGAOBIAOZHU, DBL_AEC_BIAOGAOBIAOZHU); // 引出标注 void SymbLeader(); void DBL_AEC_YINCHUBIAOZU(); ADD_CMD(DI_YCBZ, SymbLeader); ADD_CMD(DBL_AEC_YINCHUBIAOZU, DBL_AEC_YINCHUBIAOZU); // 绘制云线 void DrawCloud(); void DBL_AEC_YUNXIAN(); ADD_CMD(DI_HZYX, DrawCloud); ADD_CMD(DBL_AEC_YUNXIAN, DBL_AEC_YUNXIAN); // 图名标注 void SymbDrawingName(); void DBL_AEC_TUMINGBIAOZHU(); ADD_CMD(DI_TMBZ, SymbDrawingName); ADD_CMD(DBL_AEC_TUMINGBIAOZHU, DBL_AEC_TUMINGBIAOZHU); // 索引图名 void SymbIndex(); void DBL_AEC_SUOYINTUMING(); ADD_CMD(DI_SYTM, SymbIndex); ADD_CMD(DBL_AEC_SUOYINTUMING, DBL_AEC_SUOYINTUMING); // 索引符号 void SymbIndexPointer(); void DBL_AEC_SUOYINFUHAO(); ADD_CMD(DI_SYFH, SymbIndexPointer); ADD_CMD(DBL_AEC_SUOYINFUHAO, DBL_AEC_SUOYINFUHAO); // 做法标注 void SymbComposing(); void DBL_AEC_ZUOFABIAOZHU(); ADD_CMD(DI_ZFBZ, SymbComposing); ADD_CMD(DBL_AEC_ZUOFABIAOZHU, DBL_AEC_ZUOFABIAOZHU); // 裁剪延伸 void DimTrimOrExt(); ADD_CMD(DI_CJYS, DimTrimOrExt); // 取消尺寸 void RemoveDimSeg(); ADD_CMD(DI_QXCC, RemoveDimSeg); // 连接尺寸 void MergeDim(); ADD_CMD(DI_LJCC, MergeDim); // 拆分区间 void DivideDimSeg(); ADD_CMD(DI_CFQJ, DivideDimSeg); // 合并区间 void ConbineDim(); ADD_CMD(DI_HBQJ, ConbineDim); // 尺寸打断 void DimBreak(); ADD_CMD(DI_CCDD, DimBreak); // 等分区间 void AverageDim(); ADD_CMD(DI_DFQJ, AverageDim); // 等式区间 void DivideDim(); ADD_CMD(DI_DSQJ, DivideDim); // 尺寸等距 void DimIsometry(); ADD_CMD(DI_CCDJ, DimIsometry); // 对齐标注 void ArrangeDim(); ADD_CMD(DI_DQBZ, SymbComposing); // 增补尺寸 void BreakDim(); ADD_CMD(DI_ZBCC, BreakDim); // 更改文字 void DimChText(); ADD_CMD(DI_GGWZ, DimChText); // 尺寸转换 void DI_CCZH(); ADD_CMD(DI_CCZH, DI_CCZH); // 任意喷头 void SprinklerByFree(); ADD_CMD(DI_RYPT, SprinklerByFree); // 交点喷头 void SprinklerByInter(); ADD_CMD(DI_JDPT, SprinklerByInter); // 直线喷头 void SprinklerByLine(); ADD_CMD(DI_ZXPT, SprinklerByLine); // 弧线喷头 void SprinklerByArc(); ADD_CMD(DI_HXPT, SprinklerByArc); // 矩形喷头 void SprinklerByRect(); ADD_CMD(DI_JXPT, SprinklerByRect); // 扇形喷头 void SprinklerBySector(); ADD_CMD(DI_SXPT, SprinklerBySector); // 等距喷头 void SprinklerIsometry(); ADD_CMD(DI_DJPT, SprinklerIsometry); // 修改喷头 void ModifySprinkler(); ADD_CMD(DI_XGPT, ModifySprinkler); // 喷淋管径 void DimPipeDnFromSprink(); ADD_CMD(DI_PLGJ, DimPipeDnFromSprink); // 布消火栓 void InsPlanHydrant(); ADD_CMD(DI_BXHS, InsPlanHydrant); // 布灭火器 void LayFireExtinguisher(); ADD_CMD(DI_BMHQ, LayFireExtinguisher); // 连消火栓 void LinkHydrantNew(); ADD_CMD(DI_LXHS, LinkHydrantNew); // 显示保护半径 void ShowProtectRadius(); ADD_CMD(DI_XBHJ, ShowProtectRadius); // 最远路径 void FindLongPath(); ADD_CMD(DI_ZYLJ, FindLongPath); // 双击喷头 void DBL_AEC_ZT_EQUIPMENT(); ADD_CMD(DBL_AEC_ZT_EQUIPMENT, DBL_AEC_ZT_EQUIPMENT); // 双击灭火器 void DBL_AEC_ZT_FIRE_EXTINGUISHER(); ADD_CMD(DBL_AEC_ZT_FIRE_EXTINGUISHER, DBL_AEC_ZT_FIRE_EXTINGUISHER); // 布置井 void InsWellCmd(); ADD_CMD(DI_BZJ, InsWellCmd); // 给水附件 void InsFeedAccessory(); ADD_CMD(DI_GSFJ, InsFeedAccessory); // 排水附件 void InsDrainAccessory(); ADD_CMD(DI_PSFJ, InsDrainAccessory); // 给水计算 void FeedCalcMan(); ADD_CMD(DI_GSJS, FeedCalcMan); // 消防计算 void HydrantCalc(); ADD_CMD(DI_XFJS, HydrantCalc); // 喷淋计算 void SprinklerCalc(); ADD_CMD(DI_PLJS, SprinklerCalc); ADD_CMD_EX(DI_YSLJ, Gully2Well); // 雨水连井 2004.5.31 ADD_CMD_EX(DI_GDBZ, DimPipeElevation); // 管底标注 2006.5.17 ADD_CMD_EX(DI_JBZ, WellDim); // 井标注 2004.3.12 ADD_CMD_EX(DI_CHLJ, ExtendOutdoorPipe); // 出户连井 2005.10.21 ADD_CMD_EX(DI_SSJ, FindWell); // 搜 索 井 2005.10.10 //ADD_CMD(DI_SWTK, OutLib); // 室外图库 2004.2.27 //ADD_CMD(DI_SCGL, PoolLib); // 水池管理 2004.2.27 ADD_CMD_EX(DI_DMBG, DefineWellEle); // 地面标高 2004.8.8 ADD_CMD_EX(DI_JHJY, MinusWellSerial); // 井号减一 2007.2.5 ADD_CMD_EX(DI_JHZY, PlusWellSerial); // 井号增一 2007.2.5 ADD_CMD_EX(DI_ZHJBh, BraWellSerialCmd); // 支井编号 2006.11.16 ADD_CMD_EX(DI_JBH, WellSerialCmd); // 井编号 2004.8.19 ADD_CMD_EX(DI_JCJC, CheckPipeInter); // 交叉检查 2004.7.30 ADD_CMD_EX(DI_TFJS, CalcEarthwork); // 土方计算 2006.10.31 ADD_CMD_EX(DI_WJLL, SetDirtWellQ); // 污井流量 2005.4.1 ADD_CMD_EX(DI_ZDBT, SetVerticalSectionHead);// 设置表头 2005.11.23 ADD_CMD_EX(DI_XGBT, ModifyVerticalSectionHead);// 修改表头 2007.1.19 ADD_CMD_EX(DI_YFWE, SplitVerticalSection); //一分为二 2005.10.18 ADD_CMD_EX(DI_DYXG, ModifyVSData); // 修改管井 2005.12.14 ADD_CMD_EX(DI_BZC, InsOutDoorPoolCmd); // 布 置 池 2004.3.4 ADD_CMD_EX(DI_SWXF, InsOutHydrant); // 室外消火栓 2004.3.3 ADD_CMD_EX(DI_YSK, InsGully); // 雨水口 2004.3.1 ADD_CMD_EX(DI_JZB, DimWellCoord); // 井坐标 2007.10.12 ADD_CMD_EX(DI_JZBB, WellCoordSheet); // 井坐标表 2007.10.15 ADD_CMD_EX(DI_PMS, DrawTreeCmd); // 平面树 2004.3.16 ADD_CMD_EX(DI_BZJ, InsWellCmd); // 布 置 井 2004.3.3 ADD_CMD_EX(DI_CJGC, CollectElevWell); // 采集高程 2008.3.3 ADD_CMD_EX(DI_SCBZ, EraseDim); // 删除标注 2008.05.09 ADD_CMD_EX(DI_YXBZ, InsStakeAlongLine); // 沿线布桩 2008.05.28 ADD_CMD_EX(DI_RYBZ, InsStakeRandom); // 任意布桩 2008.06.03 //ADD_CMD_EX(DI_HZFG, DrawPipeCanal); // 绘制方沟 2009.03.12 ADD_CMD_EX(DI_JDBH, IntersectPointNumber); // 交点编号 2010.3.11 cet ADD_CMD_EX(DI_CJB, PerpeDistanceTable); // 垂距表 2010.3.15 cet ADD_CMD_EX(DI_HDMT, HorizontalSection); // 横断面图 2010.4.19 cet ADD_CMD_EX(DI_BGJC, ElevationCheck); // 标高检查 2011.9.13 cet ADD_CMD_EX(DI_DBGX, EvadeUpdating); // 躲避更新 2011.9.27 cet ADD_CMD_EX(DI_CXGX, EditOutdoorPipe); // 查修管线 2011.10.25 zxl ADD_CMD_EX(DI_XGJ, ModifyWell); // 修改井 2011.11.23 zxl ADD_CMD_EX(DI_BGJS, ElevationCalc); // 标高计算 2010.12.08 cet ADD_CMD_EX(DI_ZDBG, ModifyVericalSectionEle);//纵断标高 2005.10.17 ADD_CMD_EX(DI_ZDMT, VerticalSection); // 纵断面图 2004.3.11 ADD_CMD_EX(DI_XQWS, DirtWellCalc); // 小区污水 2005.4.1 ADD_CMD_EX(DI_XGBL, DI_XGBL); #pragma endregion } void UnloadApplication() { deleteAcRxClass(CDbPipeValve::desc()); deleteAcRxClass(CDbFireExtinguisher::desc()); deleteAcRxClass(CDbPool::desc()); deleteAcRxClass(AecXDbWell::desc()); deleteAcRxClass(CDbEquipment::desc()); deleteAcRxClass(CHDbEquipment::desc()); deleteAcRxClass(CDbPipe::desc()); deleteAcRxClass(CDbPipeNode::desc()); deleteAcRxClass(CDbPipePrototype::desc()); deleteAcRxClass(CDbPipeText::desc()); deleteAcRxClass(CDbPipeLabel::desc()); deleteAcRxClass(CDbPipeAttachment::desc()); deleteAcRxClass(CDbWellDim::desc()); deleteAcRxClass(CDbStake::desc()); deleteAcRxClass(CDbSheet::desc()); deleteAcRxClass(CDbRect::desc()); deleteAcRxClass(CDbVerticalSection::desc()); deleteAcRxClass(CDbVerticalSectionFeed::desc()); deleteAcRxClass(AecXDbRadiusDim::desc()); deleteAcRxClass(AecDbDimension::desc()); deleteAcRxClass(AecXDbDimension_Old::desc()); deleteAcRxClass(AecXDbSymbNorthThumb::desc()); deleteAcRxClass(AecXDbSymbComposing::desc()); deleteAcRxClass(AecXDbSymbDrawingIndex::desc()); deleteAcRxClass(AecXDbSymbIndexPointer::desc()); deleteAcRxClass(AecXDbSymbRupture::desc()); deleteAcRxClass(AecXDbSymbSymmetry::desc()); deleteAcRxClass(AecXDbSymbMultiLeader::desc()); deleteAcRxClass(AecXDbSymbElevation::desc()); deleteAcRxClass(AecXDbSymbModi::desc()); deleteAcRxClass(AecXDbSymbCoord::desc()); deleteAcRxClass(AecXDbSymbArrow::desc()); deleteAcRxClass(AecXDbSymbSection::desc()); deleteAcRxClass(AecXDbDrawingName::desc()); deleteAcRxClass(AecXDbSymbWithText::desc()); deleteAcRxClass(AecXDbMText::desc()); deleteAcRxClass(AecXDbText::desc()); deleteAcRxClass(AecXDbEntityBaseEx::desc()); deleteAcRxClass(AecXDbCurveBaseEx::desc()); deleteAcRxClass(AecXDbCurveBaseEx::desc()); AecDbDimension::SetEditMethod(NULL); acedRegCmds->removeGroup(_T("SH_DIM")); if (g_bHookMSG) { acedRemoveFilterWinMsg(AecGlobalMsgHook); g_bHookMSG = FALSE; } } void AddCommand(const TCHAR* cmdGroup, const TCHAR* cmdInt, const TCHAR* cmdLoc, const int cmdFlags, const AcRxFunctionPtr cmdProc, const int idLocal) { TCHAR cmdLocRes[65]; if (idLocal != -1) { ::LoadString(_hdllInstance, idLocal, cmdLocRes, 64); acedRegCmds->addCommand(cmdGroup, cmdInt, cmdLocRes, cmdFlags, cmdProc); } else { acedRegCmds->addCommand(cmdGroup, cmdInt, cmdLoc, cmdFlags, cmdProc); } }