JIG не отрисовывает объекты, пока включена команда _Trim

Автор Тема: JIG не отрисовывает объекты, пока включена команда _Trim  (Прочитано 1848 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн RomanАвтор темы

  • ADN OPEN
  • Сообщений: 12
  • Карма: 0
Добрый день!
Есть задача. После того как мы разбили полилинию на несколько полилиний, расставить на каждый отрезок свою выноску. Расстановка лейблов делается через 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.  
« Последнее редактирование: 10-03-2025, 15:08:17 от Александр Ривилис »

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13916
  • Карма: 1793
  • Рыцарь ObjectARX
  • Skype: rivilis
Есть ли возможность как-то команду "Обрезать" прервать?
Зачем? Может JIG запускать по окончании команды?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн RomanАвтор темы

  • ADN OPEN
  • Сообщений: 12
  • Карма: 0
Зачем? Может JIG запускать по окончании команды?
Александр Ривилис, да, действительно, можно попробовать запустить после окончания команды "Обрезать". Но хотелось после очередной обрезки расставить лейблы по JIG, и далее продолжать обрезать, или отменить операцию. Поэтому я думал, в крайнем случае, как-то прервать эту обрезку, а после расстановки лейблов, запустить команду "Обрезать" вновь.