Вспомогательная графика в методе MoveGripPointsAt

Автор Тема: Вспомогательная графика в методе MoveGripPointsAt  (Прочитано 2794 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн Александр Пекшев aka ModisАвтор темы

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Всем привет. Пытаюсь реализовать ручку объекта, которая будет добавлять к объекту новую точку (Ручка "плюс")
Возникает вопрос - как можно реализовать отрисовку вспомогательной графики при работе метода MoveGripPointsAt? Т.е. есть ли какие-то стандартные способы? Нестандартный у меня уже имеется

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
GripData.ViewportDraw или GripData.WorldDraw подойдут?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Пекшев aka ModisАвтор темы

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
GripData.ViewportDraw или GripData.WorldDraw подойдут?
Если бы все было так просто....
К сожалению, когда мы меняем положение ручки, то сама ручка остается на месте. Т.е. при работе метода ViewportDraw не известно новое положение ручки. А при работе метода MoveGripPointsAt мы как-раз таки знаем значение смещения ручки (параметр offset), но не имеем доступа к WorldDraw

Пока писал, придумал вариант - в моем классе, унаследованном от GripData, создать свойство Offset и при работе метода MoveGripPointsAt передавать значение "в ручку". В общем - попробую, расскажу тогда получилось ли

Оффлайн Александр Пекшев aka ModisАвтор темы

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Пока писал, придумал вариант - в моем классе, унаследованном от GripData, создать свойство Offset и при работе метода MoveGripPointsAt передавать значение "в ручку". В общем - попробую, расскажу тогда получилось ли
Нет, идея не сработала. Пока работает метод MoveGripPointsAt не вызывается метод GripData.WorldDraw(). Только если в этот момент буду зумировать колесиком мышки - тогда сработает. Как "насильно" заставить вызваться метод GripData.WorldDraw() я не знаю

Отмечено как Решение Александр Пекшев aka Modis 11-11-2018, 01:40:07

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
А если попробовать рисовать в PointMonitor?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Пекшев aka ModisАвтор темы

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
А если попробовать рисовать в PointMonitor?
Хорошая идея. Попробую позже - сейчас вылезла другая проблема и наверное придется тему создавать, ибо я не понимаю в чем причина проблемы. Вот только ещё немного отладкой позанимаюсь

Про PointMonitor отпишусь тогда, когда попробую

Оффлайн Александр Пекшев aka ModisАвтор темы

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
А если попробовать рисовать в PointMonitor?
Александр Ривилис, спасибо за идею. Все получилось легко и просто:
Код - C# [Выбрать]
  1. public override void OnGripStatusChanged(ObjectId entityId, Status newStatus)
  2. {
  3.     if (newStatus == Status.GripStart)
  4.     {
  5.         AcadHelpers.Editor.TurnForcedPickOn();
  6.         AcadHelpers.Editor.PointMonitor += AddNewVertex_EdOnPointMonitor;
  7.     }
  8.  
  9.     if (newStatus == Status.GripEnd)
  10.     {
  11.         AcadHelpers.Editor.TurnForcedPickOff();
  12.         AcadHelpers.Editor.PointMonitor -= AddNewVertex_EdOnPointMonitor;
  13.     }
  14.  
  15.     if (newStatus == Status.GripAbort)
  16.     {
  17.         AcadHelpers.Editor.TurnForcedPickOff();
  18.         AcadHelpers.Editor.PointMonitor -= AddNewVertex_EdOnPointMonitor;
  19.     }
  20.  
  21.     base.OnGripStatusChanged(entityId, newStatus);
  22. }
  23.  
  24. private void AddNewVertex_EdOnPointMonitor(object sender, PointMonitorEventArgs pointMonitorEventArgs)
  25. {
  26.     try
  27.     {
  28.         Line leftLine = new Line(GripLeftPoint, pointMonitorEventArgs.Context.ComputedPoint)
  29.         {
  30.             ColorIndex = 150
  31.         };
  32.         pointMonitorEventArgs.Context.DrawContext.Geometry.Draw(leftLine);
  33.  
  34.         if (GripRightPoint.HasValue)
  35.         {
  36.             Line rightLine = new Line(pointMonitorEventArgs.Context.ComputedPoint, GripRightPoint.Value)
  37.             {
  38.                 ColorIndex = 150
  39.             };
  40.             pointMonitorEventArgs.Context.DrawContext.Geometry.Draw(rightLine);
  41.         }
  42.     }
  43.     catch
  44.     {
  45.         // ignored
  46.     }
  47. }