Files
envi-code/SourceCode/Code2026/tg_shs/inc/TArch/TDbStruBeam.h
T
2026-09-28 15:28:50 +08:00

457 lines
15 KiB
C++

//------------------------------------------------------------------------+
// Copyright (C), 1998-2011, Beijing Tangent Software Co. Ltd.
// = FileName : TDbStruBeam类
// = Version : ver1.0
// = Author : xlc
// = CreateDate : 2011-05-20
// = Description: 梁对象类声明
// = Maintainers:
//
//------------------------------------------------------------------------+
#ifdef TASD
#ifndef _TDBSTRUBEAM_H_
#define _TDBSTRUBEAM_H_
#ifndef _TBASEWALLLINE_H_
#include "TBaseWallLine.h"
#endif
#ifndef _TASSOCMSG_H_
#include "TAssocMsg.h"
#endif
#ifndef _TDBXDATAMAP_H__
#include "TDbXDataMap.h"
#endif
#ifndef _TDBBASEWALL_H_
#include "TDbBaseWall.h"
#endif
#ifndef _TSTRULOAD_H_
#include "TStruLoad.h"
#endif
//梁参数
//描述 字典键值 数据类型
//截面类型 KEY_SECTYP int
//截面总宽 KEY_SUMB double
//截面总高 KEY_SUMH double
//起点 KEY_START AcGePoint3d
//终点 KEY_END AcGePoint3d
//圆心角 KEY_BULGE double
//偏心距 KEY_EDIS double
//轴转角 KEY_AXANG double
//材料类型 KEY_MATTYP int
//类别 KEY_KIND int
//用途 KEY_USETYP int
//线型1 KEY_LTID1 AcDbObjectId
//线型2 KEY_LTID2 AcDbObjectId
//矩形截面宽度 KEY_B double
//矩形截面高度 KEY_H double
//工形腹板厚度 KEY_B double
//工形截面总高度KEY_H double
//工形上翼缘宽度KEY_U double
//工形上翼缘厚度KEY_T double
//工形下翼缘宽度KEY_D double
//工形下翼缘厚度KEY_F double
//起点顶高 KEY_TOPE1 double
//终点顶高 KEY_TOPE2 double
//构件编号 KEY_CLAB CString
//编号文字位置点KEY_CLDIST AcGePoint3d
//单元编号 KEY_CELLNO CString
//I端刚域长度 KEY_RIGIDI double
//J端刚域长度 KEY_RIGIDJ double
//铰接类型 KEY_HINGE int
class TARCH_EXP TDbStruBeam : public TDbBaseWall
{
DECLARE_TENTBASE();
ACRX_DECLARE_MEMBERS(TDbStruBeam);
public:
TDbStruBeam();
virtual ~TDbStruBeam();
// Overriden function from AcDbEntity
virtual Acad::ErrorStatus dwgInFields (AcDbDwgFiler* pFiler);//ok
virtual Acad::ErrorStatus dwgOutFields(AcDbDwgFiler* pFiler) const;//ok
virtual Acad::ErrorStatus subGetOsnapPoints(
AcDb::OsnapMode osnapMode,
INT_PTR gsSelectionMark,
const AcGePoint3d& pickPoint,
const AcGePoint3d& lastPoint,
const AcGeMatrix3d& viewXform,
AcGePoint3dArray& snapPoints,
AcDbIntArray& geomIds) const;//ok
virtual Acad::ErrorStatus subTransformBy(const AcGeMatrix3d& xform);//ok
// 起点,终点,中点
virtual Acad::ErrorStatus subGetGripPoints(
AcGePoint3dArray& gripPoints,
AcDbIntArray& osnapModes,
AcDbIntArray& geomIds)const;//ok
virtual Acad::ErrorStatus subGetStretchPoints(AcGePoint3dArray& stretchPoints) const;//ok
// 起点和终点调整位置,直墙中点移动墙体,弧墙中点改变中点位置
virtual Acad::ErrorStatus subMoveGripPointsAt(
const AcDbIntArray& indices,
const AcGeVector3d& offset);//ok
virtual Acad::ErrorStatus subMoveStretchPointsAt(
const AcDbIntArray& indices,
const AcGeVector3d& offset);//ok
//
virtual Acad::ErrorStatus subGetClassID(CLSID* pClsid) const;
virtual Acad::ErrorStatus subDeepClone(AcDbObject* pOwner,
AcDbObject*& pClonedObject,
AcDbIdMapping& idMap,
Adesk::Boolean isPrimary) const;//ok
virtual Acad::ErrorStatus subWblockClone(
AcRxObject* pOwner,
AcDbObject*& pClonedObject,
AcDbIdMapping& idMap,
Adesk::Boolean isPrimary) const;//ok
virtual Acad::ErrorStatus subIntersectWith(
const AcDbEntity* ent,
AcDb::Intersect intType,
AcGePoint3dArray& points,
INT_PTR thisGsMarker = 0,
INT_PTR otherGsMarker = 0) const;//ok
virtual Acad::ErrorStatus subIntersectWith(
const AcDbEntity* ent,
AcDb::Intersect intType,
const AcGePlane& projPlane,
AcGePoint3dArray& points,
INT_PTR thisGsMarker = 0,
INT_PTR otherGsMarker = 0) const;
// TEntityBase
// 夹点提示
virtual Acad::ErrorStatus GetGripText(int i, CString &cs) const;//ok
virtual Acad::ErrorStatus ExplodeOrDraw3d(TGGiExplodeDrawBase &dc) const;//ok
virtual Acad::ErrorStatus ExplodeOrDraw2d(TGGiExplodeDrawBase &dc) const;//ok
virtual Acad::ErrorStatus GetExtents2d(TADSGePoint3d &ptLow, TADSGePoint3d &ptUp) const;//ok
virtual Acad::ErrorStatus GetExtents(TADSGePoint3d &ptLow, TADSGePoint3d &ptUp) const;//ok
//取动态属性显示数据
virtual void GetTips(TDPtrList<TObjInfoUnit> &lstInfo) const;//ok
virtual const TCHAR *GetDefaultLayer() const;
virtual BOOL IsValid() const; //ok
// 支持夹点ctrl功能切换
virtual int GetCtrlToggleIndex()const;//ok
virtual void CopyPropertiesFrom(AcDbEntity *pSrcEntity, unsigned gMatchFlag);//ok
virtual TEntityBase::DrawType GetDrawType() const;//ok
virtual bool GetStandardFaceBody(AcDbVoidPtrArray& arFacePtrs) const;
virtual bool GetSafeProtectedSpace(AcDbVoidPtrArray& arFacePtrs) const;
virtual bool GetSection(const AcDbFace &face, const AcGeVector3d& vtPlaneSecDir,
std::vector<TObjSectionRecord> &sectionRecords,
AcDbVoidPtrArray& arFillPtrs) const;
virtual CString GetXml(const AcGeMatrix3d& mat) const;
virtual int GetFirstVersion()const;
virtual bool IsModelEntity() const;
//TDbBaseWall
// 对象修改发出关联更改消息
virtual void PostAssocMsg(TAssocMsg assocMsg)const;
// 对象接收到更改消息
virtual void ReceiveAssocMsg(TAssocMsg assocMsg);//ok
// 建立关联关系
virtual void MakeAssocRelation(AcDbObjectIdArray& ids);//ok
// 移除关联关系
virtual void RemoveAssocRelation(AcDbObjectId& id);//ok
// 获取墙的双线及优先级
virtual void GetThisBaseWallLine(TBaseWallLine& baseWall)const;//ok
// 获取关联墙线,arBaseWallLinesS:起始端关联墙线; arBaseWallLinesM:中间段关联墙线;arBaseWallLinesE:终止端关联墙线
virtual void GetAssocBaseWallLine(TDPtrList<TBaseWallLine>& arBaseWallLinesS, TDPtrList<TBaseWallLine>& arBaseWallLinesM, TDPtrList<TBaseWallLine>& arBaseWallLinesE)const;//ok
// 获得梁总宽度
virtual void GetTotalWidth(double &dWidth)const;
// 获得梁截面总高度
virtual void GetTotalHeight(double &dHeight)const;
// 梁外框线
virtual void GetPoly2D(TGGePoly2D &poly2d) const;
virtual BOOL CanMerge(AcDbObjectId idWall);
//add by xlc on 120118
//设置荷载数组
virtual bool SetLoadsArray(const std::vector<TStruLoad>& vectLoads);
//获得荷载数组
virtual bool GetLoadsArray(std::vector<TStruLoad>& vectLoads)const;
//清除荷载数组
virtual void ClearLoadsArray();
// add by wjx on 120223 弯矩包络图
virtual bool SetMGraArray(const std::vector<TCombForceData>& vectMin, const std::vector<TCombForceData>& vectMax);
//获得弯矩包络图数组
virtual bool GetMGraArray(std::vector<TCombForceData>& vectMin, std::vector<TCombForceData>& vectMax)const;
//清除弯矩包络图数组
virtual void ClearMGraArray();
// add by wjx on 120223 剪力包络图
virtual bool SetSGraArray(const std::vector<TCombForceData>& vectMin);
//获得剪力包络图数组
virtual bool GetSGraArray(std::vector<TCombForceData>& vectMin)const;
//清除剪力包络图数组
virtual void ClearSGraArray();
enum UsageType
{
kBeam = 1, //普通梁
kCPBeam, //连梁
kRGBeam, //刚域梁
kAMBeam, //不调幅梁
kIMGBeam, //虚梁
kTransBeam, //转换梁
kSlideBeam //滑动支梁
};
public:
// 获取截面的二维形状
bool GetSection2d(TGGePoly2D& polyShape) const;
// 获取二维截面外包框的宽度
double GetSection2dWidth() const;
// 获取二维截面外包框的高度
double GetSection2dHeight() const;
// 根据偏心距,调整起点终点位置
void UpdatePts(double dDist);
//铰接属性
int GetHinge()const; //返回值 0:普通梁,1:一端铰梁,2:两端铰梁
//梁两端的铰接属性,bStart:是否起始端
BOOL GetHinge(BOOL bStart);
void SetHinge(BOOL bStart, BOOL bTrue);
//梁正截面配筋面积数据
bool SetRSArray(const std::vector<TReinSectData>& vecRSData);
bool GetRSArray(std::vector<TReinSectData>& vecRSData)const;
void ClearRSArray();
//梁正截面实际配筋面积数据
bool SetCRSArray(const std::vector<TReinSectData>& vecRSData);
bool GetCRSArray(std::vector<TReinSectData>& vecRSData)const;
void ClearCRSArray();
//梁斜截面配筋面积数据
bool SetRSSArray(const std::vector<TReinSectData>& vecRSData);
bool GetRSSArray(std::vector<TReinSectData>& vecRSData)const;
void ClearRSSArray();
void RemoveCrackArray(LPCTSTR pszKey);
// 裂缝图数据接口函数
bool SetCrackArray(const TCrackData& crackData);
bool GetCrackArray(TCrackData& crackData) const;
void ClearCrackArray();
// 挠度图数据接口函数
bool SetDeflectArray(const std::vector<double>& deflectData);
bool GetDeflectArray(std::vector<double>& deflectData) const;
void ClearDeflectArray();
//恒荷弯矩值
BOOL SetMArray(const AcGeDoubleArray& arM);
BOOL GetMArray(AcGeDoubleArray& arM)const;
void ClearMArray();
//活荷弯矩值
BOOL SetMVArray(const AcGeDoubleArray& arM);
BOOL GetMVArray(AcGeDoubleArray& arM)const;
void ClearMVArray();
//恒荷剪力值
BOOL SetSArray(const AcGeDoubleArray& arM);
BOOL GetSArray(AcGeDoubleArray& arM)const;
void ClearSArray();
//活荷剪力值
BOOL SetSVArray(const AcGeDoubleArray& arM);
BOOL GetSVArray(AcGeDoubleArray& arM)const;
void ClearSVArray();
//梁尺寸图层
AcDbObjectId GetLayerDim() const;
void SetLayerDim(AcDbObjectId idLayer);
//梁编号图层
AcDbObjectId GetLayerNum() const;
void SetLayerNum(AcDbObjectId idLayer);
//梁标注图层
AcDbObjectId GetLayerMark() const;
void SetLayerMark(AcDbObjectId idLayer);
//梁其他文字图层
AcDbObjectId GetLayerText() const;
void SetLayerText(AcDbObjectId idLayer);
//梁钢筋图层
AcDbObjectId GetLayerRBar() const;
void SetLayerRBar(AcDbObjectId idLayer);
//梁附加吊筋图层
AcDbObjectId GetLayerRBarU() const;
void SetLayerRBarU(AcDbObjectId idLayer);
//梁附加箍筋图层
AcDbObjectId GetLayerRBarO() const;
void SetLayerRBarO(AcDbObjectId idLayer);
//梁实配面积图层
AcDbObjectId GetLayerRealArea() const;
void SetLayerRealArea(AcDbObjectId idLayer);
//梁计算挠度图层
AcDbObjectId GetLayerCalDefl() const;
void SetLayerCalDefl(AcDbObjectId idLayer);
//梁计算裂缝图层
AcDbObjectId GetLayerCalCrk() const;
void SetLayerCalCrk(AcDbObjectId idLayer);
//梁内力结果图层
AcDbObjectId GetLayerForce() const;
void SetLayerForce(AcDbObjectId idLayer);
//梁计算配筋图层
AcDbObjectId GetLayerCalcArea() const;
void SetLayerCalcArea(AcDbObjectId idLayer);
//梁荷载
AcDbObjectId GetLayerLoad() const;
void SetLayerLoad(AcDbObjectId idLayer);
//梁活荷值
AcDbObjectId GetLayerLoadL() const;
void SetLayerLoadL(AcDbObjectId idLayer);
//梁恒荷值
AcDbObjectId GetLayerLoadC() const;
void SetLayerLoadC(AcDbObjectId idLayer);
//文字样式
AcDbObjectId GetTextStyle() const;
void SetTextStyle(AcDbObjectId idLayer);
//文字样式
AcDbObjectId GetTextStyleRB() const;
void SetTextStyleRB(AcDbObjectId idLayer);
protected:
AcDbHardPointerId m_idLayerNum; //梁编号图层
AcDbHardPointerId m_idLayerDim; //梁尺寸图层
AcDbHardPointerId m_idLayerMark; //梁标注图层
AcDbHardPointerId m_idLayerText; //梁其他文字图层
AcDbHardPointerId m_idLayerRBar; //梁钢筋图层
AcDbHardPointerId m_idLayerRBarU; //梁附加吊筋图层
AcDbHardPointerId m_idLayerRBarO; //梁附加箍筋图层
AcDbHardPointerId m_idLayerCalDefl; //梁计算挠度图层
AcDbHardPointerId m_idLayerCalCrk; //梁计算裂缝图层
AcDbHardPointerId m_idLayerRealArea; //梁实配面积图层
AcDbHardPointerId m_idLayerForce; //梁内力结果图层
AcDbHardPointerId m_idLayerCalcArea; //梁计算配筋图层
AcDbHardPointerId m_idLayerLoad; //梁荷载
AcDbHardPointerId m_idLayerLoadL; //梁活荷值
AcDbHardPointerId m_idLayerLoadC; //梁恒荷值
AcDbHardPointerId m_idTextStyle; //文字样式
AcDbHardPointerId m_idTextStyleRB; //文字样式
private:
// 构造矩形截面的二维形状
bool ConstructRectShape(TGGePoly2D& polyShape) const;
// 工字型截面
bool ConstructIShape( TGGePoly2D& polyShape ) const;
//....其它截面
//....
// 基线
void GetPolyBase(TGGePoly2D &polyBase) const;
// 端点是否连接着柱子
bool IsLinkColumn(bool bStart) const;
// 端点与柱子关联时,绘制端点封口
Acad::ErrorStatus DrawSideLine2d(bool bStart, TGGiExplodeDrawBase &dc) const;
// 处理两根梁平行连接
Acad::ErrorStatus DrawSideLine2d(bool bStart, const AcDbObjectId &idWall, const TBaseWallLine &wallLine, TGGiExplodeDrawBase &dc) const;
// 二维截面图转换为三维时的参考点
bool GetBasePoint(AcGePoint3d &ptBase) const;
// 梁中心线
void GetBaseLine(TGGeCurveSegment &seg) const;
// 格式刷格式梁时数据拷贝
void CopyData(TDbStruBeam *pBeam);
// 获得端点处融合后生成的闭合poly2d
void GetPoly2dBehindIntegrate(TGGePoly2D &poly2d) const;
// 删除端点处不可见的线段
void DeleteInVisiblePt(bool bStart, TGGeVisibilityPoly2D &poly) const;
// 绘制加粗的线
Acad::ErrorStatus DrawWeightLine2d(TGGiExplodeDrawBase &dc) const;
// 融合后的生成的TGGeVisibilityPoly2D
void GetIntegratedPoly2d(TGGeVisibilityPoly2D &poly) const;
// 梁平行时 ,获得封口线, poly的0索引点与左墙线起点或终点重合
void GetSideLine2d(bool bStart, const AcDbObjectId &idBeam, const TBaseWallLine &wallLine, TGGeVisibilityPoly2D &poly) const;
// 获得柱与墙融合后的端点连接线
void GetIntegratedPoly2dForColumn(bool bStart, TGGeVisibilityPoly2D &poly) const;
// 遮挡住梁的板
void GetCoverSlab(AcDbObjectIdArray& idArr) const;
// 绘制板遮挡住的梁线
Acad::ErrorStatus DrawBeamLine2dForCoverSlab(TGGiExplodeDrawBase &dc, const TGGeVisibilityPoly2D &poly) const;
// 获得填充实体时,需要裁剪实体的外包框
void GetClipedPoly2d(std::vector<TGGePoly2D> &vecPoly) const;
// 关联移动
void AssociateMove(const AcDbIntArray& indices, const AcGeVector3d& offset);
// 独立移动
void SingleMove(const AcDbIntArray& indices, const AcGeVector3d& offset);
// 梁标注
void DrawBH(TGGiExplodeDrawBase &dc) const;
// 构件编号
void DrawClab(TGGiExplodeDrawBase &dc) const;
// 单元编号
void DrawCellNo(TGGiExplodeDrawBase &dc) const;
// 刚域
void DrawRG(TGGiExplodeDrawBase &dc) const;
// add by wjx on 111219 显示梁荷载
void DrawBeamLoad(TGGiExplodeDrawBase &dc) const;
// 设置梁的荷载数据
void DrawBeamLoadText2d(TStruLoad loadData, double dAugle, double &dDis, TGGiExplodeDrawBase &dc) const;
// 得到中心线的中心点和圆心得连线的角度和距离
double GetCenetrAngle(double &dDis) const;
// 确定左右端点,以x方向和y方向确定
BOOL GetLRPoint(XPoint &ptStart, XPoint &ptEnd)const;
// 绘制3d的荷载信息
void DrawBeamLoad3D(TGGiExplodeDrawBase &dc)const;
// 在线的中/起始/终止点位置画箭头
void DrawArrow3D(TGGeCurveSegment seg, TGGiExplodeDrawBase &dc, int nEdgeFalg=1)const;
void DrawLoadText3D(TStruLoad loadData,double dAugle,double &dZ, TGGiExplodeDrawBase &dc)const;
// 绘制特殊梁
void DrawStruBeam(TGGiExplodeDrawBase &dc)const;
// add by wjx on 120224 弯矩包络图
void DrawMGraph(TGGiExplodeDrawBase &dc)const;
void DrawMGraphText(TGGiExplodeDrawBase &dc)const;
// add by wjx on 120330绘制剪力包络图
void DrawSGraph(TGGiExplodeDrawBase &dc)const;
// add by wjx on 120331 绘制剪力包络图的文字
void DrawSGraphText(TGGiExplodeDrawBase &dc)const;
//得到显示配筋面积的梁线
TGGeCurveSegment GetBeamLine()const;
CString FormatText(double dValue, int nPrec) const;
//绘制配筋图
void DrawReinGragh(TGGiExplodeDrawBase &dc) const;
//绘制配筋面积数据
void DrawReinText(TGGiExplodeDrawBase &dc, double dLeft, double dRight, double dMidUp, double dMidDown, int nPrec) const;
//计算截面有效面积
double CalSectionArea()const;
// 裂缝图
void DrawCrackGraph(TGGiExplodeDrawBase& dc) const;
// 挠度图
void DrawDeflectGraph(TGGiExplodeDrawBase& dc) const;
private:
static const Adesk::UInt8 g_nVersion;
};
#endif
#endif