Вот тут я разбирался с ним
Большое спасибо за ссылку, этот пример очень помог.
Как выяснилось, дело было в переопределении метода GetGripPoints().
В интерфейсе Autodesk.AutoCAD.DatabaseServices.GripOverrule присутствует два метода GetGripPoints:
public virtual void GetGripPoints(Entity entity, Point3dCollection gripPoints, IntegerCollection snapModes, IntegerCollection geometryIds);
public virtual void GetGripPoints(Entity entity, GripDataCollection grips, double curViewUnitSize, int gripSize, Vector3d curViewDir, GetGripPointsFlags bitFlags);
В
примере, который я нашел в блоге Kean'а, переопределялся только первый метод GetGripPoints(). При этом у блока остается ручка, отвечающая за перемещение, но пропадает ручка, отвечающая за поворот.
А в том
примере, который предоставил Дмитрий, переопределялся второй метод GetGripPoints(). При этом у блока сохраняется как ручка, отвечающая за перемещение, так и ручка, отвечающая за поворот.
P.S. Только что проверял. Создаю реализацию интерфейса GripOverrule, которую потом активизирую:
GripOverrule.AddOverrule(RXClass.GetClass(typeof(BlockReference)), new GripVectorOverrule(), true);
GripVectorOverrule.Overruling = true;
В первом случае пишу реализацию класса GripVectorOverrule так:
public class GripVectorOverrule : GripOverrule
{
public override void GetGripPoints(Entity entity, Point3dCollection gripPoints, IntegerCollection snapModes, IntegerCollection geometryIds)
{
base.GetGripPoints(entity, gripPoints, snapModes, geometryIds);
}
}
При таком определении ручка вращения пропадает.
А можно попробовать такую реализацию GripVectorOverrule:
public class GripVectorOverrule : GripOverrule
{
public override void GetGripPoints (Entity entity, GripDataCollection grips, double curViewUnitSize, int gripSize, Vector3d curViewDir, GetGripPointsFlags bitFlags)
{
base.GetGripPoints(entity, grips, curViewUnitSize, gripSize, curViewDir, bitFlags);
}
}
При таком определении ручка вращения остается на месте.
Пока так... Сейчас еще один пост напишу, отчетный.)