Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Roman от 10-03-2025, 14:27:11

Название: JIG не отрисовывает объекты, пока включена команда _Trim
Отправлено: Roman от 10-03-2025, 14:27:11
Добрый день!
Есть задача. После того как мы разбили полилинию на несколько полилиний, расставить на каждый отрезок свою выноску. Расстановка лейблов делается через JIG объект (который отрисовывает линию ножки выноски)
На событии Database.ObjectAppended и создаю подписку на Application.Idle я собираю список новых полилиний, а уже в обработчике Application.Idle я пытаюсь расставить выноски.
Всё отлично работает, когда я имею дело с инструментами "Разорвать" и "Разорвать в точке". Однако, когда используется инструмент "Обрезать", визуальная часть объекта JIG не отрисовывается, а надпись Prompt-а появляется. Предполагаю, что это связано с тем, что в этот момент (Idle) команда обрезать ещё не завершена. После того, как я поставлю точки выносок, надпись Prompt расстановки выноски (из JIG объекта) пропадёт и будет видна надпись Prompt команды "Обрезать" и команда обрезать будет продолжена.
Есть ли возможность как-то команду "Обрезать" прервать? Или как-то заставить JIG отрисоваться в моём случае?

Код - C# [Выбрать]
  1. public class LabelJig : EntityJig
  2. {
  3.     private Point3d _lastPoint;
  4.     private readonly Polyline _poly;
  5.  
  6.     public LabelJig(Polyline poly, Point3d firstPoint) : base(poly)
  7.     {
  8.         _poly = poly;
  9.         _lastPoint = firstPoint;
  10.         _poly.AddVertexAt(_poly.NumberOfVertices, new Point2d(_lastPoint.X, _lastPoint.Y), 0, 0, 0);
  11.     }
  12.  
  13.     protected override SamplerStatus Sampler(JigPrompts prompts)
  14.     {
  15.         JigPromptPointOptions opts = new JigPromptPointOptions("\n" + "Укажите следующую точку" + ": ")
  16.         {
  17.             BasePoint = _lastPoint,
  18.             UseBasePoint = true,
  19.             UserInputControls = UserInputControls.NoZeroResponseAccepted |
  20.                                 UserInputControls.NullResponseAccepted
  21.         };
  22.  
  23.         PromptPointResult res = prompts.AcquirePoint(opts);
  24.  
  25.         if (res.Status == PromptStatus.None)
  26.         {
  27.             return SamplerStatus.OK;
  28.         }
  29.  
  30.         if (res.Status == PromptStatus.Cancel)
  31.         {
  32.             return SamplerStatus.Cancel;
  33.         }
  34.  
  35.         if (_lastPoint == res.Value)
  36.         {
  37.             return SamplerStatus.NoChange;
  38.         }
  39.  
  40.         _lastPoint = res.Value;
  41.         return SamplerStatus.OK;
  42.     }
  43.  
Название: Re: JIG не отрисовывает объекты, пока включена команда _Trim
Отправлено: Александр Ривилис от 11-03-2025, 22:10:45
Есть ли возможность как-то команду "Обрезать" прервать?
Зачем? Может JIG запускать по окончании команды?
Название: Re: JIG не отрисовывает объекты, пока включена команда _Trim
Отправлено: Roman от 12-03-2025, 10:08:44
Зачем? Может JIG запускать по окончании команды?
Александр Ривилис, да, действительно, можно попробовать запустить после окончания команды "Обрезать". Но хотелось после очередной обрезки расставить лейблы по JIG, и далее продолжать обрезать, или отменить операцию. Поэтому я думал, в крайнем случае, как-то прервать эту обрезку, а после расстановки лейблов, запустить команду "Обрезать" вновь.