#pragma once
#include "dbentityoverrule.h"
class CGripOverrule : public AcDbGripOverrule
{
public:
static CGripOverrule *_pTheOverrule;
ACRX_DECLARE_MEMBERS(CGripOverrule);
bool isApplicable(const AcRxObject *pOverruledSubject) const
{
return true;
}
// Add the overrule.
// Take care about calling "CGripOverrule::rxInit();"
// in "On_kInitAppMsg" of the arx that uses this overrule.
static void CGripOverrule::AddOverrule()
{
if (_pTheOverrule != NULL)
return;
_pTheOverrule = new CGripOverrule();
AcRxOverrule::addOverrule(AcDbCircle::desc(), _pTheOverrule, true);
CGripOverrule::setIsOverruling(true);
}
static void CGripOverrule::RemoveOverrule()
{
if (_pTheOverrule == NULL)
return;
CGripOverrule::setIsOverruling(false);
AcRxOverrule::removeOverrule(AcDbCircle::desc(), _pTheOverrule);
delete _pTheOverrule;
_pTheOverrule = NULL;
}
Acad::ErrorStatus CGripOverrule::getGripPoints(const AcDbEntity *pSubject,
AcGePoint3dArray &gripPoints,
AcDbIntArray &osnapModes,
AcDbIntArray &geomIds)
{
AcDbCircle *pCircle = AcDbCircle::cast(pSubject);
if (pCircle != NULL)
{ // Remove the grip points, for a circle
gripPoints.removeAll();
return Acad::eNotApplicable;
}
return AcDbGripOverrule::getGripPoints(pSubject, gripPoints, osnapModes, geomIds);
}
Acad::ErrorStatus CGripOverrule::getGripPoints(
const AcDbEntity *pSubject,
AcDbGripDataPtrArray &grips,
const double curViewUnitSize,
const int gripSize,
const AcGeVector3d &curViewDir,
const int bitflags)
{
AcDbCircle *pCircle = AcDbCircle::cast(pSubject);
if (pCircle != NULL)
{ // Remove the grip points, for a circle
grips.removeAll();
return Acad::eNotApplicable;
}
return AcDbGripOverrule::getGripPoints(
pSubject,
grips,
curViewUnitSize,
gripSize,
curViewDir,
bitflags);
}
};
CGripOverrule *CGripOverrule::_pTheOverrule = NULL;
ACRX_NO_CONS_DEFINE_MEMBERS(CGripOverrule, AcDbGripOverrule);