Определение позиции курсора в пространстве во время Jig

Автор Тема: Определение позиции курсора в пространстве во время Jig  (Прочитано 3660 раз)

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

Оффлайн Алексей КузинАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 116
  • Карма: 8
необходимо найти координаты курсора в произвольной плоскости во время jig.

Действовать задумал так:
1) определить точку курсора на дравинге
2) определить вектор view
3) найти точку пересечения получившейся линии с моей плоскостью.

Проблема в 1 пункте.
Необходимо узнать позицию курсора в 3d во время работы jig.  Например если ECS=WCS и смотрим со стороны Right. Хотел воспользоваться отслеживание через PointMonitor, но во время работы jig координата Z точки всегда равна 0.  Аналогичный результат возвращает так же AcquirePoint.

Код - C# [Выбрать]
  1. [Autodesk.AutoCAD.Runtime.CommandMethod("PointMonitorOn", Autodesk.AutoCAD.Runtime.CommandFlags.Modal)]
  2.         public void PointMonitorOn()
  3.         {
  4.             currentDocument.Editor.PointMonitor += Editor_PointMonitor;
  5.         }
  6.  
  7.         [Autodesk.AutoCAD.Runtime.CommandMethod("TestJig", Autodesk.AutoCAD.Runtime.CommandFlags.Modal)]
  8.         public void TestJig()
  9.         {
  10.             var jigRes = currentDocument.Editor.Drag(new TestJigClass());
  11.             if (jigRes.Status == PromptStatus.OK)
  12.             {
  13.                 //
  14.             }
  15.             //
  16.         }
  17.  
  18.         private void Editor_PointMonitor(object sender, PointMonitorEventArgs e)
  19.         {
  20.             var ed = sender as Editor;
  21.             if (ed == null)
  22.                 return;
  23.  
  24.             ed.WriteMessage($"{e.Context.ComputedPoint:F4}\n");
  25.         }
  26.  
  27.         public class TestJigClass : DrawJig
  28.         {
  29.             private Point3d _previousPos;
  30.  
  31.             protected override bool WorldDraw(WorldDraw wd)
  32.             {
  33.                 return true;
  34.             }
  35.  
  36.             protected override SamplerStatus Sampler(JigPrompts prompts)
  37.             {
  38.                 var prResult = prompts.AcquirePoint();
  39.                 if (prResult.Status == PromptStatus.OK)
  40.                 {
  41.                     if (System.Math.Round(_previousPos.DistanceTo(prResult.Value), ECGeometry.Epsilon.Eps) == 0)
  42.                         return SamplerStatus.NoChange;
  43.                     else
  44.                     {
  45.                         _previousPos = prResult.Value;
  46.                         return SamplerStatus.OK;
  47.                     }
  48.                 }
  49.                 return SamplerStatus.Cancel;
  50.             }
  51.         }



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

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Думаю, стоит использовать PointMonitor

UPD: Не заметил, что уже пробовали

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Постановку задачи не понял. Похоже кто-то уже начал подготовку к Новому Году!  ;D Координаты курсора - это что?
В любом случае Accept3dCoordinates не помешает
А что не так с prResult.Value ???
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей КузинАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 116
  • Карма: 8
Цитировать
Постановку задачи не понял. Похоже кто-то уже начал подготовку к Новому Году!  ;D Координаты курсора - это что?
;D 
то есть координаты какой либо точки на дравинге которая лежит под курсором.

Цитировать
В любом случае Accept3dCoordinates в true не помешает?
Как так! я подобное вроде проверял но не работало. Сейчас ожило, буду проверять дальше. Спасибо.
Вы же про это?
Код - C# [Выбрать]
  1.                 var prOptions = new JigPromptPointOptions("\nTest")
  2.                 {
  3.                     UserInputControls = UserInputControls.Accept3dCoordinates,
  4.                 };
  5.  
  6.                 var prResult = prompts.AcquirePoint(prOptions);

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Вы же про это?
Код - C# [Выбрать]

                    var prOptions = new JigPromptPointOptions("\nTest")
                    {
                        UserInputControls = UserInputControls.Accept3dCoordinates,
                    };
     
                    var prResult = prompts.AcquirePoint(prOptions);
Именно.
то есть координаты какой либо точки на дравинге которая лежит под курсором.
Обычно, когда говорят про координаты курсора имеются в виду экранные координаты (в пикселях).
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей КузинАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 116
  • Карма: 8
Цитировать
Обычно, когда говорят про координаты курсора имеются в виду экранные координаты (в пикселях).
Согласен. Не так выразился. Новый год уже близко  ;D