457 lines
15 KiB
C++
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> §ionRecords,
|
|
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 |