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

ADN Club => AutoCAD .NET API => Тема начата: Максим Маркевич от 02-08-2016, 15:27:08

Название: В чем отличия EntytyJig от DrawJig?
Отправлено: Максим Маркевич от 02-08-2016, 15:27:08
Всем привет. Я тут борозжу просторы необъятного Jig и вот не могу понять, чем же EntytyJig отличается от DrawJig? Заранее, извиняюсь за нелепости, которые могут стать следствием неполного понимания происходящего на просторах Jig.
Немного поясню, что навело меня на эту тему.
Вот две ссылки:
1. EntytyJig: http://through-the-interface.typepad.com/through_the_interface/2007/05/using_a_jig_fro.html (http://through-the-interface.typepad.com/through_the_interface/2007/05/using_a_jig_fro.html)
Извините, вам запрещён просмотр содержимого спойлеров.

2. DrawJig: http://adndevblog.typepad.com/autocad/2012/07/how-to-show-a-block-when-positioning-it-using-c.html (http://adndevblog.typepad.com/autocad/2012/07/how-to-show-a-block-when-positioning-it-using-c.html)
Извините, вам запрещён просмотр содержимого спойлеров.

Визуально, в работе в AutoCAD я не вижу никаких отличий! Укажите путь, братцы. :)
Пойдут любые пояснения "своими словами", так же буду признателен за ссылки на любую информацию, касающеюся вышеописанного.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: bargool от 02-08-2016, 15:54:13
Первое, что приходит на ум, EntytyJig - для одного объекта, DrawJig - для множества
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 02-08-2016, 16:11:27
Если в двух словах, то DrawJig более мощное средство. EntityJig предназначено для визуального задания новому (еще не добавленному в чертеж) примитиву неких свойств и затем для добавления в базу. DrawJig прекрасно справляется и с этим и кроме того позволяет работать с множеством примитивов, которые могут не быть еще в чертеже, а могут и быть в нём, вообще без примитивов (просто в WorldDraw рисуешь что хочешь).
Короче говоря: для EntityJig требуется примитив, а для DrawJig - нет.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Максим Маркевич от 02-08-2016, 17:56:53
просто в WorldDraw рисуешь что хочешь
Да ладно, как так? Вообще, что хочешь?
У меня не вышло так. :(
Может, есть какой примерчик для наглядности?
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Дмитрий Загорулькин от 02-08-2016, 18:04:00
В методе WorldDraw из первого поста (DrawJig, строка 116), можно рисовать линии, окружности и пр. вызывая методы draw.Geometry.WorldLine, draw.Geometry.Circle и др.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 02-08-2016, 19:26:43
У меня не вышло так. :(
Пробовал?
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Максим Маркевич от 02-08-2016, 20:01:40
В методе WorldDraw из первого поста (DrawJig, строка 116), можно рисовать линии, окружности и пр. вызывая методы draw.Geometry.WorldLine, draw.Geometry.Circle и др.
Пробовал?
Дочертить линию или окружность получалось, но вот не вышло отслеживать точку. Возможно, я неправильно понимаю концепцию.

Извините, вам запрещён просмотр содержимого спойлеров.

PS. И да простите меня Вы за недочеты и нелепости программного кода выше.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 03-08-2016, 01:00:02
Возможно, я неправильно понимаю концепцию.
Похоже что так. В методе WorldDraw происходит только отрисовка. Т.е. в этом методе ты (используя значение pp2) должен модифицировать вставку блока (изменить его динамический параметр или параметры, как ты делаешь в строках 52...74 твоего кода, корректность которых я не проверял) и вызывать для него метод draw.Geometry.Draw(). Не уверен, что это будет нормально работать для динамического блока, но можешь попробовать.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Максим Маркевич от 03-08-2016, 14:30:08
В методе WorldDraw происходит только отрисовка. Т.е. в этом методе ты (используя значение pp2) должен модифицировать вставку блока (изменить его динамический параметр или параметры, как ты делаешь в строках 52...74 твоего кода, корректность которых я не проверял) и вызывать для него метод draw.Geometry.Draw(). Не уверен, что это будет нормально работать для динамического блока, но можешь попробовать.
Спасибо большое! Вроде как, работает нормально. По крайней мере ничего ненормального я не заметил.

Извиняюсь за некоторый отход от темы. Всем спасибо за ответы. Решил использовать только DrawJig, так как не вижу смысла использовать то (EntytyJig), у чего меньше возможностей (опять же, если я правильно все понял).
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 03-08-2016, 15:03:01
Выглядит нормально. Прятать исходную вставку блока-стрелки я бы не стал. Для определения угла поворота можно воспользоваться не AcquirePoint, а AcquireAngle, чтобы было больше похоже на то, как это делает AutoCAD при вставке блока.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Максим Маркевич от 03-08-2016, 15:40:32
Прятать исходную вставку блока-стрелки я бы не стал.
Почему?
Для определения угла поворота можно воспользоваться не AcquirePoint, а AcquireAngle, чтобы было больше похоже на то, как это делает AutoCAD при вставке блока.
Спасибо. Обязательно попробую.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 03-08-2016, 18:19:20
Почему?
Мне так кажется. Это не имеет отношения к программированию. Просто я бы так сделал. Кстати, это бы позволило бы еще добавить и динамически размеры (длину и угол поворота). Впрочем это твоё дело.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Максим Маркевич от 08-08-2016, 13:01:13
Добавляю подкорректированный, как я считаю, код, который позволяет манипулировать блоком, как в посте #8:
Извините, вам запрещён просмотр содержимого спойлеров.
Выглядит нормально. Прятать исходную вставку блока-стрелки я бы не стал
А у меня почему-то и не вышло ее спрятать.
Кстати, это бы позволило бы еще добавить и динамически размеры (длину и угол поворота
Увидеть бы подобное в действии, не очень понятно, каким образом..
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 08-08-2016, 13:36:01
Увидеть бы подобное в действии, не очень понятно, каким образом..
У меня своего примера нет. Посмотри вот этот: http://spiderinnet1.typepad.com/blog/2012/03/autocad-net-entityjig-dynamic-dimension-and-line-jig.html
А у меня почему-то и не вышло ее спрятать.
Ну и не надо.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Максим Маркевич от 08-08-2016, 13:41:48
У меня своего примера нет. Посмотри вот этот: http://spiderinnet1.typepad.com/blog/2012/03/autocad-net-entityjig-dynamic-dimension-and-line-jig.html
Спасибо. Разберусь.
Ну и не надо.
Хотелось бы. ) Думаю, со временем пойму.
Просто в некоторых случаях (на определенных блоках) смотрится совсем не очень.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 08-08-2016, 13:44:00
Хотелось бы. ) Думаю, со временем пойму.
Просто в некоторых случаях (на определенных блоках) смотрится совсем не очень.
Ну если приведёшь код, то будет понятно в чем проблема. Скорее всего скрываешь не тот блок.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Максим Маркевич от 08-08-2016, 13:46:32
Ну если приведёшь код, то будет понятно в чем проблема. Скорее всего скрываешь не тот блок.
Я уже привел (#12). :)
Добавляю подкорректированный, как я считаю, код, который позволяет манипулировать блоком, как в посте #8:
Спойлер
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 08-08-2016, 16:23:56
Я уже привел (#12). :)
И где же ты там прячешь блок? Я уже не говорю, что у тебя там есть куча странностей, типа ненужных  blockRef.Dispose();

Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Максим Маркевич от 08-08-2016, 16:35:29
И где же ты там прячешь блок?
Так я же и говорю, что ничего не вышло. :-\
Я уже не говорю, что у тебя там есть куча странностей, типа ненужных  blockRef.Dispose();
Работал с примером из поста #1 данной темы. Там был Dispose(), вот я и оставил. Полного понимания работы каждой строчки нет, отсюда и странности.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 08-08-2016, 16:51:02
Так я же и говорю, что ничего не вышло. :-\
Для то, чтобы скрыть вставленный в базу примитив необходимо использовать свойство Visible (устанавливать его в false).
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Максим Маркевич от 08-08-2016, 17:35:14
Для то, чтобы скрыть вставленный в базу примитив необходимо использовать свойство Visible (устанавливать его в false).
Сделано. В первой транзакции после первого Jig (перед добавлением нового DBOObject) добавил false, а потом во втором Jig в WorldDraw добавил true и все так, как надо. Спасибо!
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Владимир Шу от 09-08-2016, 09:56:21
А есть ли способ заставить работать ОРТО режим при ввод в коде опубликованном в  этом посте (http://"http://adn-cis.org/forum/index.php?topic=7251.msg21679#msg21679") ?
Добавление UserInputControls.GovernedByOrthoMode в  методе MyBlockJig2.Sampler() к нужному результату не приводят
На всякий случай вот код метода:
Код - C# [Выбрать]
  1.         protected override SamplerStatus Sampler(JigPrompts prompts)
  2.         {
  3.             var jigOpts = new JigPromptPointOptions("\nEnd point: ") as JigPromptPointOptions;
  4.             jigOpts.UserInputControls =
  5.                 (UserInputControls.Accept3dCoordinates |
  6.                  UserInputControls.NullResponseAccepted |
  7.                  UserInputControls.GovernedByOrthoMode);
  8.  
  9.             jigOpts.Message = "Select a point:";
  10.  
  11.             var jigRes = prompts.AcquirePoint();
  12.            
  13.  
  14.             var pt = jigRes.Value;
  15.             if (pt == Pt2)
  16.                 return SamplerStatus.NoChange;
  17.             Pt2 = pt;
  18.             if (jigRes.Status == PromptStatus.OK)
  19.                 return SamplerStatus.OK;
  20.             return SamplerStatus.Cancel;
  21.         }
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Максим Маркевич от 09-08-2016, 10:08:10
А есть ли способ заставить работать ОРТО режим при ввод в коде опубликованном в этом посте ?
Добавление UserInputControls.GovernedByOrthoMode в  методе MyBlockJig2.Sampler() к нужному результату не приводят
Дело в том, что у меня построение происходит по 2м точкам, поэтому орто и не работает (как мне кажется). Вот если использовать совет Александра Ривилиса:
Для определения угла поворота можно воспользоваться не AcquirePoint, а AcquireAngle, чтобы было больше похоже на то, как это делает AutoCAD при вставке блока.
То, думаю, будет работать. Пока сам не пробовал, потому что все эти вопросы затевались для другого блока, а этот - просто что-то первое простое, что пришло в голову.
Я в дальнейшем возился с подобными блоками:


Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 09-08-2016, 11:03:47
Boxa.Shu
Насколько я помню орто возможно только тогда, когда задана базовая точка, т.е.
Код - C# [Выбрать]
  1. jigOpts.BasePoint = [базовая точка];
  2. jigOpts.UseBasePoint = true;
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Владимир Шу от 09-08-2016, 12:23:08
Насколько я помню орто возможно только тогда, когда задана базовая точка, т.е.

Я видел эту (http://spiderinnet1.typepad.com/blog/2012/06/autocad-net-use-drawjig-to-dynamically-move-rotate-and-scale-multiple-entities-of-any-kinds.html) и эту (https://forums.autodesk.com/t5/net/jig-and-orthomode/td-p/2151318) ссылки, код пробовал по  всякому, орто запустить не получилось, сообщения объявленное в jigOpts.Message не выводятся (я сильно сомневаюсь что    evthisrel менял код метода MyBlockJig2.Sampler под новый блок и у него в видео из 22 сообщения видно, что сообщение не выводится):

Код - C# [Выбрать]
  1.            
  2.             var jigOpts = new JigPromptPointOptions("\nEnd point: ") as JigPromptPointOptions;
  3.             jigOpts.BasePoint = Pt1;
  4.             jigOpts.UseBasePoint = true;
  5.             jigOpts.UserInputControls =
  6.                 (UserInputControls.Accept3dCoordinates |
  7.                  UserInputControls.NullResponseAccepted |
  8.                  UserInputControls.GovernedByOrthoMode);
  9.            
  10.             //jigOpts.BasePoint = Pt1;
  11.             //jigOpts.UseBasePoint = true;
  12.             jigOpts.Message = "\nSelect a point:";
  13.  
  14.             var jigRes = prompts.AcquirePoint();

ЗЫ.
Поправил ссылки. Недопоняли мы друг друга с движком форума и он лишний заголовок добавил. =(
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Максим Маркевич от 09-08-2016, 12:33:23
Я видел эту и эту ссылки
Boxa.Shu, извини, что-то ссылки твои не открываются, не мог бы ты подкорректировать?
я сильно сомневаюсь что    evthisrel менял код метода MyBlockJig2.Sampler под новый блок и у него в видео из 22 сообщения видно, что сообщение не выводится
Да, ты прав. Сообщение не выводится. И я не разобрался, почему.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 09-08-2016, 12:33:47
Вставляй нормально ссылки. Или сам попробуй по ним перейти.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 09-08-2016, 12:39:03
сообщения объявленное в jigOpts.Message не выводятся (я сильно сомневаюсь что    evthisrel менял код метода MyBlockJig2.Sampler под новый блок и у него в видео из 22 сообщения видно, что сообщение не выводится):
А должно было выводится? Откуда prompts.AcquirePoint() знать о существовании jigOpts ???
Может быть должно быть как-то так:
Код - C# [Выбрать]
  1. var jigRes = prompts.AcquirePoint(jigOpts);
вместо
Код - C# [Выбрать]
  1. var jigRes = prompts.AcquirePoint();

???
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Владимир Шу от 09-08-2016, 12:42:08
Откуда prompts.AcquirePoint() знать о существовании jigOpts
Так, разобрался. Перегрузки этого метода я и не посмотрел... все заработало. Спасибо.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Максим Маркевич от 09-08-2016, 12:50:08
А должно было выводится? Откуда prompts.AcquirePoint() знать о существовании jigOpts
Спасибо!
Насколько я помню орто возможно только тогда, когда задана базовая точка
Получается, нет, достаточно только того, что Boxa.Shu дописал (точнее, я не задавал базовую точку, а просто дописал опцию, и все работает с орто):
Код - C# [Выбрать]
  1. UserInputControls.GovernedByOrthoMode
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Владимир Шу от 29-08-2016, 18:00:55
Продолжу в этой теме, т.к. код здешний, только слегка модифицировал его...
Смысл такой:
1. Вставляю блок InsertJig () висит на курсоре и указывается базовая точка
2. Задаю начальные параметры DragJig2() поворот блока и длина
3. Задаю последующие параметры DragJigDist() задается ширина, должна быть перпендикулярна длине.

Первые два пункта проходят успешно и работают отлично, а вот с последним проблема, выглядит она вот так:

(https://i.gyazo.com/8223d23b2dec808b7b7132cd621a7a46.png)

Пробовал в классе MyBlockJigDist использовать не AcquireDistance, а AcquirePoint, результат практически такой же (работает не стабильно и перескакивает в состояние как на картинке)

Собственно, вопрос как победить этот ромбик и заставить вытягиваться нормально.
Есть идеи где я напортачил?

Проект с тестовым файлом под 2014 акад во вложении и на всякий случай код (он тестовый, свалил в кучу для простоты публикации, так что не судите строго).

Извините, вам запрещён просмотр содержимого спойлеров.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 29-08-2016, 20:24:45
Подозреваю, что проблема в самом блоке.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Максим Маркевич от 30-08-2016, 00:07:58
Подозреваю, что проблема в самом блоке.
С блоком, однозначно, все в порядке (он создан при помощи параметров и операций - там не может быть таких приколов).
Надо с кодом разбираться.. Я смогу только утром потестировать.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Максим Маркевич от 30-08-2016, 02:42:20
Boxa.Shu, проблема связана с некорректностью присвоения линейному параметру "дистанции". Скорей всего это баг(жду мыслей от Александра Ривилиса на этот счет).
Решение: использовать полярный параметр вместо линейного в блоке, не видоизменяя код!
Свои размышления о том, как была выявлена проблема представляю в виде видео, так как это очень сложно описать словами :)

Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Владимир Шу от 30-08-2016, 08:08:32
Подозреваю, что проблема в самом блоке.
нет, он очень простой, там нечему ломаться.

Максим Маркевич, спасибо за упоминание отрицательного значения! слона то я и не заметил.
Решение: блок менять не нужно, код менять не нужно (AcquireDistance вполне справляется) просто добавить условие в метод WorldDraw, что производить присвоение значения, только при положительном вводном.

Спасибо за помощь. Чувствовал, что загвоздка очевидная и простая, но нащупать самостоятельно не смог.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Владимир Шу от 30-08-2016, 10:27:05
Александр Ривилис, Еще один уточняющий вопросик по коду в этой ветке.
Как при использовании DrawJig, при вводе точки или дистанции включить динамический ввод?

На всякий случай эту (http://www.caduser.ru/forum/index.php?PAGE_NAME=read&FID=49&TID=41753&PAGEN_1=2) тему читал, но там про Keywords, про динамический ввод не нашел...
Код в этой ветке  (http://adn-cis.org/forum/index.php?topic=2754.0) так же посмотрел, у Александра на видео динамический код работает, а отличий в коде не нашел...
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 30-08-2016, 10:51:49
Как при использовании DrawJig, при вводе точки или дистанции включить динамический ввод?
Наверное нужно вводить с базовой точкой.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Владимир Шу от 30-08-2016, 10:56:13
Наверное нужно вводить с базовой точкой.
И с базовой точкой и со значением по умолчанию... не получается.
Даже выбрать значение по умолчанию не получается.

Код - C# [Выбрать]
  1.         protected override Ed.SamplerStatus Sampler(Ed.JigPrompts prompts)
  2.         {
  3.             Ed.JigPromptDistanceOptions jigOpts = new Ed.JigPromptDistanceOptions("\nEnd point: ") as Ed.JigPromptDistanceOptions;
  4.             jigOpts.UserInputControls =
  5.                                     (Ed.UserInputControls.Accept3dCoordinates
  6.                                      | Ed.UserInputControls.NoZeroResponseAccepted
  7.                                      | Ed.UserInputControls.AcceptOtherInputString
  8.                                      | Ed.UserInputControls.NoNegativeResponseAccepted);
  9.  
  10.             jigOpts.DefaultValue = 200;
  11.             jigOpts.BasePoint = Pt1;
  12.             jigOpts.UseBasePoint = true;
  13.  
  14.  
  15.             jigOpts.Message = "Select a point:";
  16.             Ed.PromptDoubleResult jigRes;
  17.  
  18.             jigRes = prompts.AcquireDistance(jigOpts);
  19.             double pt = jigRes.Value;
  20.  
  21.  
  22.             if (Math.Round(pt,2) == Pt2)
  23.                 return Ed.SamplerStatus.NoChange;
  24.  
  25.             Pt2 = Math.Round(pt, 2);
  26.  
  27.             if (jigRes.Status == Ed.PromptStatus.OK)
  28.                 return Ed.SamplerStatus.OK;
  29.  
  30.             return Ed.SamplerStatus.Cancel;
  31.         }
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 30-08-2016, 10:59:21
Что ты подразумеваешь под динамическим вводом? Появление динамических размеров? Тогда программировать это нужно. Нужно добавлять динамические размеры, нужно обеспечить метод GetDynamicDimensionData. Посмотри этот пример:
http://spiderinnet1.typepad.com/blog/2012/03/autocad-net-entityjig-dynamic-dimension-and-line-jig.html
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 30-08-2016, 11:50:49
Кстати, в составе ObjectARX SDK есть пример samples\dotNet\EllipseJig, который использует динамические размеры.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Владимир Шу от 30-08-2016, 11:57:06
Спасибо, понял. Я думал, есть более простой путь... ну ничего освою и это. =о)
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Максим Маркевич от 30-08-2016, 12:13:24
Максим Маркевич, спасибо за упоминание отрицательного значения! слона то я и не заметил.
Решение: блок менять не нужно, код менять не нужно (AcquireDistance вполне справляется) просто добавить условие в метод WorldDraw, что производить присвоение значения, только при положительном вводном.

Спасибо за помощь. Чувствовал, что загвоздка очевидная и простая, но нащупать самостоятельно не смог.
Да не за что. Было в кайф поразбираться.   :)
Кстати, я пробовал в твоем коде просто втупую добавить модуль в присвоении значения динамическому параметру, но мне не помогло.

Кстати, в составе ObjectARX SDK есть пример samples\dotNet\EllipseJig, который использует динамические размеры.
Вот за это спасибо. Очень ценный пример.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 30-08-2016, 12:18:02
Кстати, я пробовал в твоем коде просто втупую добавить модуль в присвоении значения динамическому параметру, но мне не помогло.
Проблема кажется не только в отрицательных, но и в нулевых значениях.
Спасибо, понял. Я думал, есть более простой путь...
А как ты себе представлял более простой путь? Как программа сама догадается сколько и каких размеров ты хотел бы добавить и как они связаны с тем что у тебя рисуется в этот момент времени? Кстати, аналогичный способ используется и в Custom Entity (и в Overrule) для работы с "ручками".
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Владимир Шу от 30-08-2016, 12:32:16
Проблема кажется не только в отрицательных, но и в нулевых значениях.
Угу, вот кусок кода =о)
Код - C# [Выбрать]
  1.         protected override bool WorldDraw(Gui.WorldDraw draw)
  2.         {
  3.             Db.BlockReference blockRef = _blockRecId.GetObject(Db.OpenMode.ForWrite) as Db.BlockReference;
  4.             blockRef.Visible = true;
  5.  
  6.             Db.DynamicBlockReferencePropertyCollection dynBlockRefProp = blockRef.DynamicBlockReferencePropertyCollection;
  7.             double distance = Pt2; //Pt1.DistanceTo(Pt2);
  8.  
  9.             // Иначе возможны ромбики =))
  10.             if (distance > 1)
  11.             {
  12.                 foreach (Db.DynamicBlockReferenceProperty prop in dynBlockRefProp)
  13.                 {
  14.                     if (prop.PropertyName == strParamNameDist)
  15.                         prop.Value = distance;
  16.                 }
  17.             }
  18.             draw.Geometry.Draw(blockRef);
  19.             blockRef.Dispose();
  20.             return true;
  21.         }

А как ты себе представлял более простой путь?
В процессе вытягивания, при включенном орто режиме, возле курсора появляется окошко со значением, вот и думал можно ли как то до него достучаться и передать значение... видимо нельзя и нужно делать самому.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Максим Маркевич от 30-08-2016, 12:57:01
Проблема кажется не только в отрицательных, но и в нулевых значениях.
Поэтому я люблю полярные параметры, чаще всего, они удобней в обращении в автокаде, и так уж сложилось, что менее требовательны к коду, который ими манипулирует.
Плюс, в случае блока от Boxи.Shu можно было бы заменить операцию угла и растяжения одним полярным параметром, но это уже совсем другая история и offtopic.
В процессе вытягивания, при включенном орто режиме, возле курсора появляется окошко со значением, вот и думал можно ли как то до него достучаться и передать значение... видимо нельзя и нужно делать самому.
Я примерно также это все представлял(до сегодняшнего дня), пока не посмотрел samples\dotNet\EllipseJig. :)
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Владимир Шу от 30-08-2016, 17:25:59
Худо, бедно, разобрался и вроде даже работает...
(https://i.gyazo.com/45f4d4e9abd947f1833d6a2541f261c7.png)

Но, напрягает то, что после ввода длины, нужно нажимать Tab, иначе введенный размер не воспринимается, а хотелось бы нажать пробел или enter. (а по хорошему и последнее введенное значение напоминать и градусы не вводить...)

Понимаю, что нужно что-то поменять в Ed.SamplerStatus Sampler(Ed.JigPrompts prompts), но не понимаю пока что именно.

Требуется подсказка знатоков. =о)

Архив с проектом во вложении, изменял только класс MyBlockJigDist
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 31-08-2016, 00:12:58
Тут и подсказывать нечего. Разберись для начала где у тебя должны быть базовые точки размера. То что я вижу - это полная ерунда:



Подсказка - вторая точка не должна быть на курсоре, а должна двигаться вдоль линии, по которой "работает" Distance2:

(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fimg-fotki.yandex.ru%2Fget%2F51393%2F7842324.7%2F0_1346d6_79a8552e_orig.png&hash=96dbff5dd8bea29e1a4fa1bcf6797620)


Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Дмитрий Загорулькин от 31-08-2016, 05:30:23
Boxa.Shu, Максим Маркевич, я не увидел в ваших кодах обработку двух очень интересных моментов:
- немировая система координат
- блок с атрибутами
Еще руки не дошли или сознательно не делали?
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Владимир Шу от 31-08-2016, 07:05:10
Пока ехал вчера с работы, подумалось, что нужно вернуть запрос дистанции и точку считать самостоятельно, а утром увидел ответ от Александра Наумовича... верной дорогой иду =о)

То что я вижу - это полная ерунда:
не ерунда =) , а нагромождение хлама и кусков чужого кода, только для экспериментов и  для того что бы разобраться.
блок с атрибутами
http://adn-cis.org/forum/index.php?topic=7251.msg22060#msg22060 (http://adn-cis.org/forum/index.php?topic=7251.msg22060#msg22060) там в простыне в районе 75 строки...
а вот про системы  координат, пока руки не дошли, но видимо будет после разбора с динамическими размерами дойдут и до этого.

И можно будет заканчивать эту тему, вроде бы тут будет разобрано все, что касается DrowJig, все в одном месте =о)


Добавлю.
Для класса MyBlockJigDist вернул выбор именно дистанции, в методе WorldDraw этого же класса добавил вычисление координаты точки:
Код - C# [Выбрать]
  1. Gem.Point3d Pt3 = new Gem.Point3d(0, distance, 0).TransformBy(blockRef.BlockTransform);
  2.                 Pt3 = Pt3.RotateBy(dblBaseAngle, Gem.Vector3d.ZAxis, Pt1);
И вроде бы внешне все стало так как хочется:
(https://i.gyazo.com/12a8af43e6d4a07c533fe0a45f4f9272.png)
но вот введенное значение пока не понимает... требуется еще подсказка

еще дополню...
Если вместо запроса дистанции, запрашивать точку, то введенный размер все равно не кушает:
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Максим Маркевич от 31-08-2016, 09:29:15
Boxa.Shu, Максим Маркевич, я не увидел в ваших кодах обработку двух очень интересных моментов:
- немировая система координат
- блок с атрибутами
Еще руки не дошли или сознательно не делали?
Насчет немировой системы, лично я еще не дошел до осознания того, зачем это нужно.
Насчет атрибутов, все есть, только не в этом коде, он так, для теста.
Вот, например, jig с атрибутами:

И можно будет заканчивать эту тему, вроде бы тут будет разобрано все, что касается DrowJig, все в одном месте =о)
Вот разберешься с динамическими размерами и можно будет заканчивать (я внимательно наблюдаю, очень интересно). ;) Когда у меня доберутся руки до них и что-то будет не понятно, я новую тему создам.  :D
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Владимир Шу от 31-08-2016, 13:05:15
Ага, вот она моя проблема: http://forums.autodesk.com/t5/net/acquirepoint-problem/m-p/1771510#M4836
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 31-08-2016, 13:12:13
но вот введенное значение пока не понимает... требуется еще подсказка
Думаю что тебе следует поиграться с OnDimensionValueChanged - в этом методе получать новое значение Dimension и менять величину Distance2.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Владимир Шу от 31-08-2016, 15:10:54
Думаю что тебе следует поиграться с OnDimensionValueChanged - в этом методе получать новое значение Dimension и менять величину Distance2.
Видимо я что то делаю не так, т.к. данное событие у меня не срабатывает, хотя и понятно как оно должно работать (в аргументе должен возвращаться индекс измененного размера и его значение, дальше беру значение и присваиваю его переменной и в Sampler-е обрабатываю это изменение...)
Но увы, даже BrakePoint внутри этого реактора не срабатывают... =(
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 31-08-2016, 15:16:42
Выложи последнее состояние своего проекта - гляну.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Владимир Шу от 31-08-2016, 15:25:55
проект во вложении
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Дмитрий Загорулькин от 31-08-2016, 16:25:53
Решил использовать только DrawJig, так как не вижу смысла использовать то (EntytyJig), у чего меньше возможностей (опять же, если я правильно все понял).
Каждый инструмент хорош для своих целей. Я для вставки-перемещения-поворота блока использую EntityJig. Думаю, что и в Вашем случае его будет достаточно. Для одного объекта это гораздо удобнее - меньше кода писать.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Владимир Шу от 31-08-2016, 16:29:42
Для одного объекта это гораздо удобнее - меньше кода писать.
После того количества кода,просмотренного на просторах интернета, для себя сделал вывод, что это далеко не так, кода приблизительно одинаково.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 31-08-2016, 16:33:59
Для одного объекта это гораздо удобнее - меньше кода писать.
И динамические размеры работают.
Boxa.Shu
Похоже это или баг, или вообще не реализовано в .NET API. Отправлю в ADN DevHelp - может разъяснят.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Дмитрий Загорулькин от 31-08-2016, 17:26:43
Попробую более подробно объяснить различия. При использовании DrawJig, вы описываете отображение в WorldDraw. Вот, например:
Код - C# [Выбрать]
  1.        protected override bool WorldDraw(Gui.WorldDraw draw)
  2.         {
  3.             Db.BlockReference inMemoryBlockRef = new Db.BlockReference(Pt, _blockId);
  4.             Ed.Editor ed = App.Application.DocumentManager.MdiActiveDocument.Editor;
  5.             Db.Database db = ed.Document.Database;
  6.             if (inMemoryBlockRef.Annotative == Db.AnnotativeStates.True)
  7.                 AddScale(inMemoryBlockRef);
  8.  
  9.             draw.Geometry.Draw(inMemoryBlockRef);
  10.             inMemoryBlockRef.Dispose();
  11.             return true;
  12.         }
При каждом изменении создается новый объект в памяти, наделяется нужными свойствами, отображается и уничтожается. Я почему и спросил про атрибуты - попробуйте блок с атрибутами прогнать через такой Jig и удивитесь. Потому что для BlockReference создать атрибуты можно только тогда, когда он добавлен в базу данных. А тут объект создается в памяти только. Кстати, почему не пользуетесь конструкцией using?
Второй пример:
Код - C# [Выбрать]
  1.         protected override bool WorldDraw(Gui.WorldDraw draw)
  2.         {
  3.             Db.BlockReference blockRef = _blockRecId.GetObject(Db.OpenMode.ForWrite) as Db.BlockReference;
  4.             blockRef.Visible = true;
  5.             Db.DynamicBlockReferencePropertyCollection dynBlockRefProp = blockRef.DynamicBlockReferencePropertyCollection;
  6.             foreach (Db.DynamicBlockReferenceProperty prop in dynBlockRefProp)
  7.             {
  8.                 if (prop.PropertyName == strParamNameDist)
  9.                     prop.Value = Pt1.DistanceTo(Pt2);
  10.  
  11.                 if (prop.PropertyName == strParamNameAngle)
  12.                     prop.Value = dblBaseAngle - Pt1.GetVectorTo(Pt2).GetAngleTo(Gem.Vector3d.XAxis, Gem.Vector3d.ZAxis);
  13.             }
  14.             draw.Geometry.Draw(blockRef);
  15.             blockRef.Dispose();
  16.             return true;
  17.         }
Здесь при каждом изменении переоткрывается объект на запись. При использовании EntityJig не нужно каждый раз открывать объект. Он уже хранится открытым в свойстве Entity. Кстати, сочетание открытия объекта через ObjectId.GetObject с последующим Dispose открытого объекта, на мой взгляд, не самое правильное решение. Уж лучше тогда вложенную транзакцию сделать.
И самое главное. В ваших примерах никак не используются отличительные возможности DrawJig в сравнении с EntityJig. Вы не добавляете собственной графики, вам не надо обрабатывать несколько объектов. Так зачем же тогда его использовать? Это забивание гвоздей ну не микроскопом, конечно, но здоровенным таким кузнечным молотом :)
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Владимир Шу от 31-08-2016, 17:36:21
Спасибо за замечания.
Так зачем же тогда его использовать?
Фактор обучения. С EntityJig работал и разбирался, было интересно. С DrawJig, до этой темы не сталкивался, пока интересно. Буду ли применять в работе, вероятно буду, там где это уместно.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 31-08-2016, 18:24:56
Отправил в ADN DevHelp вопрос по поводу динамических размеров и DrawJig. И видео записал с твоим блоком:




