А что, если в конструкторе BreakLineOsnapOverrule вызвать SetXDataFilter и убрать переопределение IsApplicable?
Вильдар, красавчик! С меня завтра пирожок!
Переделал так:
using System;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using ModPlusAPI.Windows;
namespace mpESKD.Functions.mpBreakLine.Overrules
{
public class BreakLineOsnapOverrule : OsnapOverrule
{
protected static BreakLineOsnapOverrule _breakLineOsnapOverrule;
public static BreakLineOsnapOverrule Instance()
{
if (_breakLineOsnapOverrule != null) return _breakLineOsnapOverrule;
_breakLineOsnapOverrule = new BreakLineOsnapOverrule();
_breakLineOsnapOverrule.SetXDataFilter(BreakLineFunction.MPCOEntName);
return _breakLineOsnapOverrule;
}
public override void GetObjectSnapPoints(Autodesk.AutoCAD.DatabaseServices.Entity entity, ObjectSnapModes snapMode, IntPtr gsSelectionMark, Point3d pickPoint,
Point3d lastPoint, Matrix3d viewTransform, Point3dCollection snapPoints, IntegerCollection geometryIds)
{
try
{
var breakLine = BreakLineXDataHelper.GetBreakLineFromEntity(entity);
if (breakLine != null)
{
snapPoints.Add(breakLine.InsertionPoint);
snapPoints.Add(breakLine.EndPoint);
}
}
catch (Autodesk.AutoCAD.Runtime.Exception exception)
{
ExceptionBox.Show(exception);
}
}
}
}
В описанном случае тормоза исчезли. Правда появились новые и в немного в другом месте, но возможно это не взаимосвязано )) В любом случае - это уже вопрос для новой темы, если сам не решу