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

506 lines
17 KiB
C++

//-----------------------------------------------------------------------------+
// Copyright (C), 1998-2007, Beijing Tangent Software Co. Ltd.
// = FileName : TDbColumn.cpp
// = Version : ver2.0
// = Author : xlc
// = CreateDate : 2002-09-09
// = Description: 柱子类的定义
// = Maintainers:
//
//-----------------------------------------------------------------------------+
#ifndef _TDBCOLUMN_H_
#define _TDBCOLUMN_H_
#ifndef _TDBENTITY_H_
#include "TDbEntity.h"
#endif
#ifndef _TCOLUMNDATA_H_
#include "TColumnData.h"
#endif
#ifndef _TWALLBASE_H_
#include "TWallBase.h"
#endif
#ifndef _TDBWALL_H_
#include "TDbWall.h"
#endif
#ifdef TASD
#ifndef _TSTRULOAD_H_
#include "TStruLoad.h"
#endif
#ifndef _TCOMBSECTFORCEDATA_H_
#include "TCombSectForceData.h"
#endif
#ifndef _TCOMBFORCEDATA_H_
#include "TCombForceData.h"
#endif
#ifndef _TREINSECTDATA_H_
#include "TReinSectData.h"
#endif
#ifndef _TREINDATA_H_
#include "TReinData.h"
#endif
#endif
class TARCH_EXP TDbColumn: public TDbEntity, public TColumnData,public TWallBase
{
friend class TDbWall;
DECLARE_TENTBASE();
public:
TDbColumn();
ACRX_DECLARE_MEMBERS(TDbColumn);
// Overriden function from AcDbEntity
virtual Acad::ErrorStatus audit(AcDbAuditInfo* pAuditInfo);
virtual Acad::ErrorStatus subGetClassID(CLSID* pClsid) const;
virtual Acad::ErrorStatus dwgInFields (AcDbDwgFiler*);
virtual Acad::ErrorStatus dwgOutFields(AcDbDwgFiler*) const;
virtual Acad::ErrorStatus dxfInFields (AcDbDxfFiler*);
virtual Acad::ErrorStatus dxfOutFields(AcDbDxfFiler*) const;
virtual Acad::ErrorStatus subGetGripPoints(AcGePoint3dArray& gripPoints,
AcDbIntArray& osnapModes,
AcDbIntArray& geomIds) const;
virtual Acad::ErrorStatus subGetStretchPoints(AcGePoint3dArray & stretchPoints) const;
virtual Acad::ErrorStatus subTransformBy(const AcGeMatrix3d& xform);
virtual Acad::ErrorStatus subMoveGripPointsAt(const AcDbIntArray& indices,
const AcGeVector3d& offset);
virtual Acad::ErrorStatus subMoveStretchPointsAt(const AcDbIntArray& indices,
const AcGeVector3d& offset);
virtual Acad::ErrorStatus subGetOsnapPoints(AcDb::OsnapMode osnapMode,
INT_PTR gsSelectionMark,
const AcGePoint3d& pickPoint,
const AcGePoint3d& lastPoint,
const AcGeMatrix3d& viewXform,
AcGePoint3dArray& snapPoints,
AcDbIntArray& geomIds) const;
virtual Acad::ErrorStatus subWblockClone(AcRxObject* pOwner,
AcDbObject*& pClonedObject,
AcDbIdMapping& idMap,
Adesk::Boolean isPrimary) const;
// 为保留旧状态重载
virtual Acad::ErrorStatus subOpen(AcDb::OpenMode mode);
// drived from TDbEntity
virtual BOOL IsValid() const;
virtual bool IsModelEntity() const;
virtual void CopyPropertiesFrom(AcDbEntity *pSrcEntity, unsigned gMatchFlag);
virtual Acad::ErrorStatus GetPathPoly(TGGePoly2D &poly,AcGeVector3d&vt)const;
virtual Acad::ErrorStatus SetPathPoly(const TGGePoly2D &poly,const AcGeVector3d&vt);
virtual Acad::ErrorStatus ExplodeOrDraw3d(TGGiExplodeDrawBase &dc) const;
virtual Acad::ErrorStatus ExplodeOrDraw2d(TGGiExplodeDrawBase &dc) const;
//add by xlc on 110407
virtual Acad::ErrorStatus DownGradeSave(int nDrawMode, AcDbVoidPtrArray &entSet, BOOL *bErase);
//是否去裁剪
virtual bool IsMeClip()const;
//取动态属性显示数据
virtual int GetCtrlToggleIndex()const;
virtual void GetTips(TDPtrList<TObjInfoUnit> &) const;
#if ADS > 15
virtual void CreateGrip();
virtual Acad::ErrorStatus EntityToDim(long iGrip,long iDim,const AcDbEntity*pEnt);
virtual Acad::ErrorStatus DimToEntity(long iGrip,long iDim,double newValue,const AcGeVector3d& offset);
#endif
virtual const TCHAR * GetDefaultLayer() const;
virtual Acad::ErrorStatus GetGripText(int i, CString &cs) const;
//override TWallBase
virtual AcDbEntity* GetMyEntity()const;
virtual int GetMaterialIndex()const;
virtual TWallBase::Usage GetUsage()const;
//add by wlw on 101026
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;
// sg add 101115,支持统一标高
virtual bool UnifyElevation(double dElevation = 0.0);
int GetPriority()const;
BOOL IsFortifyColumn() const;
BOOL IsShortColumn()const;
BOOL IsLabelEnabled() const;
void SetFortifyColumn(BOOL bTrue);
void SetShortColumn(BOOL bTrue);
void SetColumnFlag(Adesk::UInt16 nFlag);
void SetLayerHatch2d(AcDbObjectId id);
AcDbObjectId GetLayerHatch2d() const;
TADSGePoint3d GetLabelPos(BOOL bIsDefault = FALSE) const;
void SetLabelPos(TADSGePoint3d pt);
void EnableLabel(BOOL bTrue);
const TCHAR *GetLabel() const;
void SetLabel(const TCHAR *sz);
AcDbObjectId GetTextStyle() const;
void SetTextStyle(AcDbObjectId id);
AcDbObjectId GetLayerText() const;
void SetLayerText(AcDbObjectId id);
double GetTextHeight(BOOL bAsPaperUnit = TRUE) const;
void SetTextHeight(double dHeight, BOOL bAsPaperUnit = TRUE);
const TCHAR* GetMaterialText() const;
const TCHAR* GetHatchPattern() const;
Adesk::UInt16 GetHatchColor() const;
Adesk::UInt16 GetColumnFlag() const;
//取本墙线厚度,不管加粗开关是否开启
double GetLineWeight(BOOL bAsPaperUnit = TRUE) const;
void GetAxisColuInfo(TADSGePointDir2d &ptLoc, TVector3D &vtOffset) const;
// Helper Method
Acad::ErrorStatus AddLinkWallId(const AcDbObjectId &id);
void RemoveLinkWallId(const AcDbObjectId&id);
void ResetLinkage();
void PreErase()const;
void GetThinCurves(TDPtrList<TGGeCurveSegment> &lstResult, TDPtrList<TGGeCurveSegment> &lstResultIn) const;
void UpdateAssocWallGraphics() const;
//柱子保温接口函数wlw
//是否有保温
bool IsInsulateOnColumn() const;
//设置保温标识
void SetInsulateOnColumn(bool bAdd = true);
void SetInsulateThick(double nThick);
double GetInsulateThick() const;
void SetInsulateLayerId(AcDbObjectId id);
AcDbObjectId GetInsulateLayerId() const;
//通过一个向量,增加该方向上的保温层。vtdir = 柱子边线上一点 - 柱子原点
bool AppendInsulateDir(AcGeVector3d vtDir);
//删除该方向上的保温层vtdir = 柱子边线上一点 - 柱子原点
bool RemoveInsulateDir(AcGeVector3d vtDir);
//绘制保温层
void DrawInsulateLine(TGGiExplodeDrawBase &dc) const;
//nside = 1 加内墙方向柱子保温 = 0加外墙方向柱子保温
void DrawInsulateInExt(int nSide);
///*柱子保温内部计算函数
//从xdata中取得柱子的保温标识和有保温线的方向数组
bool ReadInsulateFromXData(bool& bHasInsulate, AcGeVector3dArray& arDir) const;
//将柱子的保温标识和保温线的方向数组存入xdata
bool WriteInsulateToXData(bool bHasInsulate, const AcGeVector3dArray& arDir);
//得到柱子的保温poly2D, bPerfect控制是否得到完美外轮廓,柱子3D显示将弥补墙的缺角
void GetColSurFacePoly2D(TGGePoly2D& polySurFace,BOOL bPerfect = FALSE) const;
//得到柱子的保温裁剪后的线段数组
void GetColSurFaceLines(TDPtrList<TGGeCurveSegment>& lstSegsSurFace) const;
//通过一点得到柱子的保温线数组中与该点相连的连续的线段数组
void GetConcatLine(TADSGePoint3d ptStart, TDPtrList<TGGeCurveSegment>& lstSegsSrc, TDPtrList<TGGeCurveSegment>& lstSegsCon) const;
//得到最终的保温线
void GetColSurFaceFinal(TDPtrList<TGGeCurveSegment>& lstSegsSurFinal) const;
//判断该方向上是否有保温线
bool HasSurFaceWithVector(AcGeVector3d vtDir) const;
bool HasSurFaceWithVector(AcGeVector3d vtDir, const TDPtrList<TGGeCurveSegment>& lstSegsSurFace) const;
//判断该方向上是否有保温线,并返回保温线数组
bool GetSurFaceWithVector(AcGeVector3d vtDir, TDPtrList<TGGeCurveSegment>& lstSegsSurFace) const;
//找到一个seg与outpoly的交点
bool GetIntersectWithCurveSeg(const TGGeCurveSegment& segSrc, TADSGePoint3d& ptInter);
bool GetIntersectWithLine(const TGGeLine& line, TADSGePoint3d& ptInter);
//配合DrawInsulateInExt函数使用
BOOL DrawInsulateInExtByPt(int nSide,const TGGeCurveSegment& segIns);
//柱子保温内部计算函数*/
//T20新材料wlw add140214
CString GetT20ColMat() const;
void SetT20ColMat(CString sMat);
#ifdef TASD
//结构数据
//add by xlc on 120118
//设置荷载数组
bool SetLoadsArray(const std::vector<TStruLoad>& vectLoads);
//获得荷载数组
bool GetLoadsArray(std::vector<TStruLoad>& vectLoads)const;
//清除荷载数组
void ClearLoadsArray();
// add by wjx on 120329 轴力包络图
virtual bool SetNGraArray(const std::vector<TCombForceData>& vecData);
//获得轴力包络图数组
virtual bool GetNGraArray(std::vector<TCombForceData>& vecData)const;
//清除弯轴力包络图数组
virtual void ClearNGraArray();
//底层墙柱
//X向最大剪力
bool SetVXMaxArray(const std::vector<TCombForceData>& vecData);
bool GetVXMaxArray(std::vector<TCombForceData>& vecData)const;
void ClearVXMaxArray();
//Y向最大剪力
bool SetVYMaxArray(const std::vector<TCombForceData>& vecData);
bool GetVYMaxArray(std::vector<TCombForceData>& vecData)const;
void ClearVYMaxArray();
//最大轴力
bool SetNMaxArray(const std::vector<TCombForceData>& vecData);
bool GetNMaxArray(std::vector<TCombForceData>& vecData)const;
void ClearNMaxArray();
//最小轴力
bool SetNMinArray(const std::vector<TCombForceData>& vecData);
bool GetNMinArray(std::vector<TCombForceData>& vecData)const;
void ClearNMinArray();
//X向最大弯矩
bool SetMXMaxArray(const std::vector<TCombForceData>& vecData);
bool GetMXMaxArray(std::vector<TCombForceData>& vecData)const;
void ClearMXMaxArray();
//Y向最大弯矩
bool SetMYMaxArray(const std::vector<TCombForceData>& vecData);
bool GetMYMaxArray(std::vector<TCombForceData>& vecData)const;
void ClearMYMaxArray();
// 内力数据
bool SetForceArray(const std::vector<TCombSectForceData>& vecData);
bool GetForceArray(std::vector<TCombSectForceData>& vecData)const;
void ClearForceArray();
// 活载标准内力数据
bool SetVSForceArray(const std::vector<TCombSectForceData>& vecData);
bool GetVSForceArray(std::vector<TCombSectForceData>& vecData)const;
void ClearVSForceArray();
// 恒载标准内力数据
bool SetSForceArray(const std::vector<TCombSectForceData>& vecData);
bool GetSForceArray(std::vector<TCombSectForceData>& vecData)const;
void ClearSForceArray();
//柱正截面配筋面积数据
bool SetRSArray(const std::vector<TReinSectData>& vecRSData);
bool GetRSArray(std::vector<TReinSectData>& vecRSData)const;
void ClearRSArray();
//柱斜截面配筋面积数据
bool SetRSSArray(const std::vector<TReinSectData>& vecRSData);
bool GetRSSArray(std::vector<TReinSectData>& vecRSData)const;
void ClearRSSArray();
//柱实际配筋面积数据
bool SetRAreaArray(const TReinData& raData);
bool GetRAreaArray(TReinData& raData)const;
void ClearRAreaArray();
enum ColuKind
{
kColu = 1, //普通柱
kFrameColu, //框架柱
kEmbColu, //暗柱
kTieColu, //构造柱
kConerColu, //角柱
kTransColu, //转换柱
kTransConColu //转换角柱
};
//底层墙柱内力显示工况
enum SColuForce
{
eNormal = 0,
eVXMax,
eVYMax,
eNMax,
eNMin,
eMXMax,
eMYMax
};
double GetBottomElev() const; //ok
void SetBottomElev(double dElev); //ok
double GetTopElev() const;
void SetTopEleve(double dElev);
//铰接属性
int GetHinge()const; //返回值 0:普通柱,1:上端铰柱,2:下端铰柱,3:两端铰柱
void SetHinge(BOOL bTop, BOOL bTrue);
//柱填充图层
AcDbObjectId GetLayerHatch() const;
void SetLayerHatch(AcDbObjectId idLayer);
//柱尺寸图层
AcDbObjectId GetLayerDim() const;
void SetLayerDim(AcDbObjectId idLayer);
//柱编号图层
AcDbObjectId GetLayerNum() const;
void SetLayerNum(AcDbObjectId idLayer);
//柱标注图层
AcDbObjectId GetLayerMark() const;
void SetLayerMark(AcDbObjectId idLayer);
//柱截面注写图层
AcDbObjectId GetLayerSect() const;
void SetLayerSect(AcDbObjectId idLayer);
//柱表注写图层
AcDbObjectId GetLayerTbl() const;
void SetLayerTbl(AcDbObjectId idLayer);
//柱平法纵筋图层
AcDbObjectId GetLayerRBarV() const;
void SetLayerRBarV(AcDbObjectId idLayer);
//柱平法箍筋图层
AcDbObjectId GetLayerRBarR() const;
void SetLayerRBarR(AcDbObjectId idLayer);
//柱实配面积图层
AcDbObjectId GetLayerRealArea() const;
void SetLayerRealArea(AcDbObjectId idLayer);
//柱双偏压图层
AcDbObjectId GetLayerChkBias() const;
void SetLayerChkBias(AcDbObjectId idLayer);
//柱轴压比图层
AcDbObjectId GetLayerChkRati() const;
void SetLayerChkRati(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 GetTextStyleRB() const;
void SetTextStyleRB(AcDbObjectId idLayer);
bool SetAt(LPCTSTR pszKey,const std::vector<TCombForceData>& vecData);
bool GetAt(LPCTSTR pszKey,std::vector<TCombForceData>& vecData)const;
void RemoveNGraKey(LPCTSTR pszKey);
bool SetAt(LPCTSTR pszKey,const std::vector<TStruLoad>& vectLoads);
bool GetAt(LPCTSTR pszKey,std::vector<TStruLoad>& vectLoads)const;
void RemoveLoadsKey(LPCTSTR pszKey);
// 截面配筋面积数据
bool SetAt(LPCTSTR pszKey,const std::vector<TReinSectData>& vecData);
bool GetAt(LPCTSTR pszKey,std::vector<TReinSectData>& vecData)const;
void RemoveRSDataKey(LPCTSTR pszKey);
// 构造截面
bool ConstructShape(const TADSGePoint3d &pt, TGGePoly2D &poly) const;
#endif
public:
TDPtrList<AcDbSoftPointerId> m_lstWallIds;
//TArch8
double m_nInsulateThick; //保温层厚
AcDbHardPointerId m_idLayerInsulate; //保温图层
protected:
Adesk::UInt16 _GetColumnFlag() const;
void _SetColumnFlag(Adesk::UInt16 val);
protected:
//TArch6 data
Adesk::UInt16 m_nColuFlag; //柱子控制标记
AcDbHardPointerId m_idLayerHatch2d;
TCString m_sLabel; //柱子编号,为结构做准备
TADSGePoint3d m_ptLabel; //标注点
AcDbHardPointerId m_idTextStyle, m_idLayerText; //文字样式
double m_nTextHeight; //文字高度(图纸尺寸)
#ifdef TASD
//结构数据
AcDbHardPointerId m_idLayerHatch; //柱填充图层
AcDbHardPointerId m_idLayerDim; //柱尺寸图层
AcDbHardPointerId m_idLayerNum; //柱编号图层
AcDbHardPointerId m_idLayerMark; //柱标注图层
AcDbHardPointerId m_idLayerSect; //柱截面注写图层
AcDbHardPointerId m_idLayerTbl; //柱表注写图层
AcDbHardPointerId m_idLayerRBarV; //柱平法纵筋图层
AcDbHardPointerId m_idLayerRBarR; //柱平法箍筋图层
AcDbHardPointerId m_idLayerRealArea; //柱实配面积图层
AcDbHardPointerId m_idLayerChkBias; //柱双偏压图层
AcDbHardPointerId m_idLayerChkRati; //柱轴压比图层
AcDbHardPointerId m_idLayerForce; //柱内力结果图层
AcDbHardPointerId m_idLayerCalcArea; //柱计算配筋图层
AcDbHardPointerId m_idLayerLoad; //柱荷载
AcDbHardPointerId m_idLayerLoadL; //活荷值
AcDbHardPointerId m_idLayerLoadC; //恒荷值
AcDbHardPointerId m_idTextStyleRB; //文字样式
private:
// 构造矩形
bool ConstructRectShape(const TADSGePoint3d &pt, TGGePoly2D &poly) const;
// 构造工字形
bool ConstructIShape(const TADSGePoint3d &pt, TGGePoly2D &poly) const;
// 构造圆形
bool ConstructCircleShape(const TADSGePoint3d &pt, TGGePoly2D &poly) const;
// 通过m_polyOutline计算轴转角
double GetCalcAngle() const;
Acad::ErrorStatus StruExplodeOrDraw3d(TGGiExplodeDrawBase &dc) const;
Acad::ErrorStatus StruExplodeOrDraw2d(TGGiExplodeDrawBase &dc) const;
// 柱子标注
void DrawBH(TGGiExplodeDrawBase &dc) const;
// 构件编号
void DrawClab(TGGiExplodeDrawBase &dc) const;
// 单元编号
void DrawCellNo(TGGiExplodeDrawBase &dc) const;
// 刚域
void DrawRG(TGGiExplodeDrawBase &dc) const;
// 坐标
void DrawCoordinate(TGGiExplodeDrawBase &dc)const;
// 荷载
void DrawColuLoad(TGGiExplodeDrawBase &dc, int nFlag2d3d)const;
// 2d荷载
void DrawColuLoad2d(TGGiExplodeDrawBase &dc, TStruLoad loadData,
XPoint ptLoadS, XPoint ptLoadE, double dArrow)const;
// 3d荷载
void DrawColuLoad3d(TGGiExplodeDrawBase &dc, TStruLoad loadData)const;
// 2d荷载文字
void DrawLoadText2d(TGGiExplodeDrawBase &dc, TStruLoad loadData,
XPoint ptInsert, double dTextDis)const;
// 3d荷载文字
void DrawLoadText3d(TGGiExplodeDrawBase &dc, TStruLoad loadData, double &dDis)const;
// 特殊柱填充
void SepColuHach(TGGiExplodeDrawBase &dc)const;
// add by wjx on 120329绘制轴力图
void DrawNGraph(TGGiExplodeDrawBase &dc)const;
//底层墙柱内力图
void DrawWallColu(TGGiExplodeDrawBase &dc)const;
//配筋面积图
void DrawColuRein(TGGiExplodeDrawBase &dc)const;
bool SetForceArray(LPCTSTR pszKey, const std::vector<TCombSectForceData>& vecData);
bool GetForceArray(LPCTSTR pszKey, std::vector<TCombSectForceData>& vecData)const;
void ClearForceArray(LPCTSTR pszKey);
#endif
private:
const static Adesk::UInt8 g_nVersion;
};
#endif