По результатам доложусь.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Максим Маркевич от 31-08-2016, 18:50:57
При каждом изменении создается новый объект в памяти, наделяется нужными свойствами, отображается и уничтожается. Я почему и спросил про атрибуты - попробуйте блок с атрибутами прогнать через такой Jig и удивитесь. Потому что для BlockReference создать атрибуты можно только тогда, когда он добавлен в базу данных. А тут объект создается в памяти только.
Посмотри, пожалуйста, видео из ответа #49. Или я что-то не так понимаю, или с атрибутами в DrawJig никаких проблем!
Здесь при каждом изменении переоткрывается объект на запись.
И что? Что в этом страшного? Поясните, если не сложно.
И самое главное. В ваших примерах никак не используются отличительные возможности DrawJig в сравнении с EntityJig.
Что значит, обрабатывать несколько объектов? Когда это может быть надо? Можно доходчивый пример?
В ваших примерах никак не используются отличительные возможности DrawJig в сравнении с EntityJig. Вы не добавляете собственной графики, вам не надо обрабатывать несколько объектов. Так зачем же тогда его использовать? Это забивание гвоздей ну не микроскопом, конечно, но здоровенным таким кузнечным молотом
Самое страшное - это отсутствие возможности. Вот я использую DrawJig и, если вдруг захочу, то добавлю линии построения или любую другую графику, а вот человек, который использует EntityJig, не сможет (отсутствие возможности)  ;)
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Дмитрий Загорулькин от 31-08-2016, 19:20:17
Посмотри, пожалуйста, видео из ответа #49
Я же привел в сообщении код, который не сможет обрабатывать атрибуты блока. В видео явно по-другому сделано.
с атрибутами в DrawJig никаких проблем!
Проблем нет, но нужен другой подход.
Как я себе представляю, EntityJig - это упрощенный по сравнению с DrawJig инструмент для визуализации действий с одним объектом. Можно и DrawJig использовать, но телодвижений больше и код сложнее. Следовательно, выше шанс ошибку допустить.
И что? Что в этом страшного? Поясните, если не сложно.
Ну, как минимум, производительность падает.
Что значит, обрабатывать несколько объектов? Когда это может быть надо? Можно доходчивый пример?
Гуглится без проблем, например:
http://cupocadnet.blogspot.ru/2009/03/jigging-multiple-entities-with-drawjig.html
http://spiderinnet1.typepad.com/blog/2012/06/autocad-net-use-drawjig-to-dynamically-move-rotate-and-scale-multiple-entities-of-any-kinds.html
Самое страшное - это отсутствие возможности. Вот я использую DrawJig и, если вдруг захочу, то добавлю линии построения или любую другую графику, а вот человек, который использует EntityJig, не сможет (отсутствие возможности) 
Ну, дело хозяйское. Гвозди кувалдой тоже можно забивать, но мне удобнее молотком ;)
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Максим Маркевич от 31-08-2016, 20:21:35
Я же привел в сообщении код, который не сможет обрабатывать атрибуты блока. В видео явно по-другому сделано.
Ну так ты привел код, в котором не обработал атрибуты в WorldDraw, откуда они там появятся? Их необходимо обрабатывать именно в WorldDraw, применительно к объекту, который создается в памяти.
Просто, когда я разбирался, у меня лучше получалось с DrawJig (я быстрее понял технологию). Как по мне, она очевидней.
Я понимаю, что не имею опыта совсем, и что есть доля правды в твоих словах.
Скоро буду писать много кода насчет вставки Jigованных блоков. Обязательно попробую и EntityJig. Все взвешу и сравню.
Ну, как минимум, производительность падает.
Я считаю, что если не видно разницы в производительности невооруженным глазом, то ее и вовсе нет. )) Или просто я не делал ничего сложного!
Гуглится без проблем, например:
Да умею немножко гуглить. Я пишу на c# для своих инженерных целей (думал о конкретной задаче). Хотя вторая ссылка очень прикольная, я побаловался вдоволь.
Ну, дело хозяйское. Гвозди кувалдой тоже можно забивать, но мне удобнее молотком
Я за многофункциональную кувалду.  ;)
Дмитрий Загорулькин, вообще, спасибо, что заставил задуматься, обязательно все попробую и взвешу!
По результатам доложусь.
Присоединяюсь к ожидающим, попробовал код от Boxa.Shu, было бы здорово, если бы работало.
P.S. Извиняюсь за некоторый offtopic. Что-то в моем кругу друзей и родственников все сложнее объяснить, чем же я занимаюсь по жизни :D, а тут, на форуме, все братцы! :)
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 31-08-2016, 23:33:17
Присоединяюсь к ожидающим, попробовал код от Boxa.Shu, было бы здорово, если бы работало.
В ObjectARX точно работает, а в чем тут "засада" понять не могу. Если уж динамические размеры воспринимаются, то почему не обрабатываются - ума не приложу. И что интересно нигде на просторах интернет не вижу упоминания использования этих методов в .NET
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Дима_ от 01-09-2016, 09:28:03
В ObjectARX точно работает
Попойзже посмотрю код (на линейку надо детей вести), посмотрел у себя - в Net DrawJig-OnDimensionValueChanged точно работает.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Владимир Шу от 01-09-2016, 09:48:07
Дмитрий Загорулькин все правильно пишет, с кодом и памятью нужно быть аккуратнее и не мусорить. Я со многими его замечаниями согласен, но в данном случае, для меня, это обучающий момент, использовать этот код в продакшине я не собираюсь (Огромное количество копи-паста, как минимум говорит о том что код плохой, а уж про утечки и прочее можно и не вспоминать)

