#include "stdafx.h" #include "AecDbEntityBase.h" #include "AcGiViewDraw.h" #include "AcGiExplodeDraw.h" #include "simpleproperty.h" #include "dbobjptr.h" #include "AecDbObjXDataMap.h" #include "AecGripCback.h" ACRX_NO_CONS_DEFINE_MEMBERS(AecDbEntityBase, AcDbEntity); AecDbEntityBase::AecDbEntityBase(void): AecDbEntityCommon() { } AecDbEntityBase::~AecDbEntityBase(void) { } Adesk::UInt32 AecDbEntityBase::subViewportDrawLogicalFlags(AcGiViewportDraw * vd) { // 基类实现是 protected,只能在这里取;后续计算交给 Common。 return AecDbEntityCommon::base_ViewportDrawLogicalFlags( AcDbEntity::subViewportDrawLogicalFlags(vd)); } Adesk::UInt32 AecDbEntityBase::subSetAttributes(AcGiDrawableTraits * traits) { // 基类实现是 protected,只能在这里取;后续计算交给 Common。 return AecDbEntityCommon::base_SetAttributes( AcDbEntity::subSetAttributes(traits)); } Adesk::Boolean AecDbEntityBase::subWorldDraw(AcGiWorldDraw *pWd) { // 具体实现与另一条根共用 AecDbEntityCommon::base_WorldDraw, // 这里只保留 AcGiDrawable 虚函数这一侧的入口。 return AecDbEntityCommon::base_WorldDraw(pWd); } void AecDbEntityBase::subViewportDraw(AcGiViewportDraw* pMode) { // 具体实现与另一条根共用 AecDbEntityCommon::base_ViewportDraw, // 这里只保留 AcGiDrawable 虚函数这一侧的入口。 AecDbEntityCommon::base_ViewportDraw(pMode); } //保存代理实体图元 void AecDbEntityBase::saveAs(AcGiWorldDraw *pWd,AcDb::SaveType saveType) { // 具体实现与另一条根共用 AecDbEntityCommon::base_SaveAs, // 这里只保留 AcGiDrawable 虚函数这一侧的入口。 AecDbEntityCommon::base_SaveAs(pWd, saveType); } Adesk::Boolean AecDbEntityBase::CallWorldDraw(AcGiWorldDraw *pWd) { // 虚拟调用,回到最派生类的 subWorldDraw return subWorldDraw(pWd); } Acad::ErrorStatus AecDbEntityBase::subExplode(AcDbVoidPtrArray& entitySet) const { // 具体实现与另一条根共用 AecDbEntityCommon::base_Explode, // 这里只保留虚函数这一侧的入口。 return AecDbEntityCommon::base_Explode(entitySet); } Acad::ErrorStatus AecDbEntityBase::subGetGeomExtents(AcDbExtents& extents) const { // 具体实现与另一条根共用 AecDbEntityCommon::base_GetGeomExtents, // 这里只保留 AcDbEntity 虚函数这一侧的入口。 return AecDbEntityCommon::base_GetGeomExtents(extents); } void AecDbEntityBase::subList() const { AcDbEntity::subList(); } Acad::ErrorStatus AecDbEntityBase::subIntersectWith(const AcDbEntity* ent, AcDb::Intersect intType, AcGePoint3dArray& points, INT_PTR thisGsMarker, INT_PTR otherGsMarker) const { assertReadEnabled(); int expMode = GetExplodeMode(); if (expMode == 2) { return Acad::eNotImplementedYet; } const AcDbVoidPtrArray& entSet = Get2DBuffer(); Acad::ErrorStatus es = Acad::eNotApplicable; int len = entSet.length(); for(int i = 0; i < len; i++) { AcDbEntity *pEnt = (AcDbEntity *)entSet[i]; //acutPrintf(_T("\nclass = %s"),pEnt->isA()->name()); if ( pEnt != NULL && Acad::eOk == pEnt->intersectWith(ent, intType, points, 0, otherGsMarker) ) { es = Acad::eOk; } } return es; } Acad::ErrorStatus AecDbEntityBase::subIntersectWith(const AcDbEntity* ent, AcDb::Intersect intType, const AcGePlane& projPlane, AcGePoint3dArray& points, INT_PTR thisGsMarker, INT_PTR otherGsMarker) const { assertReadEnabled(); int expMode = GetExplodeMode(); if (expMode == 2) { return Acad::eNotImplementedYet; } const AcDbVoidPtrArray& entSet = Get2DBuffer(); Acad::ErrorStatus es; es = Acad::eNotApplicable; int len = entSet.length(); for (int i = 0; i < len; i++) { AcDbEntity *pEnt = (AcDbEntity *)entSet[i]; //acutPrintf(_T("\nclass = %s"),pEnt->isA()->name()); if ( pEnt != NULL && Acad::eOk == pEnt->intersectWith(ent, intType, projPlane, points, 0, otherGsMarker) ) { es = Acad::eOk; } } return Acad::eOk; } Acad::ErrorStatus AecDbEntityBase::subSetPropertiesFrom( const AcDbEntity* pEntity, Adesk::Boolean doSubents /*= Adesk::kTrue*/) { assertWriteEnabled(); Acad::ErrorStatus es = AcDbEntity::setPropertiesFrom(pEntity, doSubents); // 颜色 { setColorIndex(pEntity->colorIndex()); } //图层 if ( database() == NULL || database() == pEntity->database()) { { setLayer(pEntity->layerId()); } // 线型 { setLinetype(pEntity->linetypeId()); } #if ARX > 16 // 材质 { setMaterial(pEntity->materialId()); } #endif } // 线型比例 { setLinetypeScale(pEntity->linetypeScale()); } // 可见性. 总是被复制 setVisibility(pEntity->visibility()); return es; } #if (ARX > 15) Acad::ErrorStatus AecDbEntityBase::subGetOsnapPoints( AcDb::OsnapMode osnapMode, INT_PTR gsSelectionMark, const AcGePoint3d& ptPick, const AcGePoint3d& lastPoint, const AcGeMatrix3d& viewXform, AcGePoint3dArray& snapPoints, AcDbIntArray& geomIds) const { return AecDbEntityCommon::base_GetOsnapPoints(osnapMode, gsSelectionMark, ptPick, lastPoint, viewXform, snapPoints, geomIds); } Acad::ErrorStatus AecDbEntityBase::subGetOsnapPoints( AcDb::OsnapMode osnapMode, INT_PTR gsSelectionMark, const AcGePoint3d& ptPick, const AcGePoint3d& lastPoint, const AcGeMatrix3d& viewXform, AcGePoint3dArray& snapPoints, AcDbIntArray& geomIds, const AcGeMatrix3d& insersionMat) const { assertReadEnabled(); return getOsnapPoints(osnapMode,gsSelectionMark,ptPick,lastPoint,viewXform,snapPoints,geomIds); } #endif #if ARX>15 void AecDbEntityBase::subGripStatus(const AcDb::GripStat status) { } Acad::ErrorStatus AecDbEntityBase::subGetGripPoints ( AcDbGripDataPtrArray& grips, const double curViewUnitSize, const int gripSize, const AcGeVector3d& curViewDir, const int bitflags) const { return Acad::eOk; } Acad::ErrorStatus AecDbEntityBase::subMoveGripPointsAt(const AcDbVoidPtrArray& appData,const AcGeVector3d& offset,const int bitflags) { return Acad::eOk; } #endif Acad::ErrorStatus AecDbEntityBase::subGetGripPoints (AcGePoint3dArray& gripPoints,AcDbIntArray& osnapModes,AcDbIntArray& geomIds) const { assertReadEnabled(); return Acad::eOk; } Acad::ErrorStatus AecDbEntityBase::subMoveGripPointsAt(const AcDbIntArray& indices,const AcGeVector3d& offset) { assertWriteEnabled(); return Acad::eOk; } Acad::ErrorStatus AecDbEntityBase::subGetStretchPoints(AcGePoint3dArray& stretchPoints) const { assertReadEnabled(); return Acad::eOk; } Acad::ErrorStatus AecDbEntityBase::subMoveStretchPointsAt(const AcDbIntArray& indices,const AcGeVector3d& offset) { assertWriteEnabled(); return Acad::eOk; } Acad::ErrorStatus AecDbEntityBase::subTransformBy(const AcGeMatrix3d& xform) { assertWriteEnabled(); return Acad::eOk; } Acad::ErrorStatus AecDbEntityBase::subGetTransformedCopy(const AcGeMatrix3d& xform, AcDbEntity*& pEnt) const { assertReadEnabled(); AcDbEntity *pCloned = (AcDbEntity *)clone(); ((AecDbEntityBase*)pCloned)->m_nDrawDimCur = m_nDrawDimCur; Acad::ErrorStatus es = pCloned->transformBy(xform); if(es == Acad::eOk) pEnt = pCloned; else DELETE_PTR(pCloned); return es; } Acad::ErrorStatus AecDbEntityBase::subDeepClone( AcDbObject* pOwner, AcDbObject*& pClonedObject, AcDbIdMapping& idMap, Adesk::Boolean isPrimary) const { return AecDbEntityCommon::base_DeepClone(pOwner, pClonedObject, idMap, isPrimary); } Acad::ErrorStatus AecDbEntityBase::subWblockClone(AcRxObject* pOwner, AcDbObject*& pClonedObject, AcDbIdMapping& idMap, Adesk::Boolean isPrimary) const { return AecDbEntityCommon::base_WblockClone(pOwner, pClonedObject, idMap, isPrimary); } Acad::ErrorStatus AecDbEntityBase::CallAcDbWblockClone(AcRxObject* pOwner, AcDbObject*& pClonedObject, AcDbIdMapping& idMap, Adesk::Boolean isPrimary) const { return AcDbEntity::subWblockClone(pOwner, pClonedObject, idMap, isPrimary); } Acad::ErrorStatus AecDbEntityBase::dwgInFields (AcDbDwgFiler* pFiler) { assertWriteEnabled () ; //----- Read parent class information first. Acad::ErrorStatus es = AcDbEntity::dwgInFields (pFiler) ; if ( es != Acad::eOk ) return (es) ; return (pFiler->filerStatus ()) ; } Acad::ErrorStatus AecDbEntityBase::dwgOutFields(AcDbDwgFiler* pFiler) const { assertReadEnabled () ; //----- Save parent class information first. Acad::ErrorStatus es = AcDbEntity::dwgOutFields (pFiler) ; if ( es != Acad::eOk ) return (es) ; return (pFiler->filerStatus ()) ; } Acad::ErrorStatus AecDbEntityBase::dxfInFields (AcDbDxfFiler* pFiler) { assertWriteEnabled () ; //----- Read parent class information first. Acad::ErrorStatus es = AcDbEntity::dxfInFields (pFiler) ; if ( es != Acad::eOk ) return (es) ; return (pFiler->filerStatus ()) ; } Acad::ErrorStatus AecDbEntityBase::dxfOutFields(AcDbDxfFiler* pFiler) const { assertReadEnabled () ; //----- Save parent class information first. Acad::ErrorStatus es = AcDbEntity::dxfOutFields (pFiler) ; if ( es != Acad::eOk ) return (es) ; return (pFiler->filerStatus ()) ; } int AecDbEntityBase::ComparedTo(AecDbEntityBase* pEntOther) const { return -1; } double AecDbEntityBase::GetArea() const { assertReadEnabled(); if (!Has3DBuffer()) { AcGiViewDraw dc(NULL,NULL); Draw3d(dc); } double dArea = 0.0,dAreaAll = 0.0; AcDbVoidPtrArray arEntPtrs; GetDraw3dables(arEntPtrs); AcDbEntity* pEnt = NULL; for (int i = 0;i < arEntPtrs.length();i++) { pEnt = (AcDbEntity*)arEntPtrs.at(i); AcDb3dSolid* pSolid = AcDb3dSolid::cast(pEnt); if (pSolid != NULL) { pSolid->getArea(dArea); dAreaAll += fabs(dArea); } } return dAreaAll; } Acad::ErrorStatus AecDbEntityBase::setTransparency(const AcCmTransparency &trans, Adesk::Boolean doSubents) { AssertWriteEnabled(); return AcDbEntity::setTransparency(trans, doSubents); }