сбрасывается привязка в DrawJig

Автор Тема: сбрасывается привязка в DrawJig  (Прочитано 2204 раз)

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

Оффлайн Алексей ТерноАвтор темы

  • ADN Club
  • ****
  • Сообщений: 381
  • Карма: 33
    • C3D Extensions
  • Skype: alexeyterno
Всем привет!
Необходимо определить координаты точки с учетом привязки. Делаю я это с помощью DrawJig+PointMonitor. Всё работает вроде хорошо, но я заметил одну особенность - во время выполнения команды определяются координаты с учётом привязки, но если ничего не делать в течение примерно одной секунды, то координаты сбрасываются на реальные координаты курсора, хотя привязка всё ещё активна и её маркер отображается:


Это такая особенность команды или я где-то упустил какие-то настройки?

Вот код:
Код - C# [Выбрать]
  1. internal class _testJigClass : DrawJig
  2. {
  3.     internal Point3d Point;
  4.  
  5.     private string message;
  6.     private Point3d SnapedPoint;
  7.     private Editor ed;
  8.  
  9.     internal _testJigClass(string _mess)
  10.     {
  11.         message = _mess;
  12.  
  13.         ed = Application.DocumentManager.MdiActiveDocument.Editor;
  14.         ed.PointMonitor += new PointMonitorEventHandler(ed_PointMonitor);
  15.     }
  16.  
  17.     protected override SamplerStatus Sampler(JigPrompts prompts)
  18.     {
  19.         JigPromptPointOptions opt_point = new JigPromptPointOptions(message)
  20.         {
  21.             UserInputControls = UserInputControls.Accept3dCoordinates
  22.         };
  23.  
  24.         PromptPointResult res_point = prompts.AcquirePoint(opt_point);
  25.  
  26.         if (res_point.Status == PromptStatus.OK)
  27.             Point = SnapedPoint;
  28.  
  29.         return SamplerStatus.OK;
  30.     }
  31.  
  32.     protected override bool WorldDraw(WorldDraw draw)
  33.     {
  34.         if (draw.Geometry != null)
  35.             ed.WriteMessage("\n" + Point.X.ToString("0.000"));
  36.  
  37.         return true;
  38.     }
  39.  
  40.     private void ed_PointMonitor(object sender, PointMonitorEventArgs e)
  41.     {
  42.         SnapedPoint = e.Context.ComputedPoint;
  43.     }
  44. }
  45.  

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: сбрасывается привязка в DrawJig
« Ответ #1 : 13-03-2023, 21:27:11 »
Алексей Терно,
Посмотри свойство e.Context.ObjectSnappedPoint вместо e.Context.ComputedPoint в случае если e.Context.pointComputed == true и e.Context.History & PointHistoryBits.ObjectSnapped не равно нулю.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей ТерноАвтор темы

  • ADN Club
  • ****
  • Сообщений: 381
  • Карма: 33
    • C3D Extensions
  • Skype: alexeyterno
Re: сбрасывается привязка в DrawJig
« Ответ #2 : 13-03-2023, 21:49:48 »
Если я правильно понял, то код должен получиться такой:
Код - C# [Выбрать]
  1. void ed_PointMonitor(object sender, PointMonitorEventArgs e)
  2. {
  3.     if (e.Context.PointComputed && e.Context.History == PointHistoryBits.ObjectSnapped)
  4.         SnapedPoint = e.Context.ObjectSnappedPoint;
  5.     else
  6.         SnapedPoint = e.Context.ComputedPoint;
  7. }
  8.  

В таком виде результат абсолютно такой же, хотя e.Context.ObjectSnappedPoint само по себе стабильно держит привязку и не сбрасывается. Я понял в каком направлении изучать, на днях попробую найти решение. Как будет решение, отпишусь )

Спасибо!

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: сбрасывается привязка в DrawJig
« Ответ #3 : 13-03-2023, 23:01:46 »
Скорее как-то так:
Код - C# [Выбрать]
  1. void ed_PointMonitor(object sender, PointMonitorEventArgs e)
  2. {
  3.     if (e.Context.PointComputed && (e.Context.History & PointHistoryBits.ObjectSnapped) > 0)
  4.         SnapedPoint = e.Context.ObjectSnappedPoint;
  5.     else
  6.         SnapedPoint = e.Context.ComputedPoint;
  7. }
  8.  
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей ТерноАвтор темы

  • ADN Club
  • ****
  • Сообщений: 381
  • Карма: 33
    • C3D Extensions
  • Skype: alexeyterno
Re: сбрасывается привязка в DrawJig
« Ответ #4 : 13-03-2023, 23:09:55 »
К сожалению, изменений нет (
В ближайшие дни поэкспериментирую ))

Оффлайн alz

  • ADN OPEN
  • **
  • Сообщений: 92
  • Карма: 11
Re: сбрасывается привязка в DrawJig
« Ответ #5 : 20-06-2023, 09:34:20 »
Тоже столкнулся с этой проблемой
Проблема, если не двигать курсор то pointmonitor теряет привязку
Решение получилось такое:
Создаем переменную Point3d для хранения предыдущего положения, полученного не через PointMonitor а через jigRes.Value
Если при следующей итерации текущий  jigRes.Value совпадает с сохраненным значением прошлой итерации, то есть курсор не двигался, то отсылаем статуc SamplerStatus.NoChange и вообще не берем координаты, полученные от PointMonitor и пофиг что внутри PointMonitor  отвалилась привязка и пришли другие координаты.