215 lines
6.7 KiB
C++
215 lines
6.7 KiB
C++
#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<ObjInfoUnit> &) 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
|
|
};
|