Если потребуется сделать красиво, то я буду знать и понимать как, и у меня будет выбор из инструментов...

 
Попойзже посмотрю код (на линейку надо детей вести), посмотрел у себя - в Net DrawJig-OnDimensionValueChanged точно работает.
Было бы здорово.

Александр Ривилис, спасибо. Подожду результатов. Пока может на UCS переключусь...
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Максим Маркевич от 01-09-2016, 10:11:09
Дмитрий Загорулькин все правильно пишет, с кодом и памятью нужно быть аккуратнее и не мусорить. Я со многими его замечаниями согласен, но в данном случае, для меня, это обучающий момент, использовать этот код в продакшине я не собираюсь (Огромное количество копи-паста, как минимум говорит о том что код плохой, а уж про утечки и прочее можно и не вспоминать)
Я понимаю это. Я знаю, кто такой Загорулькин (учусь по его урокам, очень круто он все понимает, бесконечно ему признателен). Но просто хотелось бы более конкретно понимать вещи типа "Здесь при каждом изменении переоткрывается объект на запись.". Ну, по мне, пусть он хоть миллион раз переоткрывается. Я хочу понимать такие вещи в цифрах или на примерах. Ну а как еще учиться, если не спрашивать и не просить пояснить?
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Дима_ от 01-09-2016, 10:52:49
На всякий случай еще раз - нужно вставить дин. блок и установить параметр через "динамический" размер?
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Владимир Шу от 01-09-2016, 11:04:18
На всякий случай еще раз - нужно вставить дин. блок и установить параметр через "динамический" размер?
угу, все так.

