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

129 lines
4.8 KiB
C++

#ifndef __DBSLAB_H
#define __DBSLAB_H
//#include "DbEntity.h"
class TDbHandRail;
class TARCH_EXP TDbSlab: public TDbEntity {
DECLARE_TENTBASE();
ACRX_DECLARE_MEMBERS(TDbSlab);
private:
const static Adesk::UInt8 g_nVersion;
protected:
XPoly2D m_polyOutline; //平台轮廓和标高
DList<XPoly2D> m_lstHoles;
double m_nThickness; //<0, 则基准面在顶部
Adesk::UInt32 m_nInvisibleEdge; //不可见的边
AcDbVoidPtrArray m_tempRailArray;
// TArch6 member
XVector3D m_vtNormal;
// Upgrade from TArch5 to TArch6 only
XVector3D _GetNormal() const;
// Downgrade from TArch6 to TArch5 only
void _SetNormal(XVector3D vt);
public:
TDbSlab();
~TDbSlab();
virtual BOOL IsValid() const;
virtual bool IsModelEntity() const{return true;}
virtual bool IsClipMe(const TEntityBase* pEnt=NULL)const;//ok
virtual void CopyPropertiesFrom(AcDbEntity *pSrcEntity, unsigned gMatchFlag);
virtual Acad::ErrorStatus DownGradeSave(int nDrawMode, AcDbVoidPtrArray &entSet, BOOL *bErase);
virtual Acad::ErrorStatus GetPathPoly(XPoly2D& poly,AcGeVector3d &normal)const;
virtual Acad::ErrorStatus SetPathPoly(const XPoly2D& poly,const AcGeVector3d &normal);
// Overriden function from AcDbEntity
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);
// drived from TDbEntity
virtual Acad::ErrorStatus ExplodeOrDraw3d(XExplodeDraw &dc) const;
virtual Acad::ErrorStatus ExplodeOrDraw2d(XExplodeDraw &dc) const;
virtual void GetTips(DList<TObjInfoUnit> &) const; //取动态属性显示数据
virtual Acad::ErrorStatus GetGripText(int i, CString &cs) const;
virtual const TCHAR *GetDefaultLayer() const;
virtual Acad::ErrorStatus GetExtents2d(XPoint &ptLow, XPoint &ptUp) const;
virtual Acad::ErrorStatus GetExtents(XPoint &ptLow, XPoint &ptUp) 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 void UnionScale(double nScale);
// cet 2012.11.12 add 支持导出XML
virtual CString GetXml(const AcGeMatrix3d& mat) const;
virtual Acad::ErrorStatus subDeepClone(AcDbObject* pOwnerObject,
AcDbObject*& pClonedObject,
AcDbIdMapping& idMap,
Adesk::Boolean isPrimary) const;
virtual Acad::ErrorStatus subWblockClone( AcRxObject* pOwnerObject,
AcDbObject*& pClonedObject,
AcDbIdMapping& idMap,
Adesk::Boolean isPrimary) const;
XVector3D GetNormal() const;
int GetEdgeNum() const;
BOOL GetVisibilityAt(int idx) const;
double GetThickness() const;
double GetElevation() const;
const XPoly2D & GetOutline() const;
const DList<XPoly2D> & GetHoles() const;
void SetNormal(XVector3D vt);
void SetThickness(double h);
void SetOutline(const XPoly2D &poly);
void SetVisibilityAt(int idx, BOOL bTrue);
void SetVisibilityAll(BOOL bTrue);
void SetElevation(double elev);
BOOL AddHole(const XPoly2D &polyHole);
BOOL RemoveHole(int idx);
// bHitFlag, 高16--洞序号, 低16--边号
BOOL HitTestOnHole(const XPoint &ptTest, Adesk::UInt32 *bHitFlag) const;
int HitTestOnOutline(const XPoint &ptTest) const;
void AddTempRail(TDbHandRail *pRail);
void ResetTempRailArray() {
while(!m_tempRailArray.isEmpty())
m_tempRailArray.removeLast();
}
// 0--没有命中; 1--任意穿越; 2--任意包含; 3--重边穿越; 4--重边包含
// segHit--重边穿越或包含时的纠正位置
int HitTest(const XCurveSegment &seg, double nTol, XCurveSegment &segHit) const;
// 工程量属性
// 没有扣除洞口
double GetPerimeter0() const {
return GetOutline().Distance2d();
}
double GetBottomArea0() const {
return GetOutline().Area();
}
double GetSideArea0() const {
return GetOutline().Distance2d()*fabs(GetThickness());
}
double GetVolume0() const {
return GetBottomArea0()*fabs(GetThickness());
}
// 扣除洞口
double GetPerimeter() const;
double GetBottomArea() const;
double GetSideArea() const;
double GetVolume() const;
};
#endif