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

ADN Club => AutoCAD .NET API => Тема начата: Алексей Кузин от 27-12-2018, 18:06:27

Название: Определение позиции курсора в пространстве во время Jig
Отправлено: Алексей Кузин от 27-12-2018, 18:06:27
необходимо найти координаты курсора в произвольной плоскости во время 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.         }


Название: Re: Определение позиции курсора в пространстве во время Jig
Отправлено: Александр Пекшев aka Modis от 27-12-2018, 18:08:27
Думаю, стоит использовать PointMonitor

UPD: Не заметил, что уже пробовали
Название: Re: Определение позиции курсора в пространстве во время Jig
Отправлено: Александр Ривилис от 27-12-2018, 18:12:05
Постановку задачи не понял. Похоже кто-то уже начал подготовку к Новому Году!  ;D Координаты курсора - это что?
В любом случае Accept3dCoordinates не помешает
А что не так с prResult.Value ???
Название: Re: Определение позиции курсора в пространстве во время Jig
Отправлено: Алексей Кузин от 27-12-2018, 18:21:43
Цитировать
Постановку задачи не понял. Похоже кто-то уже начал подготовку к Новому Году!  ;D Координаты курсора - это что?
;D 
то есть координаты какой либо точки на дравинге которая лежит под курсором.

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

                    var prOptions = new JigPromptPointOptions("\nTest")
                    {
                        UserInputControls = UserInputControls.Accept3dCoordinates,
                    };
     
                    var prResult = prompts.AcquirePoint(prOptions);
Именно.
то есть координаты какой либо точки на дравинге которая лежит под курсором.
Обычно, когда говорят про координаты курсора имеются в виду экранные координаты (в пикселях).
Название: Re: Определение позиции курсора в пространстве во время Jig
Отправлено: Алексей Кузин от 27-12-2018, 18:25:35
Цитировать
Обычно, когда говорят про координаты курсора имеются в виду экранные координаты (в пикселях).
Согласен. Не так выразился. Новый год уже близко  ;D