Александр Ривилис, не подскажите...
Off-Topic: показать
как включить отладку при Jig, как у вас на видео в 60 сообщении, потому что у меня, при установке точки остановки в методе GetDynamicDimensionData,
получаю вот такую картинку: (https://i.gyazo.com/199bf6ce2ed5bb8ace4cb5519bb8bded.png) и дальше наощуп...
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 01-09-2016, 11:59:24
Boxa.Shu
Нужно играться с опциями отладчика. С какими именно точно не подскажу.
На всякий случай еще раз - нужно вставить дин. блок и установить параметр через "динамический" размер?
Тут ключевые слова "через "динамический" размер", а динамический ли это блок или что-то другое (например, длина стороны квадрата) - это в данном случае непринципиально. Ну и принципиально то, что это должен быть DrawJig, а не EntityJig - для него проблем нет.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 01-09-2016, 12:20:15
Boxa.Shu
Стоп. Ты отлаживаешь в AutoCAD 2014, а я в 2016. В 2014 нужно выключить режим FIBERWORLD (NEXTFIBERWORLD в 0 и перезапустить AutoCAD): http://adn-cis.org/tochki-ostanova-v-polzovatelskoj-forme-ne-obrabatyivayutsya-pri-otladke.html
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Владимир Шу от 01-09-2016, 12:34:45
Стоп. Ты отлаживаешь в AutoCAD 2014, а я в 2016. В 2014 нужно выключить режим FIBERWORLD (NEXTFIBERWORLD в 0 и перезапустить AutoCAD): http://adn-cis.org/tochki-ostanova-v-polzovatelskoj-forme-ne-obrabatyivayutsya-pri-otladke.html
ОНО! Правда править пришлось в реестре, но заработало. Блин, как у Вас это получается!?
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 01-09-2016, 12:47:16
Правда править пришлось в реестре, но заработало.
Зачем в реестре? У тебя еще и какой-то хитрый AutoCAD, которому нельзя в командной строке задать NEXTFIBERWORLD значение 0, или он потом не перезапускается? ;)

