Files
envi-code/SourceCode/Code2026/tg_shs/inc/TArch/TchKernalGlobalFunc.h
T

449 lines
14 KiB
C++
Raw Normal View History

2026-09-28 15:28:50 +08:00
#ifndef _TCHKERNALGLOBALFUNC_H_
#define _TCHKERNALGLOBALFUNC_H_
#ifndef _TCOLUMNDATA_H_
#include "TColumnData.h"
#endif
#ifndef _TARCHPERDOCDATA_H_
#include "TArchPerDocData.h"
#endif
#ifndef __DBSPACE_H
#include "DbSpace.h"
#endif
class TDbProtectEntity;
TARCH_EXP TArchPerDocData* GetCurDocData();
TARCH_EXP void SearchSpace(TPickEntSet &ssWalls,const TDPtrList<AcDbObjectId> &lstColu,TDPtrList<TDbSpace> &res);
TARCH_EXP TDPtrList<TSortWallOnPt>& GetAllSortWalls();
TARCH_EXP int SelectWallSide(TEntitySet &entWall, TADSGePoint3d & loc, double *drt);
TARCH_EXP BOOL GetAxisInter(const TADSGePoint3d& ptLow, const TADSGePoint3d& ptUp, TADSGePointDir2d& ptRes);
TARCH_IMPEXP int GetBlockBoundary(AcDbObjectId idBlock, TGGePoly2D &poly, BOOL bAddIfNone = FALSE);
// 根据一指定的点, 搜索一房间的内壁轮廓线
TARCH_EXP int GenSpacePoly(const TADSGePoint3d &ptPick, TGGePoly2D &poly);
TARCH_EXP int EditWallPathc0(AcDbObjectId id);
TARCH_EXP int GetExistOutlineFromInsert(const TEntitySet &e, TGGePoly2D &polyOutline);
// 根据当前视图方向和系统的设定, 确定显示方式
// 返回: DRAW_2D和DRAW_3D的按位组合: DRAW_2D, DRAW_3D, DRAW_2D+DRAw_3D
TARCH_EXP int GetViewDrawMode();
TARCH_IMPEXP AcDbObjectId MakeTBlockInsert(const TCHAR *pszBlock, TADSGePoint3d ptInsert,double sx, double sy, double sz, double rot, int nMask);
// 更新指定实体的显示
TARCH_EXP void UpdateGraphic(TPickEntSet &ss);
TARCH_EXP void UpdateGraphic(const TDPtrList<AcDbObjectId> &ss);
// 取柱子的轮廓线, 确定id必须有效的代表可以读取的柱子id
TARCH_EXP int GetColumnOutline(const AcDbObjectId &idColu, TGGePoly2D &poly);
// 从二维图块中提取外轮廓线
TARCH_EXP int GetBoundaryFromInsert2D(TEntitySet &ent, TGGePoly2D &polyOutline);
// 取当前图中的所有柱子的边界
TARCH_EXP void GetAllColumnBoundry(TDPtrList<TGGePoly2D> &lstClipBoundry);
TARCH_EXP int GetClipBoundary1(TGGePoly2D &poly2d);
TARCH_EXP void UpdateTDbEntity();
// 拖动实体,block
TARCH_EXP int DragInsertBlock1(const TCHAR *szBlock, int nFlag, const AcGeScale3d &scales);
TARCH_EXP int IDragInsertBlock(TADSGePoint3d &ptBase, TEntitySet &ent, int nFlag);
TARCH_EXP AcDbObjectId MakeBlockInsert(const TCHAR *pszBlock, TADSGePoint3d ptInsert,double sx, double sy, double sz, double rot);
TARCH_EXP TCString GetCurCommand();
// 打开文件,并在这个文档内自动执行命令
TARCH_EXP void MdiOpenDwgFile(const TCHAR *pszFile, const TCHAR *pszCmdStr);
TARCH_EXP void OpenDwgWithCurNls(CString &csFileName);
//由命令简称得到命令全称(加前缀)
TARCH_EXP TCString GetFullCmdName(const TCHAR *szName);
//定义命令,自动加前缀
TARCH_EXP void TchAddCommand(const TCHAR *szAppName0,const STArxCommandTable cmdTable[],const UINT eleNum, BOOL bLispCmd=FALSE);
// 初始化Aol库的连接
TARCH_EXP void InitAol(const TCHAR *szAppName);
TARCH_EXP void DocStatus();
TARCH_EXP void InitDLRegistry(HMODULE modHandle, const TCHAR *szAppName);
// 按需加载的控制
TARCH_EXP void UpdateDLRegistry(const TCHAR *szAppName, const STArxCommandTable cmdTable[],const UINT eleNum);
TARCH_EXP void UpdateDLRegistry(const TCHAR *szAppName, const STExtern_fun cmdTable[],const UINT eleNum);
TARCH_EXP int SelectUpFace(AcGePlane &plane);
TARCH_EXP void ClearKeyboardBuffer();
TARCH_EXP bool IsLispExpress();
TARCH_EXP TPickEntSet& DocGetPickFirst();
TARCH_EXP TEntitySet& DocGetEntMouseOn();
TARCH_EXP bool _docGetPScale(double &dRet);
TARCH_EXP bool _docSetPScale(const double &d);
TARCH_EXP bool _docGetMeterUnitDraw(BOOL &bMeter);
TARCH_EXP bool _docSetMeterUnitDraw(const BOOL &bMeter);
TARCH_EXP double DocGetPScale();
TARCH_EXP TPickEntSet& DocGetPickGrip();
//提示用户选择一个实体, 或者从PickFirst中选取(如果存在), 排除重合实体
//szPrompt--提示; entResult--结果; ptPick--点取位置; rbBaseMask--DXF过滤表
TARCH_EXP int SelectEntity1(const TCHAR *szPrompt, TEntitySet &entResult, TADSGePoint3d &ptPick, const TRBList &rbBaseMask);
TARCH_EXP int SelectEntity1(double nPrec, const TCHAR *szPrompt, TEntitySet &entResult, TADSGePoint3d &ptPick, const TRBList &rbBaseMask);
//提示用户选择一个实体, 或者从PickFirst中选取(如果存在)
//szPrompt--提示; entResult--结果; ptPick--点取位置; rbBaseMask--DXF过滤表
TARCH_EXP int SelectEntity(const TCHAR *szPrompt, TEntitySet &entResult, TADSGePoint3d &ptPick, const TRBList &rbBaseMask);
//支持关键字,其它同上
TARCH_EXP int SelectEntity(const TCHAR *szPrompt, TEntitySet &entResult, TADSGePoint3d &ptPick, const TRBList &rbBaseMask,const TCHAR* szKeyword,TCHAR& cRet);
//提示用户选择一个实体, 或者从PickFirst中选取(如果存在)
//szPrompt--提示; entResult--结果; rbBaseMask--DXF过滤表
TARCH_EXP int SelectEntity(const TCHAR *szPrompt, TEntitySet &entResult, const TRBList &rbBaseMask);
//支持关键字,其它同上
TARCH_EXP int SelectEntity(const TCHAR *szPrompt, TEntitySet &entResult, const TRBList &rbBaseMask,const TCHAR* szKeyword,TCHAR& cRet);
//提示用户选择多个实体, 或者从PickFirst中选取(如果存在)
//szPrompt--提示; ssResult--结果; rbBaseMask--DXF过滤表
TARCH_EXP int SelectEntities(const TCHAR *szPrompt, TPickEntSet &ssResult, const TRBList &rbBaseMask);
//支持关键字,其它同上
TARCH_EXP int SelectEntities(const TCHAR *szPrompt, TPickEntSet &ssResult, const TRBList &rbBaseMask,const TCHAR* szKeyword,TCHAR& cRet);
TARCH_EXP int GetPrepickEntity(TEntitySet &entResult, const TRBList &rbBaseMask);
TARCH_EXP AcDbObjectId GetPrepickEntity(const TRBList &rbBaseMask);
TARCH_EXP AcDbObjectId GetBlock2dFromBlock3d(AcDbObjectId idBlock);
//---结构数据---
#define GRAPHIC 0x01 //图形
#define UNVARYINGLOAD 0x02 //恒荷
#define VARYINGLOAD 0x04 //活荷
//荷载所属对象
#define BYOBJLOAD 0 //随荷载显示开关
#define SURFACELOAD 1 //面荷
#define BEAMLOAD 2 //梁荷
#define WALLLOAD 3 //墙荷
#define COLULOAD 4 //柱荷
#define NODELOAD 5 //节点荷载
// 截面形状
#define ST_RECT 1 //矩形
#define ST_IBEAM 2 //工字形
#define ST_CIRCLE 3 //圆形
#define ST_POLY 4 //任意形状
//铰接方式
#define HINGE_START 0x01 //起始端或下端
#define HINGE_END 0x02 //终止端或上端
// 内力显示
#define FORCE_NORMAL 0 //正常
#define FORCE_N 1 //轴力
#define FORCE_M 2 //弯矩
#define FORCE_S 3 //剪力
//荷载查看方式
#define BYGRAPHIC 1 //图形
#define BYUNVARYING 2 //恒荷
#define BYVARYING 3 //活荷
extern TARCH_IMPEXP int g_nLoadDrawMode; //BYOBJLOAD:随荷载显示开关控制;
extern TARCH_IMPEXP int g_nLoadViewMode;
//SURFACELOAD:仅显示面荷;
//BEAMLOAD:仅显示梁荷
//WALLLOAD:仅显示墙荷
//COLULOAD: 仅显示柱荷
//NODELOAD: 仅显示节点荷载
extern TARCH_IMPEXP int g_nColuForce; //底层墙柱显示工况
// eNormal,
// eVXMax,
// eVYMax,
// eNMax,
// eNMin,
// eMXMax,
// eMYMax
extern TARCH_IMPEXP int g_nReinAreaMode; //配筋面积显示方式
extern TARCH_IMPEXP int g_nReinAreaModeColu;//柱配筋面积显示方式
extern TARCH_IMPEXP BOOL g_bDetailMode; //特殊梁柱是否简图模式
extern TARCH_IMPEXP double g_dCLTextHeight; //单元编号文字字高
extern TARCH_IMPEXP int g_nCLTextColorBeam; //梁单元编号文字颜色
extern TARCH_IMPEXP int g_nCLTextColorColu; //柱单元编号文字颜色
extern TARCH_IMPEXP int g_nCLTextColorWall; //剪力墙单元编号文字颜色
extern TARCH_IMPEXP int g_nCLTextColorSlab; //板单元编号文字颜色
extern TARCH_IMPEXP int g_nCLTextColorNode; //节点编号文字颜色
extern TARCH_IMPEXP double g_dBHTextHeight; //截面尺寸文字字高
extern TARCH_IMPEXP int g_nBHTextColorBeam; //梁截面尺寸文字颜色
extern TARCH_IMPEXP int g_nBHTextColorColu; //柱截面尺寸文字颜色
extern TARCH_IMPEXP int g_nBHTextColorWall; //剪力墙截面尺寸文字颜色
extern TARCH_IMPEXP int g_nBHTextColorSlab; //板截面尺寸文字颜色
extern TARCH_IMPEXP int g_nBHTextColorSlabHole; //板洞截面尺寸文字颜色
extern TARCH_IMPEXP double g_dRGTextHeight; //刚域文字字高
extern TARCH_IMPEXP int g_nRGTextColorBeam; //梁刚域文字颜色
extern TARCH_IMPEXP int g_nRGTextColorColu; //柱刚域文字颜色
extern TARCH_IMPEXP int g_nGraph; // 0:正常显示 1:轴力 2: 弯矩 3:剪力;
extern TARCH_IMPEXP double g_dMGrapTextH; // 弯矩包络图文字高
extern TARCH_IMPEXP double g_dMGrapScal; // 弯矩包络图比例
extern TARCH_IMPEXP double g_dNGrapTextH; // 轴力文字高度
extern TARCH_IMPEXP double g_dReinbarWidth; //钢筋线宽
extern TARCH_IMPEXP double g_dReinbarLenS; //钢筋直钩平直长度
extern TARCH_IMPEXP double g_dReinbarLenO; //钢筋斜钩平直长度
extern TARCH_IMPEXP double g_dReinbarLenB; //钢筋弯钩平直长度
extern TARCH_IMPEXP double g_dReinbarDiaB; //钢筋弯钩直径
extern TARCH_IMPEXP double g_dReinbarDotWidth; //点钢筋直径
extern TARCH_IMPEXP double g_dStirrupsLen; //箍筋平直长度
extern TARCH_IMPEXP int g_nDrawModeSlab; //楼板显示控制
extern TARCH_IMPEXP int g_nDrawModeSlabBorder; //楼板边界显示控制
extern TARCH_IMPEXP BOOL g_bShowCrack; // 显示裂缝图
extern TARCH_IMPEXP BOOL g_bShowDef; // 显示挠度图
extern TARCH_IMPEXP double g_dSGrapTextH; // 剪力包络图文字高
extern TARCH_IMPEXP double g_dSGrapScal; // 剪力包络图幅值;
extern TARCH_IMPEXP double g_dCrackGraphTextH; // 字高
extern TARCH_IMPEXP double g_dCrackLimit; // 裂缝限制值
extern TARCH_IMPEXP double g_dDeflectGraphTextH; // 字高
extern TARCH_IMPEXP double g_dDeflectGraphScale; // 幅度
extern TARCH_IMPEXP BOOL g_bAutoBreak; // 梁柱自动打断控制参数
extern TARCH_IMPEXP BOOL g_bAutoUpdate; // 自动更新图形控制参数
extern TARCH_IMPEXP Adesk::UInt16 g_iSolidNodeColor; // 实节点颜色
extern TARCH_IMPEXP Adesk::UInt16 g_iVirtualNodeColor; // 虚节点颜色
extern TARCH_IMPEXP BOOL g_bSplitFloor;
//设置查看方式nStyle:BYGRAPHIC:图形;BYUNVARYING:恒荷;BYVARYING:活荷
TARCH_EXP BOOL GetViewStyle(int nStyle);
TARCH_EXP void SetViewStyle(int nStyle, BOOL bTrue);
// 去除小数末尾的0
TARCH_EXP CString TrimDoubleZero(double dData, int nNum = -1);
//墙身计算配筋
TARCH_IMPEXP void SetWallBodyCal(BOOL bTrue) ;
TARCH_IMPEXP BOOL IsWallBodyCal();
//墙梁计算配筋
TARCH_IMPEXP void SetWallBeamCal(BOOL bTrue);
TARCH_IMPEXP BOOL IsWallBeamCal();
//墙柱计算配筋
TARCH_IMPEXP void SetWallColuCal(BOOL bTrue);
TARCH_IMPEXP BOOL IsWallColuCal();
//墙身实际配筋
TARCH_IMPEXP void SetWallBodyReal(BOOL bTrue);
TARCH_IMPEXP BOOL IsWallBodyReal();
//墙梁实际配筋
TARCH_IMPEXP void SetWallBeamReal(BOOL bTrue);
TARCH_IMPEXP BOOL IsWallBeamReal();
//墙柱实际配筋
TARCH_IMPEXP void SetWallColuReal(BOOL bTrue);
TARCH_IMPEXP BOOL IsWallColuReal();
//+++结构数据+++
// 判断点是否在柱子内部, 忽略Z坐标
BOOL IsInsideColumn(const TADSGePoint3d &pt);
void ModifyWallAtCorner(TADSGePointList &lstCorners0, TDPtrList<TColumnData> &lstColumns,AcDbObjectId idBlock,LPVOID pReserve = NULL);
BOOL InitBlockWipeout(AcDbObjectId idBlock, int nMaskFlag) ;
int EditProtectEntity(AcDbObjectId id);
bool UnProtect(TDbProtectEntity* pEnt);
void InitDbWall(BOOL bTrue);
void InitDbColumn(BOOL bTrue);
void InitDbBlockInsert(BOOL bTrue);
void InitDbWallPatch(BOOL bTrue);
void InitDbPolyCurveEnt(BOOL bTrue);
void InitDbProtectEntity(BOOL bTrue);
void InitAppDocGlobals(BOOL bTrue);
void GetDwgStamp();
//TARCH_IMPEXP BOOL IsCommandLineEmpty();
//TARCH_IMPEXP BOOL IsAcadIdle();
int InsertBlock();
//只有GlobalFun在用
// 通过一点确定一房间的轮廓
int GenSpaceOutline(const TADSGePoint3d &ptPick, TGGePoly2D &poly, int bCenter);
int ModifyInsert(TEntitySet ent, int nMaskFlag);
//wlw 10.06.21
//使用xData时,注册App名称
int TGRegApp(LPCTSTR pszAppName, AcDbDatabase* pDb = NULL);
//单独绘制保温层标识 wlw 11.03.17
void DrawEntInsulate(const TDPtrList<TGGeCurveSegment> &lstInsulateCurves);
//将poly2d放大缩小,求保温线poly2d时用
void GetOffsetPoly2D(const TGGePoly2D& polySrc, TGGePoly2D& polyOut, double dOffset, bool bZoomOut = true);
//一根线 + 高度 返回一个面
AcDbFace* GetFaceFromSegment(const TGGeCurveSegment& segment, double dHeight);
//command
void ProtectEntity();
void PrePlot();
void PostPlot();
void UnProtect();
void BlockUnMask();
void BringFront1();
void BringFront2();
void ConvertInsert();
int SetWallWidth();
void PolyCurveEnt();
inline double DocGetLWallWidth()
{
TArchPerDocData *p = GetCurDocData();
return p ? p->m_lWallWidth : 120 * _UNIT_SCALE;
}
inline void DocSetLWallWidth(double val)
{
TArchPerDocData *p = GetCurDocData();
if (p)
{
p->m_lWallWidth = val;
}
}
inline double DocGetRWallWidth()
{
TArchPerDocData *p = GetCurDocData();
return p ? p->m_rWallWidth : 120 * _UNIT_SCALE;
}
inline BOOL DocGetIsAcadIdle()
{
TArchPerDocData *p = GetCurDocData();
return p ? p->m_bAcadIdle : FALSE;
}
inline void DocSetDrawWall(int nMode)
{
TArchPerDocData *p = GetCurDocData();
if (p)
{
p->m_nDrawWall = nMode;
}
}
inline TCHAR * DocGetLastCommand()
{
TArchPerDocData *p = GetCurDocData();
if (p == NULL)
{
return NULL;
}
return p->m_szLastCommand;
}
inline BOOL DocGetIsUpdateDisp()
{
TArchPerDocData *p = GetCurDocData();
return p ? p->m_bUpdateDisp : FALSE;
}
inline void DocSetIsUpdateDisp(BOOL bTrue)
{
TArchPerDocData *p = GetCurDocData();
if (p)
{
p->m_bUpdateDisp = bTrue;
}
}
inline int DocGetWallOsnapType()
{
TArchPerDocData *p = GetCurDocData();
return p ? p->m_nOsnapType : FALSE;
}
inline void DocSetRWallWidth(double val)
{
TArchPerDocData *p = GetCurDocData();
if (p)
{
p->m_rWallWidth = val;
}
}
inline BOOL DocGetIsDwgBegin()
{
TArchPerDocData *p = GetCurDocData();
return p ? p->m_bDwgBegin : FALSE;
}
inline void DocSetIsDwgBegin(BOOL bTrue)
{
TArchPerDocData *p = GetCurDocData();
if (p)
{
p->m_bDwgBegin = bTrue;
}
}
inline void DocSetIsAcadIdle(BOOL bTrue)
{
TArchPerDocData *p = GetCurDocData();
if (p)
{
p->m_bAcadIdle = bTrue;
}
}
inline double DocGetMinLenWall()
{
TArchPerDocData *p = GetCurDocData();
return p ? p->m_nMinLenWall : 20.0 * _UNIT_SCALE;
}
inline void DocSetWallOsnapType(int bTrue)
{
TArchPerDocData *p = GetCurDocData();
if (p)
{
p->m_nOsnapType = bTrue;
}
}
inline BOOL DocGetModelNumber()
{
TArchPerDocData *p = GetCurDocData();
return p ? p->m_bModelNumber : FALSE;
}
inline void DocSetModelNumber(BOOL bTrue)
{
TArchPerDocData *p = GetCurDocData();
if (p)
{
p->m_bModelNumber = bTrue;
}
}
inline BOOL DocGetIsLispCommand()
{
TArchPerDocData *p = GetCurDocData();
return p ? p->m_bLispCommand : FALSE;
}
inline const TCHAR * DocGetCurCommand()
{
TArchPerDocData *p = GetCurDocData();
return p ? (const TCHAR *)p->m_sCurCommand : NULL;
}
inline resbuf *AxisMask()
{
return ads_buildlist(RTDXF0, _T("LINE,ARC,CIRCLE"), 8, LAY_AXIS, NULL);
}
#endif