Files
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

552 lines
11 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);
}
}
}