#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 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 &) 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 & 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