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

160 lines
5.1 KiB
C++

#ifndef __DBSLOPE_H
#define __DBSLOPE_H
//反应器基类
class TReactor {
public:
TReactor();
TReactor(const TReactor& src);
~TReactor();
protected:
DList<AcDbSoftPointerId> m_lstReactor;
public:
virtual BOOL IsValid() const;
BOOL HasReactor() const;
BOOL IsExist(const AcDbObjectId& objId);
void GetReactors(DList<AcDbObjectId>& lstReactorId) const;
void GetReactors(AcDbObjectIdArray& arReactorId) const;
void SetReactors(const DList<AcDbObjectId>& lstReactorId);
void SetReactors(const AcDbObjectIdArray& arReactorId);
Acad::ErrorStatus Attach(const AcDbObjectId& objId);
Acad::ErrorStatus Attach(AcDbObject* pObj);
Acad::ErrorStatus Detach(const AcDbObjectId& objId);
Acad::ErrorStatus Detach(AcDbObject* pObj);
void DetachAll();
//设置可见性
BOOL IsShowReactor() const;
void ShowReactor(BOOL bShow=FALSE);
//删除实体的指定的永久响应
void RemovePersistentReactor(const AcDbObjectId& objId);
//当FALSE时,判断实体是否有永久响应,若有不删除
void EraseReactor(BOOL bEraseAll=FALSE);
virtual void NewReactor(Adesk::UInt16 color=1){}
public:
void TransformBy(const AcGeMatrix3d xform);
Acad::ErrorStatus DwgInFields(AcDbDwgFiler *pFiler);
Acad::ErrorStatus DwgOutFields(AcDbDwgFiler *pFiler) const;
Acad::ErrorStatus DxfInFields(AcDbDxfFiler *pFiler);
Acad::ErrorStatus DxfOutFields(AcDbDxfFiler *pFiler) const;
};
class TSlope: public XPoly2D {
public:
DList<TSlope> m_subSlopes; //内部的斜坡等高线
public:
TSlope():XPoly2D(1) {}
public:
void ResetAll();
BOOL IsValid() const;
void GetPolys(DList<XPoly2D> &lstPoly) const;
void ProcessSlope(DList<XPoly2D> &sortedRegions, TSlope *parent=NULL);
public:
Acad::ErrorStatus DwgInFields (AcDbDwgFiler*);
Acad::ErrorStatus DwgOutFields(AcDbDwgFiler*) const;
Acad::ErrorStatus ExplodeOrDraw2d(XExplodeDraw &dc) const;
Acad::ErrorStatus ExplodeOrDraw3d(XExplodeDraw &dc,
BOOL bSlope=FALSE, int nVertexNum=90) const;
void TransformBy(const AcGeMatrix3d xform);
};
//等高线实体(包括斜坡、梯田)
class TARCH_EXP TDbSlope: public TDbEntity, public TReactor {
DECLARE_TENTBASE();
ACRX_DECLARE_MEMBERS(TDbSlope);
public:
TDbSlope();
private:
const static Adesk::UInt8 g_nVersion;
protected:
Adesk::UInt16 m_nControlFlag;//标志,预留备用
Adesk::UInt16 m_nVertexNum;//顶点数
Adesk::UInt16 m_nCMFlag;//显示(二维显示)
BOOL m_bShowSlope;//1-显示斜坡,0-显示梯田
BOOL m_bEnableReact;//反应器是否有效
BOOL m_bTransformBy;
public:
TSlope m_slope;
public:
virtual BOOL IsValid() const;
virtual bool IsModelEntity() const{return true;}
//截面路径(封闭的)上的顶点数(分段数)
void SetVertexNum(int nNum=90);
int GetVertexNum() const;
//显示模式:TRUE-显示斜坡,FALSE-显示梯田
void ShowSlope(BOOL bSlope=TRUE);
BOOL IsShowSlope() const;
//使响应有(无)效
void EnableReact(BOOL bFlag=TRUE);
BOOL IsEnableReact() const;
//二维显示
void SetHas2D(BOOL bHas=TRUE);
BOOL Has2D() const;
//使transformBy有无效
void EnableTransformBy(BOOL bFlag);
BOOL IsTransformBy() const;
Acad::ErrorStatus DrawSlope3d(XExplodeDraw &dc) const;
public:
// Override 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 subTransformBy(const AcGeMatrix3d& xform);
virtual Acad::ErrorStatus subGetOsnapPoints(
AcDb::OsnapMode osnapMode,
INT_PTR gsSelectionMark,
const AcGePoint3d& ptPick,
const AcGePoint3d& lastPoint,
const AcGeMatrix3d& viewXform,
AcGePoint3dArray& snapPoints,
AcDbIntArray& geomIds) const;
virtual Acad::ErrorStatus subDeepClone(
AcDbObject* pOwner,
AcDbObject*& pClonedObject,
AcDbIdMapping& idMap,
Adesk::Boolean isPrimary) const;
virtual Acad::ErrorStatus subErase(Adesk::Boolean bErasing);
// Override from TEntityBase
virtual int GetFirstVersion()const{return 6;}//ok
virtual void CopyPropertiesFrom(AcDbEntity *pSrcEntity, unsigned gMatchFlag);
virtual Acad::ErrorStatus ExplodeOrDraw2d(XExplodeDraw &dc) const;
virtual Acad::ErrorStatus ExplodeOrDraw3d(XExplodeDraw &dc) const;
virtual void GetTips(DList<TObjInfoUnit> &) const; //取动态属性显示数据
// Override from TReactor
virtual void NewReactor(Adesk::UInt16 color=1);
// Override from AcDbObject Reactor
virtual void modified(const AcDbObject* pObj);
virtual void erased(const AcDbObject* pObj,Adesk::Boolean bErasing=Adesk::kTrue);
};
void InitDbSlope(BOOL bTrue);
void CreateSlope();
#endif