Блин, как у Вас это получается!?
Угадывать из-за чего у тебя не работает? ;) Это называется "Интуиция". :D
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Дима_ от 01-09-2016, 13:06:07
Вот рабочий пример:
Код - F# [Выбрать]
  1. module AcadLib
  2. open System
  3. open Autodesk.AutoCAD.ApplicationServices
  4. open Autodesk.AutoCAD.Runtime
  5. open Autodesk.AutoCAD.DatabaseServices
  6. open Autodesk.AutoCAD.Geometry
  7. open Autodesk.AutoCAD.EditorInput
  8.  
  9. let Init()=
  10.   let doc=Application.DocumentManager.MdiActiveDocument
  11.   doc,doc.Editor,doc.Database,doc.TransactionManager.StartTransaction
  12.  
  13. let inline (|PromptOk|_|) (pr:^a)=
  14.   let st=(^a:(member Status:PromptStatus)pr)
  15.   (st=PromptStatus.OK||st=PromptStatus.Other)|>function
  16.        |true->Some(pr)
  17.        |false->None
  18.  
  19. type JigBlock(ent:BlockReference)=
  20.   inherit DrawJig()
  21.   let pt=ent.Position
  22.   let prop=seq{for p in ent.DynamicBlockReferencePropertyCollection->p}
  23.                   |>Seq.find (fun p->p.PropertyName="Длинна")
  24.   let len= ref (prop.Value:?>float)
  25.   let dt=let dt=new DynamicDimensionDataCollection()
  26.          let pt2=new Point3d(pt.X+ !len,pt.Y,pt.Z)
  27.          use dm1=new AlignedDimension(XLine1Point= pt,XLine2Point=pt2,DimLinePoint= pt)
  28.          dt.Add(new DynamicDimensionData(dm1))|>ignore
  29.          dt                
  30.   override jg.GetDynamicDimensionData(scale)=
  31.     dt
  32.   override jg.OnDimensionValueChanged(ev)=
  33.     len:= Math.Abs(ev.Value)
  34.     prop.Value<- !len
  35.   override jg.WorldDraw(wd)=
  36.    prop.Value<- Math.Abs(!len)
  37.    ent.WorldDraw(wd)
  38.   override jg.Sampler(jp)=
  39.    len:=jp.AcquirePoint("\nПоложение: ").Value.X-pt.X
  40.    use dm1=dt.[0].Dimension:?>AlignedDimension
  41.    dm1.XLine2Point<- new Point3d(pt.X+ !len,pt.Y,pt.Z)
  42.    dm1.DimensionText<- !len|>string
  43.    dm1.DimLinePoint<- pt
  44.    SamplerStatus.OK
  45.      
  46. [<CommandMethod "TestJig">]
  47. let TestJig()=
  48.   let doc,ed,db,trf=Init()
  49.   ed.GetEntity("Выберите блок ")|>function
  50.     |PromptOk(ent)->use tr=trf()
  51.                     let jig=new JigBlock(ent.ObjectId.GetObject(OpenMode.ForWrite):?>BlockReference)
  52.                     ed.Drag(jig)|>ignore
  53.                     tr.Commit()
  54.     |_->()

Я не знаю почему судя по отладчику не вызывалось событие, но ошибка там как минимум, что меняется только переменная pt2, но не меняется свойство блока, а когда доходит очередь до него, то pt2 уже снова помененно "по курсору".
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Владимир Шу от 01-09-2016, 14:33:06
что меняется только переменная pt2, но не меняется свойство блока, а когда доходит очередь до него, то pt2 уже снова помененно "по курсору".
Я так понял принцип работы, что нужно отловить изменение, поменять свойство блока, и завершить работу... т.е. внутри события менять св-ва блока и завершать jig... а потому, что там вне события не совсем важно...

