#include "AecDbEntityBaseEx.h" #include "TBlockGeomInfo.h" #include "ObjInfoUnit.h" class DbBlockInsert : public AcDbBlockReference , public BaseEx { friend int DragInsertBlock(const TCHAR *szBlock, int nFlag, const AcGeScale3d &scales); public: ACRX_DECLARE_MEMBERS(DbBlockInsert); DbBlockInsert(); ~DbBlockInsert(); // Overriden function from AcDbEntity virtual AcRxObject *clone() const; virtual Adesk::Boolean subCloneMeForDragging(); // 解决多视图块崩溃的问题 virtual Acad::ErrorStatus setLayer(AcDbObjectId newVal, Adesk::Boolean doSubents = true); virtual Acad::ErrorStatus setLayer(const TCHAR * newVal, Adesk::Boolean doSubents = true); 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 void subGripStatus(const AcDb::GripStat status); virtual Acad::ErrorStatus subGetGripPoints(AcDbGripDataPtrArray& grips, const double curViewUnitSize, const int gripSize, const AcGeVector3d& curViewDir, const int bitflags) const; virtual Acad::ErrorStatus subMoveGripPointsAt(const AcDbVoidPtrArray& appData, const AcGeVector3d& offset, const int bitflags); 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); virtual Acad::ErrorStatus subMoveGripPointsAt(const AcDbIntArray& indices, const AcGeVector3d& offset); virtual Acad::ErrorStatus subMoveStretchPointsAt(const AcDbIntArray& indices, const AcGeVector3d& offset); virtual Acad::ErrorStatus subExplode(AcDbVoidPtrArray& entitySet) const; virtual Adesk::Boolean subWorldDraw(AcGiWorldDraw *pWd); virtual void subViewportDraw(AcGiViewportDraw* pMode); virtual Adesk::UInt32 subViewportDrawLogicalFlags(AcGiViewportDraw * vd); virtual Adesk::UInt32 subSetAttributes(AcGiDrawableTraits* pTraits); //AcDbBlockReference的transformBy还没有完全实现镜像操作 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 subIntersectWith(const AcDbEntity* ent, AcDb::Intersect intType, AcGePoint3dArray& points, INT_PTR thisGsMarker, INT_PTR otherGsMarker) const; virtual Acad::ErrorStatus subIntersectWith(const AcDbEntity* ent, AcDb::Intersect intType, const AcGePlane& projPlane, AcGePoint3dArray& points, INT_PTR thisGsMarker, INT_PTR otherGsMarker) const; // drived from TEntityBase virtual void GetTips(PtrList &lstInfo) const; virtual Acad::ErrorStatus GetGripText(int i, CString &cs) const; virtual AcDbEntity * GetMe(); virtual const AcDbEntity * GetMe() const; virtual int GetCtrlToggleIndex()const; virtual Acad::ErrorStatus GetExtents2d(ADSGePoint3d &ptLow, ADSGePoint3d &ptUp) const; virtual bool IsModelEntity() const; void SetMultiView(BOOL bTrue); void Set2DBlockId(AcDbObjectId id); void SetMaskFlag(Adesk::UInt8 nFlag); BOOL IsMultiView() const; Adesk::UInt8 GetMaskFlag() const; AcDbObjectId Get2DBlockId() const; BlockGeomInfo GetGeomInfo() const; Acad::ErrorStatus UpdateFrom(const BlockGeomInfo &geom); AcDbBlockReference * NewBlockInsert() const; protected: Adesk::UInt8 m_nMaskFlag; // TArch6 new member AcDbHardPointerId m_idBlock2d; //for Multi-view block protected: AcDbObjectId _Get2DBlockId() const; // TArch5 block2d id Acad::ErrorStatus _Set2DBlockId(AcDbObjectId idBlock2d) const; private: void *operator new[](size_t nSize); void operator delete[](void *p); void *operator new[](size_t nSize, const TCHAR *file, int line); const static Adesk::UInt8 g_nVersion; private: AcDbObjectId GetBlock2dFromBlock3d(AcDbObjectId idBlock) const; };