#include "StdAfx.h" #include "StdArx.h" #include "AecUnknownContext.h" #include "AecUnknownSubEntityTraits.h" #include "AecUnknownWorldDraw.h" #include "AecUnknownWorldGeometry.h" #include "GJYXJMDlg.h" #include "ShowZDInfDlg.h" #include "CoreTools.h" HINSTANCE _hdllInstance = NULL ; extern CGJYXJMDlg* g_wndJYXJMDlg; extern CShowZDInfDlg* g_ShowZDInfdlg; #ifndef _ttof #define _ttof(pszVal) _tcstod((pszVal), NULL) #endif //{{AFX_ARX_MSG void InitApplication(); void UnloadApplication(); //}}AFX_ARX_MSG //{{AFX_ARX_ADDIN_FUNCS //}}AFX_ARX_ADDIN_FUNCS // Define the sole extension module object. AC_IMPLEMENT_EXTENSION_MODULE(EarthWormDLL); namespace { bool isModuleLoaded(LPCTSTR str) { AcDbVoidPtrArray* pApps = reinterpret_cast(acrxLoadedApps()); if (pApps == NULL) return false; bool bFound = false; for (int i = 0; i < pApps->length(); i++) { if (_tcsicmp(reinterpret_cast(pApps->at(i)), str) == 0) { bFound = true; break; } } for (; pApps->length() > 0;) { delete reinterpret_cast(pApps->at(0)); pApps->removeAt(0); } delete pApps; return bFound; } } 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; } // ObjectARX EntryPoint extern "C" AcRx::AppRetCode acrxEntryPoint(AcRx::AppMsgCode msg, void* pkt) { switch (msg) { case AcRx::kInitAppMsg: // Comment out the following line if your // application should be locked into memory acrxDynamicLinker->unlockApplication(pkt); acrxDynamicLinker->registerAppMDIAware(pkt); InitApplication(); break; case AcRx::kUnloadAppMsg: UnloadApplication(); break; } return AcRx::kRetOK; } #define ADD_CMD(cmd, func) CoreTools::AddCommand(_T("KTEARTHWORMCORE"), _T(#cmd), _T(#cmd), ACRX_CMD_TRANSPARENT | ACRX_CMD_USEPICKSET, func) void InitApplication() { AecUnknownContext::rxInit(); AecUnknownSubEntityTraits::rxInit(); AecUnknownWorldDraw::rxInit(); AecUnknownWorldGeometry::rxInit(); //CCivilDbPipelinePipe::rxInit(); acrxBuildClassHierarchy(); ADD_CMD(EW_CSSZ, EW_CSSZCmdFnc); //测试管廊 ADD_CMD(EW_CSGL, KTNewEarthWormDemo); //横断图库 ADD_CMD(EW_HDTK, EW_HDTKCmdFnc); //绘制管廊 ADD_CMD(EW_HZGL, EW_HZGLCmdFnc); //梯度分段 ADD_CMD(EW_TDFD, EW_TDFDCmdFnc); //修改梯度 ADD_CMD(EW_XGTD, EW_XGTDCmdFnc); //插变形缝 ADD_CMD(EW_CBXF, EW_CBXFCmdFnc); //加集水井 ADD_CMD(EW_JJSJ, EW_JJSJCmdFnc); //加排水沟 ADD_CMD(EW_JPSG, EW_JPSGCmdFnc); //放置凸台 ADD_CMD(EW_TJTT, EW_FZTTCmdFnc); //管材料口 ADD_CMD(EW_GTLK, EW_GTLKCmdFnc); //热力投料口 ADD_CMD(EW_RTLK, EW_RTLKCmdFnc); //开通风口 ADD_CMD(EW_KTFK, EW_KTFKCmdFnc); //线缆料口 ADD_CMD(EW_XLLK, EW_XLLKCmdFnc); //插逃生口 ADD_CMD(EW_CTSK, EW_CTSKCmdFnc); //插防火墙 ADD_CMD(EW_CFHQ, EW_CFHQCmdFnc); //插入节点 ADD_CMD(EW_CRJD, EW_CRJDCmdFnc); //消防引出口 ADD_CMD(EW_XFYC, EW_XFYCCmdFnc); //水电引出口 ADD_CMD(EW_SDYC, EW_SDYCCmdFnc); //热力引出口 ADD_CMD(EW_RLYC, EW_RLYCCmdFnc); //修改管廊 ADD_CMD(EW_XGGL, EW_XGGLCmdFnc); //管廊开口 ADD_CMD(EW_GLKK, EW_GLKKCmdFnc); //交叉隆起 ADD_CMD(EW_JCLQ, EW_JCLQCmdFnc); //交叉下沉 ADD_CMD(EW_JCXC, EW_JCXCCmdFnc); //管廊交叉 ADD_CMD(EW_GLJC, EW_GLJCCmdFnc); //八字交叉 ADD_CMD(EW_BZJC, EW_BZJCCmdFnc); //地形处理 ADD_CMD(dxload1, KTDxload); ADD_CMD(dfdel1, KTdfdel); ADD_CMD(thload1, KTthload); ADD_CMD(zbload1, KTzbload); //三维地形 ADD_CMD(EW_SWDX, EW_SWDXCmdFnc); //编辑节点 ADD_CMD(EW_BJJD, EW_BJJDCmdFnc); //总图出图 ADD_CMD(EW_ZTCT, EW_ZTCTCmdFnc); ADD_CMD(EW_FTXT, EW_FTXTCmdFnc); //管廊剖切 ADD_CMD(EW_GLPQ, EW_GLPQCmdFnc); //剖切的内部算法测试 ADD_CMD(EW_PQCS, EW_PQCSCmdFnc); ADD_CMD(EW_PQCS2, EW_PQCS2CmdFnc); ADD_CMD(EW_PQCS3, EW_PQCS3CmdFnc); ADD_CMD(EW_PQCS4, EW_PQCS4CmdFnc); //折线剖切 ADD_CMD(EW_ZXPQ, EW_ZXPQCmdFnc); // 更新剖切 ADD_CMD(EW_PQGX, EW_UpdateCutFuc); //测试命令 - 剖切3DSOLID ADD_CMD(EW_XS3D, EW_XS3DCmdFnc); //横断出图 ADD_CMD(EW_HDCT, EW_HDCTCmdFnc); //纵断出图 ADD_CMD(EW_ZDCT, EW_ZDCTCmdFnc); //预制出图 ADD_CMD(EW_YZCT, EW_YZCTCmdFnc); //绘制支管廊 ADD_CMD(EW_ZGLH, EW_ZGLHCmdFnc); //插入图框 ADD_CMD(EW_CRTK, EW_CRTKCmdFnc); ADD_CMD(EW_3DTK, EW_3DTKCmdFnc); //修改夹点,内部命令 ADD_CMD(EW_MNODE, EW_MNODECmdFnc); ADD_CMD(EW_MELE, EW_MELECmdFnc); //修改隧道管廊标高和坡度 ADD_CMD(SH_MELE, SH_MELECmdFnc); ADD_CMD(SH_MSEGE, SH_MSEGECmdFnc); ADD_CMD(SH_MSEGG, SH_MSEGGCmdFnc); //UCS ADD_CMD(EW_GLUCS, EW_GLUCSCmdFnc); //偏移 ADD_CMD(EW_GLPY, EW_GLPYCmdFnc); //路生管廊 ADD_CMD(EW_LSGL, EW_LSGLCmdFnc); //绑刷管廊的中心线数据-->路绑管廊[用于修复管廊桩号的错误] ADD_CMD(EW_LAGL, EW_LBGLCmdFnc); ADD_CMD(EW_XSLZ, EW_XSLZCmdFnc); //线生管廊 ADD_CMD(EW_XSGL, EW_XSGLCmdFnc); //多线连接 ADD_CMD(EW_DXLJ, EW_DXLJCmdFnc); //断线合并 ADD_CMD(EW_DXHB, EW_DXHBCmdFnc); //异型建模 ADD_CMD(EW_YXJM, EW_YXJMCmdFnc); ADD_CMD(EW_JDTK, EW_JDTKCmdFnc); ADD_CMD(EW_ZTJD, EW_ZTJDCmdFnc); ADD_CMD(EW_BBXX, EW_BBXXCmdFnc); //测试命令 ADD_CMD(MY_TEST, MY_TEST); ADD_CMD(EW_TEST, EW_TEST); //自动标注 ADD_CMD(EW_ZNBZ, EW_ZDBZCmdFnc); //添加桩号 ADD_CMD(EW_TJZH, EW_TJZHCmdFnc); //设置舱室类型 ADD_CMD(EW_SZLX, EW_SZLXCmdFnc); //防火校核 ADD_CMD(EW_FHJH, EW_FHJHCmdFnc); //通风校核 ADD_CMD(EW_TFJH, EW_TFJHCmdFnc); // 逃生校核 ADD_CMD(EW_TSJH, EW_TSJHCmdFnc); // 料口校核 ADD_CMD(EW_LKJH, EW_LKJHCmdFnc); // 分支校核 ADD_CMD(EW_FZJH, EW_FZJHCmdFnc); // 集水校核 ADD_CMD(EW_JSJH, EW_JSJHCmdFnc); // 生成道路中心 ADD_CMD(EW_SLZX, EW_SLZXCmdFnc); // 点成道路中心 ADD_CMD(EW_DSLX, EW_DSLXCmdFnc); // 里程节点 ADD_CMD(EW_LCJD, EW_LCJDCmdFnc); // 节点信息 ADD_CMD(EW_JDXX, EW_JDXXCmdFnc); // 修改里程 ADD_CMD(EW_XGLC, EW_XGLCCmdFnc); // 纵断设置 ADD_CMD(EW_ZDSZ, EW_ZDSZCmdFnc); //路线偏移 ADD_CMD(EW_LXPY, EW_LXPYCmdFnc); // 总分图线 ADD_CMD(EW_ZFTX, EW_ZTFTXCmdFnc); // 断分图线 ADD_CMD(EW_DFTX, EW_ZDFTXCmdFnc); // 管廊分图 ADD_CMD(EW_GLFT, EW_GLFTCmdFnc); //直埋引出 ADD_CMD(EW_ZMYC, EW_ZMYCCmdFnc); // 提取标高 ADD_CMD(EW_TQBG, EW_TQBGCmdFnc); // 生成地高程线(根据bgs文件生成参照曲线) ADD_CMD(EW_DGCX, EW_DGCXCmdFnc); // 图生高程(在道路纵断图纸中提取出高程文件) ADD_CMD(EW_TSGC, EW_TSGCCmdFnc); // 防火分区标注 ADD_CMD(EW_FHBZ, EW_FHBZCmdFnc); // 节点自动标注 ADD_CMD(EW_JDZB, EW_JDZBCmdFnc); // 测试视口 ADD_CMD(EW_VPOT, EW_VPOTCmdFnc); // 多线标注 ADD_CMD(EW_DXBZ, EW_DXBZCmdFnc); // 管廊红线上的桩号细分 ADD_CMD(EW_PLCZ, EW_PLCZCmdFnc); // 提取鸿业纵段 - 纵断提取 ADD_CMD(EW_ZDTQ, EW_ZDTQCmdFnc); // 提取鸿业纵段 - 纵断提取->纵断复线 ADD_CMD(EW_ZDFX, EW_ZDFXCmdFnc); // 高程映射 ADD_CMD(EW_GCYS, EW_GCYSCmdFnc); // 统一坡度 ADD_CMD(EW_TYPD, EW_TYPDCmdFnc); // 插族节点 ADD_CMD(EW_CZJD, EW_CZJDCmdFnc); // 调出上华工具 ADD_CMD(EW_TOOL, EW_ToolBarCmdFnc); // 定向拉伸 ADD_CMD(EW_DXLS, EW_DXLSCmdFnc); // 灭火配置计算 ADD_CMD(EW_MHPZ, EW_MHPZCmdFnc); // 显示管线 ADD_CMD(EW_XSGX, EW_XSGXCmdFnc); // 隐藏管线 ADD_CMD(EW_YCGX, EW_YCGXCmdFnc); // 显示线缆 ADD_CMD(EW_XSXL, EW_XSXLCmdFnc); // 隐藏线缆 ADD_CMD(EW_YCXL, EW_YCXLCmdFnc); // 节点微调 ADD_CMD(EW_JDWT, EW_JDWTCmdFnc); // 节点替换 ADD_CMD(EW_JDTH, EW_JDTHCmdFnc); // 布置灭火器 ADD_CMD(EW_XFBZ, EW_XFBZCmdFnc); // 删除已布置灭火器 ADD_CMD(EW_XFSC, EW_XFSCCmdFnc); // 节点定位,节点修改,内部命令 ADD_CMD(EW_JDDW, EW_JDDWCmdFnc); ADD_CMD(EW_JDMO, EW_JDMOCmdFnc); // 平整地形 ADD_CMD(EW_PZDX, EW_DXZLCmdFnc); // 地形平滑 ADD_CMD(EW_DXPH, EW_DXPHCmdFnc); // 地形删洞 ADD_CMD(EW_DXSD, EW_DXSDCmdFnc); // 地形开洞 ADD_CMD(EW_DXKD, EW_DXKDCmdFnc); // 点生地形 ADD_CMD(EW_DSDS, EW_DSDSCmdFnc); // 提取地形 ADD_CMD(EW_TQDS, EW_TQDSCmdFnc); // 纵断测量 ADD_CMD(EW_ZDCL, EW_ZDCLCmdFnc); // 插入附件 ADD_CMD(EW_CRFJ, EW_CRFJCmdFnc); // 提控制线 ADD_CMD(EW_TKZX, EW_TKZXCmdFnc); // 舱室拓宽 ADD_CMD(EW_CSTK, EW_CSTKCmdFnc); // 管廊倒圆 ADD_CMD(EW_GLDY, EW_GLDYCmdFnc); // 显示管廊分段 ADD_CMD(EW_XSFD, EW_XSFDCmdFnc); // 隐藏管廊分段 ADD_CMD(EW_YCFD, EW_YCFDCmdFnc); // 纵断出图更新 ADD_CMD(EW_ZDGX, EW_ZDGXCmdFnc); //一下为盾构内 // 勘测管线 ADD_CMD(EW_KZGX, EW_KZGXCmdFnc); // 盾构截面 ADD_CMD(EW_DGJM, EW_DGJMCmdFnc); // 盾构管廊 ADD_CMD(EW_DGGL, EW_DGGLCmdFnc); // 截面更新 ADD_CMD(EW_JMGX, EW_JMGXCmdFnc); // 盾构路线 ADD_CMD(EW_DGLX, EW_DGLXCmdFnc); //路线反向 ADD_CMD(EW_LXFX, EW_LXFXCmdFnc); //显示附属 ADD_CMD(EW_XSFU, EW_XSFUCmdFnc); // 路线生管 ADD_CMD(EW_LXSG, EW_LXSGCmdFnc); // 隧道插井 ADD_CMD(EW_SDCJ, EW_SDCJCmdFnc); // 隧道插节点族 ADD_CMD(EW_SDCZ, EW_SDCZCmdFnc); // 插入拽点 ADD_CMD(EW_CRZD, EW_CRCDCmdFnc); // 倒圆拟合 ADD_CMD(EW_DYNH, EW_DYNHCmdFnc); // 初始化一个 wfK 内的 比例 CoreTools::setPScaleForSHSKernal(100.); // earthwormCalc 工程命令 //管廊体积 ADD_CMD(EW_GLTJ, EW_GLTJCmdFnc); //总挖土方 ADD_CMD(EW_ZWTF, EW_ZWTFCmdFnc); //填埋土方 ADD_CMD(EW_TMTF, EW_TMTFCmdFnc); //外表面积 ADD_CMD(EW_WBMJ, EW_WBMJCmdFnc); //内表面积 ADD_CMD(EW_NBMJ, EW_NBMJCmdFnc); ADD_CMD(EW_STTT2, EW_STTT2CmdFnc); } void UnloadApplication() { deleteAcRxClass(AecUnknownWorldGeometry::desc()); deleteAcRxClass(AecUnknownWorldDraw::desc()); deleteAcRxClass(AecUnknownSubEntityTraits::desc()); deleteAcRxClass(AecUnknownContext::desc()); //deleteAcRxClass(CCivilDbPipelinePipe::desc()); //{{AFX_ARX_EXIT acedRegCmds->removeGroup(_T("KTEARTHWORM")); //}}AFX_ARX_EXIT DELETE_PTR(g_wndJYXJMDlg); DELETE_PTR(g_ShowZDInfdlg); } void SplitStrintToArray(LPCTSTR pszDescr,CStringArray& arInfo,TCHAR tcSpace) { if (pszDescr == NULL) return; CString sDescr = pszDescr; int nLen = sDescr.GetLength(); int i = 0; CString sText = _T(""); TCHAR tchar = _T('\0'); for(i = 0;i < nLen;i++) { tchar = sDescr.GetAt(i); if(tchar == tcSpace) { arInfo.Add(sText); sText = _T(""); } else { sText += tchar; } if(i == nLen - 1 && !sText.IsEmpty()) { arInfo.Add(sText); } } }