DrawJig из палитры и ком. строка

Автор Тема: DrawJig из палитры и ком. строка  (Прочитано 11770 раз)

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

Оффлайн bargoolАвтор темы

  • ADN Club
  • ***
  • Сообщений: 111
  • Карма: 6
Как сбросить приглашение ком. строки после запуска DrawJig из палитры?
По нажатию кнопки на палитре запускается метод со вставкой примитивов с помощью DrawJig. При этом в ком. строке появляется приглашение. После окончания работы метода приглашение так и висит в ком. строке, от чего хотелось бы избавиться
Видео проблемы
Класс-наследник DrawJig:
Код - C# [Выбрать]
  1. class InsertJigger : DrawJig
  2. {
  3.     Point3d startPoint;
  4.     IEnumerable<Entity> entities;
  5.     Point3d insertPoint;
  6.  
  7.     private readonly Matrix3d currentUCS;
  8.     private readonly Tolerance tolerance = new Tolerance(0.0001, 0.0001);
  9.  
  10.     public InsertJigger(Point3d startPoint, IEnumerable<Entity> ents)
  11.     {
  12.         this.currentUCS = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor.CurrentUserCoordinateSystem;
  13.         this.startPoint = startPoint.TransformBy(currentUCS);
  14.         this.entities = ents;
  15.         this.insertPoint = Point3d.Origin;
  16.     }
  17.  
  18.     protected override bool WorldDraw(Autodesk.AutoCAD.GraphicsInterface.WorldDraw draw)
  19.     {
  20.         Matrix3d mat = Matrix3d.Displacement(this.startPoint.GetVectorTo(this.insertPoint));
  21.  
  22.         mat = currentUCS.PreMultiplyBy(mat);
  23.  
  24.         WorldGeometry geo = draw.Geometry;
  25.         if (geo != null)
  26.         {
  27.             geo.PushModelTransform(mat);
  28.             foreach (var ent in this.entities)
  29.                 geo.Draw(ent);
  30.  
  31.             geo.PopModelTransform();
  32.         }
  33.  
  34.         return true;
  35.     }
  36.  
  37.     protected override SamplerStatus Sampler(JigPrompts prompts)
  38.     {
  39.         JigPromptPointOptions jppo = new JigPromptPointOptions("\nУкажите точку вставки изображения:");
  40.         jppo.UserInputControls = UserInputControls.GovernedByUCSDetect | UserInputControls.Accept3dCoordinates;
  41.  
  42.         PromptPointResult res = prompts.AcquirePoint(jppo);
  43.  
  44.         if (res.Status != PromptStatus.OK)
  45.             return SamplerStatus.Cancel;
  46.  
  47.         if (res.Value.IsEqualTo(this.insertPoint, tolerance))
  48.             return SamplerStatus.NoChange;
  49.  
  50.         this.insertPoint = res.Value;
  51.  
  52.         return SamplerStatus.OK;
  53.     }
  54.  
  55.     private void TransformEntities()
  56.     {
  57.         Matrix3d mat = Matrix3d.Displacement(this.startPoint.GetVectorTo(insertPoint));
  58.         mat = currentUCS.PreMultiplyBy(mat);
  59.         foreach (Entity ent in this.entities)
  60.             ent.TransformBy(mat);
  61.     }
  62.  
  63.     public static PromptResult Jig(IEnumerable<Entity> ents)
  64.     {
  65.         Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
  66.         InsertJigger jigger = new InsertJigger(Point3d.Origin, ents);
  67.         PromptResult res = ed.Drag(jigger);
  68.         if (res.Status == PromptStatus.OK)
  69.             jigger.TransformEntities();
  70.  
  71.         return res;
  72.     }
  73. }
На входе только что созданные и добавленные в транзакцию и т.д. примитивы
Забыл добавить: Autocad 2014

Конечно, остается ещё вариант добавить в конце WriteMessage("\nУсё готово\n")
« Последнее редактирование: 30-07-2014, 17:01:17 от bargool »
Алексей

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

  • Administrator
  • *****
  • Сообщений: 13894
  • Карма: 1789
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: DrawJig из палитры и ком. строка
« Ответ #1 : 30-07-2014, 18:56:24 »
Попробуй после завершения Jig вызвать Editor.PostCommandPrompt
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн bargoolАвтор темы

  • ADN Club
  • ***
  • Сообщений: 111
  • Карма: 6
Re: DrawJig из палитры и ком. строка
« Ответ #2 : 31-07-2014, 09:44:56 »
Александр Наумович, спасибо! Работает.
Алексей

Оффлайн bargoolАвтор темы

  • ADN Club
  • ***
  • Сообщений: 111
  • Карма: 6
Re: DrawJig из палитры и ком. строка
« Ответ #3 : 31-07-2014, 12:20:54 »
Нда, там всё веселее оказалось. У меня после вставки изображения регистрируется PointMonitor, который показывает служебную информацию в ToolTip'ах.
Так вот, пока не кликнешь в окно документа, эти тултипы показываться не начинали.
Причём если после вставки кликнуть - начнут показваться, потом опять вставить изображение - перестают показываться.
Решил МЕГА-Костылём. Сделал пустую команду
Код - C# [Выбрать]
  1. [CommandMethod("DummyCommand")]
  2. public void DummyCommand()
  3. { }
А после вставки изображения в чертёж вызываю
Код - C# [Выбрать]
  1. dwg.SendStringToExecute("DummyCommand ", true, false, false);
