Добрый день!
Есть задача. После того как мы разбили полилинию на несколько полилиний, расставить на каждый отрезок свою выноску. Расстановка лейблов делается через JIG объект (который отрисовывает линию ножки выноски)
На событии Database.ObjectAppended и создаю подписку на Application.Idle я собираю список новых полилиний, а уже в обработчике Application.Idle я пытаюсь расставить выноски.
Всё отлично работает, когда я имею дело с инструментами "Разорвать" и "Разорвать в точке". Однако, когда используется инструмент "Обрезать", визуальная часть объекта JIG не отрисовывается, а надпись Prompt-а появляется. Предполагаю, что это связано с тем, что в этот момент (Idle) команда обрезать ещё не завершена. После того, как я поставлю точки выносок, надпись Prompt расстановки выноски (из JIG объекта) пропадёт и будет видна надпись Prompt команды "Обрезать" и команда обрезать будет продолжена.
Есть ли возможность как-то команду "Обрезать" прервать? Или как-то заставить JIG отрисоваться в моём случае?
public class LabelJig : EntityJig
{
private Point3d _lastPoint;
private readonly Polyline _poly;
public LabelJig(Polyline poly, Point3d firstPoint) : base(poly)
{
_poly = poly;
_lastPoint = firstPoint;
_poly.AddVertexAt(_poly.NumberOfVertices, new Point2d(_lastPoint.X, _lastPoint.Y), 0, 0, 0);
}
protected override SamplerStatus Sampler(JigPrompts prompts)
{
JigPromptPointOptions opts = new JigPromptPointOptions("\n" + "Укажите следующую точку" + ": ")
{
BasePoint = _lastPoint,
UseBasePoint = true,
UserInputControls = UserInputControls.NoZeroResponseAccepted |
UserInputControls.NullResponseAccepted
};
PromptPointResult res = prompts.AcquirePoint(opts);
if (res.Status == PromptStatus.None)
{
return SamplerStatus.OK;
}
if (res.Status == PromptStatus.Cancel)
{
return SamplerStatus.Cancel;
}
if (_lastPoint == res.Value)
{
return SamplerStatus.NoChange;
}
_lastPoint = res.Value;
return SamplerStatus.OK;
}