//-----------------------------------------------------------------------------+ // 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 &) 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 §ionRecords, 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 &lstResult, TDPtrList &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& lstSegsSurFace) const; //通过一点得到柱子的保温线数组中与该点相连的连续的线段数组 void GetConcatLine(TADSGePoint3d ptStart, TDPtrList& lstSegsSrc, TDPtrList& lstSegsCon) const; //得到最终的保温线 void GetColSurFaceFinal(TDPtrList& lstSegsSurFinal) const; //判断该方向上是否有保温线 bool HasSurFaceWithVector(AcGeVector3d vtDir) const; bool HasSurFaceWithVector(AcGeVector3d vtDir, const TDPtrList& lstSegsSurFace) const; //判断该方向上是否有保温线,并返回保温线数组 bool GetSurFaceWithVector(AcGeVector3d vtDir, TDPtrList& 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& vectLoads); //获得荷载数组 bool GetLoadsArray(std::vector& vectLoads)const; //清除荷载数组 void ClearLoadsArray(); // add by wjx on 120329 轴力包络图 virtual bool SetNGraArray(const std::vector& vecData); //获得轴力包络图数组 virtual bool GetNGraArray(std::vector& vecData)const; //清除弯轴力包络图数组 virtual void ClearNGraArray(); //底层墙柱 //X向最大剪力 bool SetVXMaxArray(const std::vector& vecData); bool GetVXMaxArray(std::vector& vecData)const; void ClearVXMaxArray(); //Y向最大剪力 bool SetVYMaxArray(const std::vector& vecData); bool GetVYMaxArray(std::vector& vecData)const; void ClearVYMaxArray(); //最大轴力 bool SetNMaxArray(const std::vector& vecData); bool GetNMaxArray(std::vector& vecData)const; void ClearNMaxArray(); //最小轴力 bool SetNMinArray(const std::vector& vecData); bool GetNMinArray(std::vector& vecData)const; void ClearNMinArray(); //X向最大弯矩 bool SetMXMaxArray(const std::vector& vecData); bool GetMXMaxArray(std::vector& vecData)const; void ClearMXMaxArray(); //Y向最大弯矩 bool SetMYMaxArray(const std::vector& vecData); bool GetMYMaxArray(std::vector& vecData)const; void ClearMYMaxArray(); // 内力数据 bool SetForceArray(const std::vector& vecData); bool GetForceArray(std::vector& vecData)const; void ClearForceArray(); // 活载标准内力数据 bool SetVSForceArray(const std::vector& vecData); bool GetVSForceArray(std::vector& vecData)const; void ClearVSForceArray(); // 恒载标准内力数据 bool SetSForceArray(const std::vector& vecData); bool GetSForceArray(std::vector& vecData)const; void ClearSForceArray(); //柱正截面配筋面积数据 bool SetRSArray(const std::vector& vecRSData); bool GetRSArray(std::vector& vecRSData)const; void ClearRSArray(); //柱斜截面配筋面积数据 bool SetRSSArray(const std::vector& vecRSData); bool GetRSSArray(std::vector& 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& vecData); bool GetAt(LPCTSTR pszKey,std::vector& vecData)const; void RemoveNGraKey(LPCTSTR pszKey); bool SetAt(LPCTSTR pszKey,const std::vector& vectLoads); bool GetAt(LPCTSTR pszKey,std::vector& vectLoads)const; void RemoveLoadsKey(LPCTSTR pszKey); // 截面配筋面积数据 bool SetAt(LPCTSTR pszKey,const std::vector& vecData); bool GetAt(LPCTSTR pszKey,std::vector& vecData)const; void RemoveRSDataKey(LPCTSTR pszKey); // 构造截面 bool ConstructShape(const TADSGePoint3d &pt, TGGePoly2D &poly) const; #endif public: TDPtrList 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& vecData); bool GetForceArray(LPCTSTR pszKey, std::vector& vecData)const; void ClearForceArray(LPCTSTR pszKey); #endif private: const static Adesk::UInt8 g_nVersion; }; #endif