552 lines
10 KiB
C++
552 lines
10 KiB
C++
#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<AcDbVoidPtrArray*>(acrxLoadedApps());
|
|
if (pApps == NULL)
|
|
return false;
|
|
bool bFound = false;
|
|
for (int i = 0; i < pApps->length(); i++)
|
|
{
|
|
if (_tcsicmp(reinterpret_cast<LPCTSTR>(pApps->at(i)), str) == 0)
|
|
{
|
|
bFound = true;
|
|
break;
|
|
}
|
|
}
|
|
for (; pApps->length() > 0;)
|
|
{
|
|
delete reinterpret_cast<LPTSTR>(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);
|
|
}
|
|
}
|
|
} |