#pragma once #include "AecDbEntityBaseEx.h" #include "ObjInfoUnit.h" #define RF_DIA45 0x01 //45度对角 #define RF_DIA135 0x02 //135对角 #define RF_CROSSING 0x03 //绘制交叉 class CDbRect : public AecXDbCurveBaseEx { public: ACRX_DECLARE_MEMBERS(CDbRect); 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(CDbRect::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: CDbRect(); // 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 (ARX>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 Draw2d(AcGiDraw &dc) const; virtual Acad::ErrorStatus Draw3d(AcGiDraw &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 ARX>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 };