А на C# нету кода, для сирых и убогих =о)) , а то я F# ну очень сложно понимаю...
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Дима_ от 01-09-2016, 14:43:27
Завершать ничего не нужно.
C# это для настоящих профи, которые могут одновременно и о программе думать и как с языком  бороться, меня только на первое хватает.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Владимир Шу от 01-09-2016, 14:49:22
Дима_,  Спасибо тебе добрый человек!!!
Разобрался как эта фигня работает, ща попробую починить...

Работает!!!
В смысле реактор не работает, а вот длинна назначается. Дима_, еще раз спасибо!

Решение: Выделить обновление блока в отдельный метод, который дергать из WorldDraw и по завершению ввод, вызвать обновление блока перед ретурном в методе DragMe.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 01-09-2016, 17:34:52
Или вообще в WorldDraw не изменять блок. По правилам в этом методе должна быть только отрисовка и никакой модификации.
Как-то так:
Извините, вам запрещён просмотр содержимого спойлеров.



Но вообще-то это не то, чего следовало ожидать. Интересно посмотреть что будет при двух динамических размерах - в ObjectARX это возможно.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Владимир Шу от 01-09-2016, 17:42:50
Но вообще-то это не то, чего следовало ожидать. Интересно посмотреть что будет при двух динамических размерах - в ObjectARX это возможно.
Я не пробовал, но без реактора думаю будет сложновато, в реакторе то номер размера выдается...
а вот эта строчка что значит dddCollection[0].ApplicationData = 1;?

Вот мой код этого класса:
Извините, вам запрещён просмотр содержимого спойлеров.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Дима_ от 01-09-2016, 18:02:41
Интересно посмотреть что будет при двух динамических размерах - в ObjectARX это возможно.
У меня в "исходной" программе у "Net-кустома" три дин. размера от одной точки (размеры до двух соседних "стоек" и сколько отодвинул от начальной точки) - работают себе (но там я правда меняю его только в "конце") - все работают, "табом" переключаются, вводятся значения и пр.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 01-09-2016, 18:13:00
У меня в "исходной" программе у "Net-кустома" три дин. размера от одной точки (размеры до двух соседних "стоек" и сколько отодвинул от начальной точки) - работают себе (но там я правда меняю его только в "конце") - все работают, "табом" переключаются, вводятся значения и пр.
Как ты определяешь какой динамический размер к чему относится если OnDimensionValueChanged не вызывается? Или всё-таки если размеров > 1, то он вызвается?
а вот эта строчка что значит dddCollection[0].ApplicationData = 1;?
Каждому из динамических размеров можно добавить свои данные. Это может быть что угодно. В том числе и номер размера.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 01-09-2016, 18:14:57
Дима_
Стоп. Это же ты показываешь GripOverrule, если я правильно понял. У них там всё несколько иначе.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Дима_ от 01-09-2016, 18:16:03
Я думаю он вызывается - просто отладчик врет.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Дима_ от 01-09-2016, 18:18:52
Это же ты показываешь GripOverrule
... который (и не только он) вызывает единый для всех DrawJig
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 01-09-2016, 18:23:14
Я думаю он вызывается - просто отладчик врет.
Нет. Дело даже не в отладчике. В таком контексте он не вызывается и ничего не делает. Проверил с двумя динамическими размерами - этот метод тоже не вызывается.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Дима_ от 01-09-2016, 18:29:14
Я добавил в OnDimensionValueChanged в выложенном коде
Код - F# [Выбрать]
  1. System.Windows.Forms.MessageBox.Show("Я работаю")|>ignore
и увидел соотв. сообщение когда ввел значение - то есть работает он.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 01-09-2016, 18:33:24
Я добавил в OnDimensionValueChanged в выложенном коде
Код - F# [Выбрать]
  1. System.Windows.Forms.MessageBox.Show("Я работаю")|>ignore
и увидел соотв. сообщение когда ввел значение - то есть работает он.
У меня нет, если добавить в код Boxa.Shu. Ты используешь AcquirePoint, в коде у Boxa.Shu - AcquireDistance. Возможно проблема в этом... Очень возможно... Ведь в GripOverrule используется именно указание точки, а не расстояние.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Дима_ от 01-09-2016, 18:45:56
AcquireDistance. Возможно проблема в этом...
Видимо да...
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 01-09-2016, 18:57:54
AcquireDistance. Возможно проблема в этом...
Видимо да...
А если запрашивается расстояние, то совершенно логично, что размер может быть только один. Мне вот интересно, как Autodesk'овцы выкрутятся с этим вопросом. :)
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Дима_ от 01-09-2016, 19:16:22
Вспомнил, я же тоже натыкался на эту "дистанцию", но там не работало что-то другое, потому и поставил везде единный класс с запросом точек.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 01-09-2016, 23:09:47
Я сделал тестовый пример с двумя динамическими размерами. Может быть будет интересно.

Код - C# [Выбрать]
  1. using System;
  2. using Autodesk.AutoCAD.Runtime;
  3. using Autodesk.AutoCAD.ApplicationServices;
  4. using Autodesk.AutoCAD.DatabaseServices;
  5. using Autodesk.AutoCAD.Geometry;
  6. using Autodesk.AutoCAD.EditorInput;
  7.  
  8. #pragma warning disable 0618
  9.  
  10. // This line is not mandatory, but improves loading performances
  11. [assembly: CommandClass(typeof(TestDrawJigWithDynDim.MyCommands))]
  12.  
  13. namespace TestDrawJigWithDynDim
  14. {
  15.   public class MyCommands
  16.   {
  17.     [CommandMethod("TestDrawJig")]
  18.     public void MyCommand() // This method can have any name
  19.     {
  20.       Document doc = Application.DocumentManager.MdiActiveDocument;
  21.       Database db = doc.Database;
  22.       if (doc == null) return;
  23.       Editor ed = doc.Editor;
  24.       Matrix3d mat = ed.CurrentUserCoordinateSystem;
  25.       PromptPointResult res = ed.GetPoint("\nУкажите базовую точку: ");
  26.       if (res.Status == PromptStatus.OK)
  27.       {
  28.         Point3d basePt = res.Value.TransformBy(mat);
  29.         DrawJigWithDynDim jig = new DrawJigWithDynDim(basePt, 500, 500);
  30.         if (jig.DragMe() == PromptStatus.OK)
  31.         {
  32.           Point3dCollection pts = new Point3dCollection();
  33.           pts.Add(basePt);
  34.           pts.Add(basePt + new Vector3d(0,         jig.height, 0));
  35.           pts.Add(basePt + new Vector3d(jig.width, jig.height, 0));
  36.           pts.Add(basePt + new Vector3d(jig.width,      0,     0));
  37.           using (Polyline3d poly = new Polyline3d(Poly3dType.SimplePoly, pts, true))
  38.           {
  39.             using (BlockTableRecord btr = db.CurrentSpaceId.Open(OpenMode.ForWrite) as BlockTableRecord)
  40.             {
  41.               btr.AppendEntity(poly);
  42.             }
  43.           }
  44.         }
  45.       }
  46.     }
  47.   }
  48.  
  49.   public class DrawJigWithDynDim: DrawJig
  50.   {
  51.     private DynamicDimensionDataCollection dimCol = new DynamicDimensionDataCollection();
  52.     private Point3d basePt, prevPt;
  53.     public double width  = 100, height  = 100;
  54.     private double minWidth = 100, minHeight = 100;
  55.     private bool bFixWidth  = false;
  56.     private bool bFixHeight = false;
  57.     public DrawJigWithDynDim(Point3d pt, double w, double h)
  58.     {
  59.       basePt = prevPt = pt; width = w; height = h;
  60.     }
  61.     public PromptStatus DragMe()
  62.     {
  63.       Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  64.       Database db = Application.DocumentManager.MdiActiveDocument.Database;
  65.       Point3d p1 = basePt;
  66.       Point3d p2 = basePt + new Vector3d(width, 0, 0);
  67.       Point3d p3 = basePt + new Vector3d(0, height, 0);
  68.       AlignedDimension dim1 = new AlignedDimension();
  69.       dim1.DynamicDimension = true;
  70.       AlignedDimension dim2 = new AlignedDimension();
  71.       dim2.DynamicDimension = true;
  72.       DynamicDimensionData ddim1 = new DynamicDimensionData(dim1, true, false);
  73.       ddim1.Editable = true; ddim1.Focal = true;
  74.       dimCol.Add(ddim1);
  75.       DynamicDimensionData ddim2 = new DynamicDimensionData(dim2, true, false);
  76.       ddim2.Editable = true; ddim2.Focal = true;
  77.       dimCol.Add(ddim2);
  78.       UpdateDimensions();
  79.       PromptResult res;
  80.       while ((res = ed.Drag(this)).Status == PromptStatus.Other);
  81.       return (res.Status == PromptStatus.None) ? PromptStatus.OK : res.Status;
  82.     }
  83.     protected override bool WorldDraw(Autodesk.AutoCAD.GraphicsInterface.WorldDraw draw)
  84.     {
  85.       Point3dCollection pts = new Point3dCollection();
  86.       pts.Add(basePt);
  87.       pts.Add(basePt + new Vector3d(0, height, 0));
  88.       pts.Add(basePt + new Vector3d(width, height, 0));
  89.       pts.Add(basePt + new Vector3d(width, 0, 0));
  90.       pts.Add(basePt);
  91.       return draw.Geometry.Polygon(pts);
  92.     }
  93.  
  94.     protected override DynamicDimensionDataCollection GetDynamicDimensionData(double dimScale)
  95.     {
  96.       return dimCol;
  97.     }
  98.  
  99.     protected override void OnDimensionValueChanged(DynamicDimensionChangedEventArgs e)
  100.     {
  101.       switch (e.Index)
  102.       {
  103.         case 0:
  104.           if (e.Value.ToString() != "0")
  105.           {
  106.             width = e.Value * Math.Sign(prevPt.X - basePt.X);
  107.             bFixWidth = true;
  108.           }
  109.           else
  110.           {
  111.             bFixWidth = false;
  112.           }
  113.  
  114.           break;
  115.         case 1:
  116.           if (e.Value.ToString() != "0")
  117.           {
  118.             height = e.Value * Math.Sign(prevPt.Y - basePt.Y);
  119.             bFixHeight = true;
  120.           }
  121.           else
  122.           {
  123.             bFixHeight = false;
  124.           }
  125.  
  126.           break;
  127.       }
  128.       UpdateDimensions();
  129.     }
  130.  
  131.     protected override SamplerStatus Sampler(JigPrompts prompts)
  132.     {
  133.       JigPromptPointOptions jigOpts = new JigPromptPointOptions();
  134.       jigOpts.UserInputControls =
  135.         ( UserInputControls.Accept3dCoordinates | UserInputControls.NullResponseAccepted);
  136.       jigOpts.BasePoint = basePt;
  137.       jigOpts.UseBasePoint = true;
  138.       jigOpts.Cursor = CursorType.RubberBand;
  139.  
  140.       jigOpts.Message = "\nУкажите диагональную точку: ";
  141.       PromptPointResult dres = prompts.AcquirePoint(jigOpts);
  142.       if (dres.Status != PromptStatus.OK && dres.Status != PromptStatus.Other)
  143.         return SamplerStatus.Cancel;
  144.       if (dres.Status == PromptStatus.OK)
  145.       {
  146.         Point3d curPt = dres.Value;
  147.         if (curPt.DistanceTo(prevPt) < 1e-3)
  148.           return SamplerStatus.NoChange;
  149.         prevPt = curPt;
  150.         if (!bFixWidth)
  151.           width = Math.Max(Math.Abs(curPt.X - basePt.X), minWidth) * Math.Sign(curPt.X - basePt.X);
  152.         if (!bFixHeight)
  153.           height = Math.Max(Math.Abs(curPt.Y - basePt.Y), minHeight) * Math.Sign(curPt.Y - basePt.Y);
  154.       }
  155.       UpdateDimensions();
  156.       return SamplerStatus.OK;
  157.     }
  158.  
  159.     protected void UpdateDimensions()
  160.     {
  161.       Point3d p1 = basePt;
  162.       Point3d p2 = basePt + new Vector3d(width, 0, 0);
  163.       Point3d p3 = basePt + new Vector3d(0, height, 0);
  164.       Point3d p4 = basePt + new Vector3d(width, height, 0);
  165.       AlignedDimension dim;
  166.       dim = dimCol[0].Dimension as AlignedDimension;
  167.       dim.XLine1Point = p1;
  168.       dim.XLine2Point = p2;
  169.       dim.DimLinePoint = p1 + (p2 - p1) * 0.5 -
  170.         new Vector3d(0, minHeight, 0) * Math.Sign(p4.Y - p1.Y);
  171.       dim = dimCol[1].Dimension as AlignedDimension;
  172.       dim.XLine1Point = p1;
  173.       dim.XLine2Point = p3;
  174.       dim.DimLinePoint = p1 + (p3 - p1) * 0.5 -
  175.         new Vector3d(minWidth, 0, 0) * Math.Sign(p4.X - p1.X);
  176.     }
  177.   }
  178. }

