#ifndef __DBRECT_H #define __DBRECT_H //#include "DbEntity.h" #define RF_DIA45 0x01 //45度对角 #define RF_DIA135 0x02 //135对角 #define RF_CROSSING 0x03 //绘制交叉 class TARCH_EXP TDbRect: public TDbCurveEntity { DECLARE_TENTBASE(); ACRX_DECLARE_MEMBERS(TDbRect); public: enum BasePosition { kCenter=0, kTopLeft=1, kTopRight=2, kBotRight=3, kBotLeft=4,}; private: const static Adesk::UInt8 g_nVersion; protected: //基本参数 6 Adesk::UInt16 m_nRectFlag; //标志 XPoint m_ptCen; //底面中心 double m_nRotation; double m_nSizeX, m_nSizeY, m_nSizeZ; XVector3D m_vtNormal; BasePosition m_baseFlag; public: // 基本参数 6 Adesk::UInt16 GetRectFlag() const { return m_nRectFlag; } BasePosition GetBaseFlag() const { return m_baseFlag; } double GetRotation() const { return m_nRotation; } XPoint GetCenter() const { return m_ptCen; } double GetSizeX() const { return m_nSizeX; } double GetSizeY() const { return m_nSizeY; } double GetSizeZ() const { return m_nSizeZ; } AcGeVector3d GetNormal() const { return m_vtNormal.AsAcGeVector3d(); } double GetElevation() const { return m_ptCen.z; } void SetElevation(double z) { assertWriteEnabled(); m_ptCen.z=z; } void SetRectFlag(Adesk::UInt16 flag) { assertWriteEnabled(); m_nRectFlag=flag; } void SetRotation(double nRot) { assertWriteEnabled(); m_nRotation=nRot; } void SetCenter(XPoint pt) { assertWriteEnabled(); m_ptCen = pt; } void SetSizeX(double val) { assertWriteEnabled(); m_nSizeX=val; } void SetSizeY(double val) { assertWriteEnabled(); m_nSizeY=val; } void SetSizeZ(double val) { assertWriteEnabled(); m_nSizeZ=val; } void SetNormal(XVector3D vt) { assertWriteEnabled(); m_vtNormal=vt; } void SetBaseFlag(TDbRect::BasePosition flag) { assertWriteEnabled(); m_baseFlag=flag; } // 导出参数 XPoint GetLowLeft() const; XPoint GetLowRight() const; XPoint GetUpRight() const; XPoint GetUpLeft() const; void GetPolyline(AcDbPolyline &pline) const; BOOL SetPolyline(const AcDbPolyline &pline); public: TDbRect(); // Override from AcDbEntity 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 subGetClassID(CLSID* pClsid) const; // 为了通知墙体更新显示 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 subGetGripPoints(AcGePoint3dArray& gripPoints, AcDbIntArray& osnapModes, AcDbIntArray& geomIds) const; virtual Acad::ErrorStatus subGetStretchPoints(AcGePoint3dArray & stretchPoints) const; virtual Acad::ErrorStatus subMoveGripPointsAt(const AcDbIntArray& indices, const AcGeVector3d& offset); virtual Acad::ErrorStatus subMoveStretchPointsAt(const AcDbIntArray& indices, const AcGeVector3d& offset); // AcDbCurve method virtual Acad::ErrorStatus getPlane(AcGePlane& plane, AcDb::Planarity& flag) const; virtual Adesk::Boolean isPlanar() const; virtual Adesk::Boolean isClosed() const; virtual Adesk::Boolean isPeriodic() const; virtual Acad::ErrorStatus getStartPoint(AcGePoint3d& ptStart) const; virtual Acad::ErrorStatus getEndPoint(AcGePoint3d& ptEnd) const; virtual Acad::ErrorStatus extend( Adesk::Boolean extendStart, const AcGePoint3d& toPoint) ; virtual Acad::ErrorStatus extend(double newParam); virtual Acad::ErrorStatus getClosestPointTo( const AcGePoint3d& givenPnt, const AcGeVector3d& normal, AcGePoint3d& pointOnCurve, Adesk::Boolean extend = Adesk::kFalse) const; virtual Acad::ErrorStatus getClosestPointTo( const AcGePoint3d& givenPnt, AcGePoint3d& pointOnCurve, Adesk::Boolean extend = Adesk::kFalse) const; virtual Acad::ErrorStatus getDistAtParam( double param, double& dist) const; virtual Acad::ErrorStatus getDistAtPoint( const AcGePoint3d& point, double& distance) const; virtual Acad::ErrorStatus getStartParam(double& startParam) const; virtual Acad::ErrorStatus getEndParam(double& endParam) const; virtual Acad::ErrorStatus getParamAtPoint( const AcGePoint3d& point, double& param) const; virtual Acad::ErrorStatus getParamAtDist( double dist, double& param) const; virtual Acad::ErrorStatus getPointAtDist( double dist, AcGePoint3d& point) const; virtual Acad::ErrorStatus getPointAtParam(double param, AcGePoint3d &point) const; #if (ADS>14) virtual Acad::ErrorStatus getOffsetCurvesGivenPlaneNormal( const AcGeVector3d& normal, double offsetDist, AcDbVoidPtrArray& offsetCurves) const; #endif virtual Acad::ErrorStatus getOffsetCurves( double offsetDist, AcDbVoidPtrArray& offsetCurves) const; virtual Acad::ErrorStatus getOrthoProjectedCurve( const AcGePlane& projPlane, AcDbCurve*& projCurve) const; virtual Acad::ErrorStatus getProjectedCurve( const AcGePlane& projPlane, const AcGeVector3d& projDir, AcDbCurve*& projCurve) const; virtual Acad::ErrorStatus getFirstDeriv( double param, AcGeVector3d& secDeriv) const; virtual Acad::ErrorStatus getFirstDeriv( const AcGePoint3d& point, AcGeVector3d& secDeriv) const; virtual Acad::ErrorStatus getSecondDeriv( double param, AcGeVector3d& secDeriv) const; virtual Acad::ErrorStatus getSecondDeriv( const AcGePoint3d& point, AcGeVector3d& secDeriv) const; virtual Acad::ErrorStatus getSpline(AcDbSpline*& spline) const; virtual Acad::ErrorStatus getSplitCurves( const AcGeDoubleArray& params, AcDbVoidPtrArray& curveSegments) const; virtual Acad::ErrorStatus getSplitCurves( const AcGePoint3dArray& points, AcDbVoidPtrArray& curveSegments) const; // Override form TEntityBase 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 &) const; //取动态属性显示数据 virtual Acad::ErrorStatus GetGripText(int i, CString &cs) const; virtual BOOL IsValid() const; virtual bool IsModelEntity() const{return true;} virtual int GetFirstVersion()const{return 6;}//ok virtual Acad::ErrorStatus GetPathPoly(XPoly2D &polyPath,AcGeVector3d &normal) const; virtual int GetCtrlToggleIndex()const{return 0;}//ok #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 }; #endif