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

529 lines
14 KiB
C++

#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);
}
}