//------------------------------------------------------------------------+ // 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 &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 §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& arBaseWallLinesS, TDPtrList& arBaseWallLinesM, TDPtrList& 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& vectLoads); //获得荷载数组 virtual bool GetLoadsArray(std::vector& vectLoads)const; //清除荷载数组 virtual void ClearLoadsArray(); // add by wjx on 120223 弯矩包络图 virtual bool SetMGraArray(const std::vector& vectMin, const std::vector& vectMax); //获得弯矩包络图数组 virtual bool GetMGraArray(std::vector& vectMin, std::vector& vectMax)const; //清除弯矩包络图数组 virtual void ClearMGraArray(); // add by wjx on 120223 剪力包络图 virtual bool SetSGraArray(const std::vector& vectMin); //获得剪力包络图数组 virtual bool GetSGraArray(std::vector& 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& vecRSData); bool GetRSArray(std::vector& vecRSData)const; void ClearRSArray(); //梁正截面实际配筋面积数据 bool SetCRSArray(const std::vector& vecRSData); bool GetCRSArray(std::vector& vecRSData)const; void ClearCRSArray(); //梁斜截面配筋面积数据 bool SetRSSArray(const std::vector& vecRSData); bool GetRSSArray(std::vector& 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& deflectData); bool GetDeflectArray(std::vector& 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 &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