И вот так это выглядит:



Хочу обратить внимание на несколько моментов:
1. Editor.Drag(...) приходится зацикливать, так как переход от одного к другому размеру возвращает PromptStatus.Other.
2. Чтобы можно было выйти из цикла по Enter приходится добавлять флаг UserInputControls.NullResponseAccepted к jigOpts.UserInputControls
3. После задания одного из размеров он фиксируется. Чтобы снять фиксацию нужно ввести в поле размера 0.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 02-09-2016, 14:35:08
К сожалению (как обычно) в AutoCAD .NET API есть ограничения по сравнению с чистым ObjectARX. Одно из них невозможность задавать дополнительные параметры DynamicDimensionData, которые есть у его "native родителя" - AcDbDimData. В частности у AcDbDimData есть метод setConstrain, который позволяет установить значок блокировки для размера, который явно указывает, что этот размер остаётся неизменным:

(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fimg-fotki.yandex.ru%2Fget%2F62935%2F7842324.7%2F0_13522a_1dabc9a3_orig.png&hash=42e5d7a523f2b95edfd04f0feb299539)

Или возможность назначить свою функцию-обработчик для обработки ввода данных в поле размера...
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Владимир Шу от 02-09-2016, 17:14:37
Это был ответ от ADN? А с какой целью так сделано не пояснили?
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 02-09-2016, 17:38:33
Это был ответ от ADN? А с какой целью так сделано не пояснили?
Это мой ответ. От ADN пока ничего.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 02-09-2016, 18:06:59
А с какой целью так сделано не пояснили?
А это ты про что? Я не понял.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Владимир Шу от 02-09-2016, 18:16:05
Я так понимаю, что NET API это обёртка над ObjectARX, причем активно продвигаемая в массы. Вот и не понятно зачем кастрировать эту обёртку, дать сам метод OnDimensionValueChanged и не давать с ним работать, в чем смысл?
Может вообще пользоваться динамическими размерами в DrawJig ( net api) не надо (не рекомендуется). Я без претензий, просто буду знать, что если захочется динимических размеров, то пользуйся EntityJig. Если без них и много объектов, то DrawJig.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 02-09-2016, 18:36:54
Вот и не понятно зачем кастрировать эту обёртку
Умышленно никто ничего не кастрировал. Просто для полноценной реализации этой обертки потребовались еще значительные усилия (время и деньги) - эта обертка не делается автоматически. Видимо решили, что на это не стоит тратить силы...
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 02-09-2016, 18:39:01
Я без претензий, просто буду знать, что если захочется динимических размеров, то пользуйся EntityJig.
Ты что пропустил всё мое общение с Димой и вот этот пример: http://adn-cis.org/forum/index.php?topic=7251.msg22179#msg22179 ???
Так и для кого я старался???
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Владимир Шу от 05-09-2016, 06:48:13
Видимо решили, что на это не стоит тратить силы.
Понятно, спасибо за разъяснения и за код (http://adn-cis.org/forum/index.php?topic=7251.msg22179#msg22179) сходу не понял в чем различия, а скомпилировав... событие работает, буду разбираться. Соответственно вопросов про применимость больше не возникает. Буду учиться.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 05-09-2016, 09:36:33
сходу не понял в чем различия
Различие в том, что используется AcquirePoint, а не AcquireDistance.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 09-09-2016, 12:17:49
Различие в том, что используется AcquirePoint, а не AcquireDistance.
В ADN DevHelp решили, что это неправильное поведение (т.е. вроде должно работать с обеими методами) и отправили запрос в DevTeam.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Максим Маркевич от 15-10-2016, 14:51:22
Александр Ривилис, только сейчас очень плотно засел за динамические размеры (интересует 2 и более).
Возник вопрос насчет Вашего кода:
Я сделал тестовый пример с двумя динамическими размерами. Может быть будет интересно.
Все-таки OnDimensionValueChanged же не срабатывает! Именно для этих целей и был прописан UpdateDimensions? Если да, то почему тогда оставили OnDimensionValueChanged, он ведь реально не делает ничего.. :(
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 15-10-2016, 14:56:32
Все-таки OnDimensionValueChanged же не срабатывает!
Как же не срабатывает, когда он срабатывает. Иначе фиксация размеров не происходила бы...
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Максим Маркевич от 15-10-2016, 15:05:16
Как же не срабатывает, когда он срабатывает.
Извините, что-то я тупанул. Он срабатывает каждый раз после ввода значения динамического размера.
А не могли бы Вы пояснить физический смысл UpdateDimensions?
И еще, я не могу понять, как задавать динамический угол, используя AlignedDimension?
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 15-10-2016, 15:13:31
А не могли бы Вы пояснить физический смысл UpdateDimensions?
При изменении положения/размеров объекта необходимо изменить положение и значение динамического размера. Эта функция приводит динамические размеры в соотвествие.
И еще, я не могу понять, как задавать динамический угол, используя AlignedDimension?
Это когда я смогу добраться до PC. Только вроде тип размера ты выбрал не правильно. Он угол не измеряет.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Максим Маркевич от 15-10-2016, 15:21:41
Это когда я смогу добраться до PC. Только вроде тип размера ты выбрал не правильно. Он угол не измеряет.
Ааа, я что-то прикинул, что этот всемогущий размер _dim, относится к одному классу, а нет.
Теперь понял.
(https://s18.postimg.org/fi1f8o2ad/Screen_Shot.jpg) (https://postimg.org/image/fi1f8o2ad/)
При изменении положения/размеров объекта необходимо изменить положение и значение динамического размера. Эта функция приводит динамические размеры в соотвествие.
Я просто сделал несколько иначе, в WorldDraw запихнул, и вот думаю, ерунды наделал и случайно работает или и так сойдет. :D
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 15-10-2016, 15:26:30
Я просто сделал несколько иначе, в WorldDraw запихнул, и вот думаю, ерунды наделал и случайно работает или и так сойдет.
Исправляй.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Максим Маркевич от 15-10-2016, 23:09:45
Нужна помощь, братцы. :( Чувствую, что проблемка рядом, но что-то не могу найти ее. Блок с динамическими размерами (длина и угол) - хочу чтобы все хорошо работало :)
Суть проблемы в скринкасте:

Извините, вам запрещён просмотр содержимого спойлеров.

Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 15-10-2016, 23:28:47
Сравни реализацию своего DragMe и моего. Обрати внимание, что мой зациклен.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Максим Маркевич от 16-10-2016, 00:14:35
Сравни реализацию своего DragMe и моего. Обрати внимание, что мой зациклен.
А я и не знал, что те две строчки могут означать зацикленность, точнее не подумал о них.
У Вас используется
Код - C# [Выбрать]
  1. public PromptStatus DragMe()
а у меня использовался
Код - C# [Выбрать]
  1. public PromptResult DragMe(ObjectId blockId, out Point3d pt)
потому что я так четче вижу работу с блоком, хотя что я вижу :)
В общем, спасибо за совет.
Сейчас делаю под Ваш манер. Отпишусь о результатах.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 16-10-2016, 00:16:42
А я и не знал, что те две строчки могут означать зацикленность, точнее не подумал о них.
while как-бы подразумевает цикл...
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Максим Маркевич от 16-10-2016, 01:03:27
while как-бы подразумевает цикл...
Это понятно, но в целом, в тех строках много непонятного. Косяк по невнимательности, в общем:
Код - C# [Выбрать]
  1. public PromptStatus DragMe()
Я задумался, почему во всех примерах, по которым я работал до этого использовался:
Код - C# [Выбрать]
  1. public PromptResult DragMe()
По крайней мере, из PromptResult я могу точку достать, поэтому я и подумал - оставлю как есть. Теперь понял, что слона то и не заметил.
Но вот сделал по аналогии с Вашим примером - теперь стало все слишком зацикленно :

Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 16-10-2016, 01:15:36
Что-то ты еще в моём примере не досмотрел. Утро вечера мудренее - завтра найдёшь.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Максим Маркевич от 16-10-2016, 18:43:44
Утро вечера мудренее - завтра найдёшь.
Спасибо, конечно, за напутствия, но вышло, что вечер вечера мудренее :)
Напишу немного о том, что я понял за эти выходные. Мало ли, кто-то еще решит разбираться с подобными делами (в общем, это гайд для неопытных типа меня):
1. Нужно иметь пример от Александра Ривилиса (http://adn-cis.org/forum/index.php?topic=7251.msg22179#msg22179).
2. Нужно четко понимать, что такое DragMe, SamplerStatus, WorldDraw и OnDimensionValueChanged, а также как и в какой последовательности реализована их работа в классе, унаследованном от DrawJig.
3. Обязательно вспомнить геометрию и понимать (в зависимости от целей), как работают методы типа DistanceTo, GetVectorTo, GetAngleTo (тут лучше сразу создать отдельный метод и поэкспериметировать).
4. Для динамических размеров, в зависимости от того, какие нужны, важно понимать их классы (их можно посмотреть, используя любую утилиту (http://adn-cis.org/forum/index.php?topic=7274.msg21888#msg21888)) типа LineAngularDimension2 или AlignedDimension, затем важно открыть arxmgd.chm и посмотреть их свойства.
5. Важно понимать, что такое CurrentUserCoordinateSystem и для чего нужна. Вроде как все просто, но тем не менее..
В итоге, вот как вышло решить задачу из поста (http://adn-cis.org/forum/index.php?topic=7251.msg22988#msg22988):

А можно было не заморачиваться и просто использовать динамический ввод:

Мне кажется, что это даже лучше выглядит :), тем не менее, разбираться было очень интересно.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Максим Маркевич от 17-10-2016, 23:57:02
Ребзя, произошла очень странная ситуация.
Я разобрался с динамическими размерами, все работало и было круто (http://adn-cis.org/forum/index.php?topic=7251.msg23003#msg23003).
Потом вечером я доставил на свой 2017x64 AutoCAD английский пакет (https://knowledge.autodesk.com/support/autocad/downloads/caas/downloads/content/autocad-2017-language-packs.html) (иногда проще с позиций программирования смотреть некоторые вещи), соответственно, на компе стало два 2017 автокада (английский и русский).
И мой код с динамическими размерами перестал работать в русском, при это исправно работает в английском (см. скринкаст). Я в недоумении. Как такое могло произойти? Может, кто-то сталкивался? Заранее, спасибо за помощь.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 18-10-2016, 01:37:02
Пойдём от обратного. Мой код в твоём AutoCAD 2017 с русской локализацией работает?
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Максим Маркевич от 18-10-2016, 18:16:17
Пойдём от обратного. Мой код в твоём AutoCAD 2017 с русской локализацией работает?
Точно, как я не додумался Ваш код проверить. Буду дома только к ночи, сразу отпишусь.
Сразу хочу отметить, что на работе, где нет английского пакета, все работает в том же AutoCAD2017x64 на той же системе.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 18-10-2016, 18:25:23
Честно говоря по твоему видео я не понял что происходит - слишком уж ты быстро на клавиши нажимаешь. :) Вроде переключение на другой размер происходит по нажатию любой клавиши или мне показалось?
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Максим Маркевич от 18-10-2016, 18:34:27
Честно говоря по твоему видео я не понял что происходит - слишком уж ты быстро на клавиши нажимаешь.
Я психованный записывал просто (после проведенных часов разборок с кодом, когда разобрался, я ощутил счастье, а потом.. установил пакет английский, и код перестал работать - расстроился очень я) :). А происходит то, что ничего не вводится в динамический размер. В смысле, окошко не реагирует на нажатие клавиш (цифр).
Вроде переключение на другой размер происходит по нажатию любой клавиши или мне показалось?
Показалось, переключение через Tab, переключение работает. )
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Максим Маркевич от 19-10-2016, 14:25:27
Александр Ривилис, Ваш код исправно работает в двух пакетах. Мой - только в русском.
Извините, вам запрещён просмотр содержимого спойлеров.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 20-10-2016, 04:29:52
Александр Ривилис, Ваш код исправно работает в двух пакетах. Мой - только в русском.
Так я и догадывался. Доберусь до компа - проверю. Благо у меня установлены обе версии. Но сначала английская, потом сразу русская, а обновления уже потом устанавливались на обе версии.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: RevitTormentor от 01-10-2017, 20:20:16
Всё-таки не до конца понял. В чём отличие. Например Полилиния.
При DrawJig я работаю с PolyLine? И например поменять цвет линии нужно PolyLine.Color менять.
А EntityJig это я PolyLine привожу к Entity а потом у Entity меняю цвет?
Зачем вообще это разделение. Entity позднее появилось? В базе чертежа что хранится Полилиния или какой то Entity полилинии?
В 2018 версии и DrawJig и EntityJig - всё есть? Ничего не исчезнет?

В каких случаях чем пользоваться?
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Ривилис от 01-10-2017, 23:12:26
Всё-таки не до конца понял.
Вообще ничего ты не понял судя по тому, что пишешь дальше. Причем тут цвет к JIG?
Entity позднее появилось?
Позднее чего???
В 2018 версии и DrawJig и EntityJig - всё есть? Ничего не исчезнет?
Единственный вопрос на который я могу дать четкий ответ: "Всё есть. Ничего не исчезло".
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: RevitTormentor от 02-10-2017, 04:24:00
Буду разбираться
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: serega374 от 21-11-2018, 04:13:48
помогите разобраться с EntytyJig. За основу взят код из первого поста. В общем у меня модальное окно с DataGridView с кнопкой вставить. Я не могу понять правильно ли я запрограммировал EntytyJig, потому что не могу скрыть модальное окно и передать фокус в AutoCAD. Как это сделать?

Когда я вручную закрываю окно блок уже вставлен по координатам (0,0,0).
Привожу код кнопки, остальное класс для EntytyJig как в первом посте

Извините, вам запрещён просмотр содержимого спойлеров.
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Александр Пекшев aka Modis от 21-11-2018, 09:53:49
потому что не могу скрыть модальное окно и передать фокус в AutoCAD. Как это сделать?
Ну дык вы же и не скрываете окно-то! Где вызов метода Hide()?
Название: Re: В чем отличия EntytyJig от DrawJig?
Отправлено: Andant от 21-11-2018, 11:32:19
serega374,
EditorUserInteraction
https://adndevblog.typepad.com/autocad/2012/05/taking-mouse-inputs-from-a-modal-dialog-box.html