Алексей

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: DrawJig из палитры и ком. строка
« Ответ #4 : 31-07-2014, 12:46:59 »
Решил МЕГА-Костылём. Сделал пустую команду
Блестяще!!
http://www.youtube.com/watch?v=CQ1xGJW1Yx4

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

  • Administrator
  • *****
  • Сообщений: 13894
  • Карма: 1789
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: DrawJig из палитры и ком. строка
« Ответ #5 : 31-07-2014, 19:15:29 »
Я бы сделал совсем иначе. Тот код, который выполняется у тебя из палитры, я бы оформил в виде команды, которую и запускал бы.
« Последнее редактирование: 31-07-2014, 19:25:34 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн bargoolАвтор темы

  • ADN Club
  • ***
  • Сообщений: 111
  • Карма: 6
Re: DrawJig из палитры и ком. строка
« Ответ #6 : 31-07-2014, 23:29:36 »
Блестяще!!
http://www.youtube.com/watch?v=CQ1xGJW1Yx4
Ага, именно так, как озаглавлен этот ролик
Я бы сделал совсем иначе. Тот код, который выполняется у тебя из палитры, я бы оформил в виде команды, которую и запускал бы.
Да, в идеале стоит сам процесс вставки вынести в команду. Просто здесь я пошел по пути наименьшего сопротивления =)
Алексей

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 738
Re: DrawJig из палитры и ком. строка
« Ответ #7 : 01-08-2014, 13:09:43 »
Я бы сделал совсем иначе. Тот код, который выполняется у тебя из палитры, я бы оформил в виде команды, которую и запускал бы.
Непонятно только, почему нужно так делать? Я использую EntityJig для вставки блоков с использованием палитры - такой проблемы нет. Команд и дополнительных команд не использую - только метод отклика на щелчок по элементу списка в контроле палитры.
https://screencast.autodesk.com/main/details/88e3bbbd-29d8-45f2-b74d-a68f8bfe34e5
DrawJig как-то по другому себя ведет?

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

  • Administrator
  • *****
  • Сообщений: 13894
  • Карма: 1789
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: DrawJig из палитры и ком. строка
« Ответ #8 : 01-08-2014, 19:12:04 »
Непонятно только, почему нужно так делать?
Палитра работает в контексте приложения, а команду можно запустить в контексте документа. С контекстом приложения работать сложнее. Не говоря уже о необходимости блокировки документа, еще частенько бывают проблемы с переключением фокуса между палитрой и окном документа. И всё это еще и зависит от версий AutoCAD. Поэтому если можно реализовать в виде запуска команды, то (IMHO) это проще и надежней.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 738
Re: DrawJig из палитры и ком. строка
« Ответ #9 : 27-08-2014, 11:56:12 »
Непонятно только, почему нужно так делать? Я использую EntityJig для вставки блоков с использованием палитры - такой проблемы нет.
Был неправ. Сегодня нашел в неожиданном месте своего кода вот такую строчку:
ed.WriteMessage("\n");
Похоже, что у меня тоже была такая проблема и я ее вот таким вот образом обошел :)

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 738
Re: DrawJig из палитры и ком. строка
« Ответ #10 : 01-09-2014, 19:29:03 »
Попробуй после завершения Jig вызвать Editor.PostCommandPrompt
Еще вот такой вариант сегодня нашел: Autodesk.AutoCAD.Internal.Utils.PostCommandPrompt();
Интересно, чем отличается? В документации ничего нет про Autodesk.AutoCAD.Internal :(

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

  • Administrator
  • *****
  • Сообщений: 13894
  • Карма: 1789
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: DrawJig из палитры и ком. строка
« Ответ #11 : 01-09-2014, 20:06:37 »
В документации ничего нет про Autodesk.AutoCAD.Internal
Ну не зря оно Internal (т.е. для внутреннего потребления Autodesk'овцами). Думаю что эти методы эквивалентны, но сначала появился Autodesk.AutoCAD.Internal.Utils.PostCommandPrompt, а в очередной версии AutoCAD появился  Editor.PostCommandPrompt.
И то и другое - это обертки для acedPostCommandPrompt из ObjectARX.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 738
Re: DrawJig из палитры и ком. строка
« Ответ #12 : 18-11-2016, 19:54:36 »
Я бы сделал совсем иначе. Тот код, который выполняется у тебя из палитры, я бы оформил в виде команды, которую и запускал бы.
Попробовал этот совет воплотить в жизнь и столкнулся со следующим поведением. Команда, отправленная из палитры с помощью Document.SendStringToExecute отрабатывает только тогда, когда курсор из палитры переводится на чертеж. Как считаете, можно сделать так, чтобы сразу отрабатывала?

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

  • Administrator
  • *****
  • Сообщений: 13894
  • Карма: 1789
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: DrawJig из палитры и ком. строка
« Ответ #13 : 18-11-2016, 20:39:28 »
Не помогает, если до запуска команды:
Код - C# [Выбрать]
  1.  Autodesk.AutoCAD.Internal.Utils.SetFocusToDwgView();
?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 738
Re: DrawJig из палитры и ком. строка
« Ответ #14 : 18-11-2016, 20:50:03 »
Эх... Все оказалось проще - надо третий параметр (wrapUpInactiveDoc) задать как false. Зачем я его в true выставил?  ??? Пора на отдых. :)