Скрестить DrawJig и MoveGripPointsAt

Автор Тема: Скрестить DrawJig и MoveGripPointsAt  (Прочитано 13401 раз)

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

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Скрестить DrawJig и MoveGripPointsAt
« Ответ #15 : 12-06-2015, 01:40:23 »
и отменив продолжение
А вот это то, чего сделать нельзя.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дима_Автор темы

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: Скрестить DrawJig и MoveGripPointsAt
« Ответ #16 : 12-06-2015, 01:43:50 »
А вот пример с getpoint по сути это делает сам по себе, но там можно использовать только одну опорную точку
P.s. Видимо клик проскакивает

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Скрестить DrawJig и MoveGripPointsAt
« Ответ #17 : 13-06-2015, 21:17:47 »
Отправил вопрос в ADN DevHelp.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дима_Автор темы

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: Скрестить DrawJig и MoveGripPointsAt
« Ответ #18 : 13-06-2015, 23:03:03 »
Спасибо.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Скрестить DrawJig и MoveGripPointsAt
« Ответ #19 : 17-06-2015, 16:37:52 »
Получил ответ. Если в двух словах, то так делать нельзя. Но можешь попробовать такой код:
Код - C# [Выбрать]
  1. public class TestDrawJig : DrawJig
  2.  
  3. {
  4.  
  5.     public  Point3d cp;
  6.  
  7.  
  8.     public TestDrawJig()
  9.  
  10.     {
  11.  
  12.         cp = Point3d.Origin;
  13.  
  14.     }
  15.  
  16.  
  17.     protected override bool WorldDraw(WorldDraw draw)
  18.  
  19.     {
  20.  
  21.         return true;
  22.  
  23.     }
  24.  
  25.  
  26.     protected override SamplerStatus Sampler(JigPrompts prompts)
  27.  
  28.     {
  29.  
  30.         PromptPointResult ppRes = prompts.AcquirePoint("\n[ Jig ] Pick a point : ");
  31.  
  32.  
  33.         if (cp != null)
  34.  
  35.         {
  36.  
  37.             double dDistance = ppRes.Value.DistanceTo(cp);
  38.  
  39.             if (dDistance < 0.00001)
  40.  
  41.             {
  42.  
  43.                 return SamplerStatus.NoChange;
  44.  
  45.             }
  46.  
  47.         }
  48.  
  49.  
  50.         cp = ppRes.Value;
  51.  
  52.  
  53.         return SamplerStatus.OK;
  54.  
  55.     }
  56.  
  57. }
  58.  
  59.  
  60. public class GrpOver : GripOverrule
  61.  
  62. {
  63.  
  64.     private static GrpOver _gripOverrule = null;
  65.  
  66.     private static TestDrawJig _testDrawJig = null;
  67.  
  68.  
  69.     public override bool IsApplicable(RXObject overruledSubject)
  70.  
  71.     {
  72.  
  73.         bool isApplicable = false;
  74.  
  75.         DBPoint point = overruledSubject as DBPoint;
  76.  
  77.         if (point != null)
  78.  
  79.         {
  80.  
  81.             isApplicable = true;
  82.  
  83.         }
  84.  
  85.         return isApplicable;
  86.  
  87.     }
  88.  
  89.  
  90.     public static void AttachOverrule()
  91.  
  92.     {
  93.  
  94.         _gripOverrule = new GrpOver();
  95.  
  96.         Overrule.AddOverrule(RXClass.GetClass(typeof(DBPoint)), _gripOverrule, true);
  97.  
  98.         Overrule.Overruling = true;
  99.  
  100.     }
  101.  
  102.  
  103.     public static void RemoveOverrule()
  104.  
  105.     {
  106.  
  107.         Overrule.RemoveOverrule(RXClass.GetClass(typeof(DBPoint)), _gripOverrule);
  108.  
  109.         Overrule.Overruling = false;
  110.  
  111.         _gripOverrule = null;
  112.  
  113.     }
  114.  
  115.  
  116.     public override void MoveGripPointsAt(Entity ent, IntegerCollection ic, Vector3d vct)
  117.  
  118.     {
  119.  
  120.         DBPoint point = ent as DBPoint;
  121.  
  122.         Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  123.  
  124.         ed.WriteMessage(String.Format("{0}MoveGripPointsAt...", Environment.NewLine));
  125.  
  126.  
  127.         if (point != null && point.ObjectId.IsValid)
  128.  
  129.         {
  130.  
  131.             if (_testDrawJig == null)
  132.  
  133.                 _testDrawJig = new TestDrawJig();
  134.  
  135.  
  136.             PromptResult pr = ed.Drag(_testDrawJig);
  137.  
  138.             if (pr.Status == PromptStatus.OK)
  139.  
  140.             {
  141.  
  142.                 Point3d pt = _testDrawJig.cp;
  143.  
  144.                 ed.WriteMessage(String.Format("Point selected : {0} {1} {2}", pt.X, pt.Y, pt.Z));
  145.  
  146.             }
  147.  
  148.         }
  149.  
  150.  
  151.         base.MoveGripPointsAt(ent, ic, vct);
  152.  
  153.     }
  154.  
  155. }
  156.  
  157.  
  158. public class Commands : IExtensionApplication
  159.  
  160. {
  161.  
  162.     void IExtensionApplication.Initialize()
  163.  
  164.     {
  165.  
  166.         GrpOver.AttachOverrule();
  167.  
  168.     }
  169.  
  170.  
  171.     void IExtensionApplication.Terminate()
  172.  
  173.     {
  174.  
  175.         GrpOver.RemoveOverrule();
  176.  
  177.     }
  178.  
  179. }

Я не пробовал его, но судя по тому что в нём стоит проверка на point.ObjectId.IsValid он работает аналогично твоему.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дима_Автор темы

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: Скрестить DrawJig и MoveGripPointsAt
« Ответ #20 : 18-06-2015, 14:40:02 »
Это грустно - была у меня еще надежда, что можно бует использовать переопределенный метод GetHotGripDimensionData в  унаследованном от GripData в коллекции GetGripPoints () (там например AlternateBasePoint - можно переопределить), но отобразить редактируемые размеры я не осилил - а жаль. В итоге придется приучать юзеров делать лишний щелчок (чтоб отобразить привязки).

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Скрестить DrawJig и MoveGripPointsAt
« Ответ #21 : 18-06-2015, 14:49:54 »
Ну или в качестве разминки перепиши это всё на ObjectARX/C++ - благо есть готовый пример.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение