В чем отличия EntytyJig от DrawJig?

Автор Тема: В чем отличия EntytyJig от DrawJig?  (Прочитано 65475 раз)

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

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Всем привет. Я тут борозжу просторы необъятного Jig и вот не могу понять, чем же EntytyJig отличается от DrawJig? Заранее, извиняюсь за нелепости, которые могут стать следствием неполного понимания происходящего на просторах Jig.
Немного поясню, что навело меня на эту тему.
Вот две ссылки:
1. EntytyJig: 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
Извините, вам запрещён просмотр содержимого спойлеров.

Визуально, в работе в AutoCAD я не вижу никаких отличий! Укажите путь, братцы. :)
Пойдут любые пояснения "своими словами", так же буду признателен за ссылки на любую информацию, касающеюся вышеописанного.

Оффлайн bargool

  • ADN Club
  • ***
  • Сообщений: 111
  • Карма: 6
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #1 : 02-08-2016, 15:54:13 »
Первое, что приходит на ум, EntytyJig - для одного объекта, DrawJig - для множества

Отмечено как Решение Максим Маркевич 03-08-2016, 14:32:16

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #2 : 02-08-2016, 16:11:27 »
Если в двух словах, то DrawJig более мощное средство. EntityJig предназначено для визуального задания новому (еще не добавленному в чертеж) примитиву неких свойств и затем для добавления в базу. DrawJig прекрасно справляется и с этим и кроме того позволяет работать с множеством примитивов, которые могут не быть еще в чертеже, а могут и быть в нём, вообще без примитивов (просто в WorldDraw рисуешь что хочешь).
Короче говоря: для EntityJig требуется примитив, а для DrawJig - нет.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #3 : 02-08-2016, 17:56:53 »
просто в WorldDraw рисуешь что хочешь
Да ладно, как так? Вообще, что хочешь?
У меня не вышло так. :(
Может, есть какой примерчик для наглядности?

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #4 : 02-08-2016, 18:04:00 »
В методе WorldDraw из первого поста (DrawJig, строка 116), можно рисовать линии, окружности и пр. вызывая методы draw.Geometry.WorldLine, draw.Geometry.Circle и др.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #5 : 02-08-2016, 19:26:43 »
У меня не вышло так. :(
Пробовал?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #6 : 02-08-2016, 20:01:40 »
В методе WorldDraw из первого поста (DrawJig, строка 116), можно рисовать линии, окружности и пр. вызывая методы draw.Geometry.WorldLine, draw.Geometry.Circle и др.
Пробовал?
Дочертить линию или окружность получалось, но вот не вышло отслеживать точку. Возможно, я неправильно понимаю концепцию.

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

PS. И да простите меня Вы за недочеты и нелепости программного кода выше.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #7 : 03-08-2016, 01:00:02 »
Возможно, я неправильно понимаю концепцию.
Похоже что так. В методе WorldDraw происходит только отрисовка. Т.е. в этом методе ты (используя значение pp2) должен модифицировать вставку блока (изменить его динамический параметр или параметры, как ты делаешь в строках 52...74 твоего кода, корректность которых я не проверял) и вызывать для него метод draw.Geometry.Draw(). Не уверен, что это будет нормально работать для динамического блока, но можешь попробовать.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #8 : 03-08-2016, 14:30:08 »
В методе WorldDraw происходит только отрисовка. Т.е. в этом методе ты (используя значение pp2) должен модифицировать вставку блока (изменить его динамический параметр или параметры, как ты делаешь в строках 52...74 твоего кода, корректность которых я не проверял) и вызывать для него метод draw.Geometry.Draw(). Не уверен, что это будет нормально работать для динамического блока, но можешь попробовать.
Спасибо большое! Вроде как, работает нормально. По крайней мере ничего ненормального я не заметил.

Извиняюсь за некоторый отход от темы. Всем спасибо за ответы. Решил использовать только DrawJig, так как не вижу смысла использовать то (EntytyJig), у чего меньше возможностей (опять же, если я правильно все понял).

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #9 : 03-08-2016, 15:03:01 »
Выглядит нормально. Прятать исходную вставку блока-стрелки я бы не стал. Для определения угла поворота можно воспользоваться не AcquirePoint, а AcquireAngle, чтобы было больше похоже на то, как это делает AutoCAD при вставке блока.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #10 : 03-08-2016, 15:40:32 »
Прятать исходную вставку блока-стрелки я бы не стал.
Почему?
Для определения угла поворота можно воспользоваться не AcquirePoint, а AcquireAngle, чтобы было больше похоже на то, как это делает AutoCAD при вставке блока.
Спасибо. Обязательно попробую.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #11 : 03-08-2016, 18:19:20 »
Почему?
Мне так кажется. Это не имеет отношения к программированию. Просто я бы так сделал. Кстати, это бы позволило бы еще добавить и динамически размеры (длину и угол поворота). Впрочем это твоё дело.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #12 : 08-08-2016, 13:01:13 »
Добавляю подкорректированный, как я считаю, код, который позволяет манипулировать блоком, как в посте #8:
Извините, вам запрещён просмотр содержимого спойлеров.
Выглядит нормально. Прятать исходную вставку блока-стрелки я бы не стал
А у меня почему-то и не вышло ее спрятать.
Кстати, это бы позволило бы еще добавить и динамически размеры (длину и угол поворота
Увидеть бы подобное в действии, не очень понятно, каким образом..

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #13 : 08-08-2016, 13:36:01 »
Увидеть бы подобное в действии, не очень понятно, каким образом..
У меня своего примера нет. Посмотри вот этот: http://spiderinnet1.typepad.com/blog/2012/03/autocad-net-entityjig-dynamic-dimension-and-line-jig.html
А у меня почему-то и не вышло ее спрятать.
Ну и не надо.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #14 : 08-08-2016, 13:41:48 »
У меня своего примера нет. Посмотри вот этот: http://spiderinnet1.typepad.com/blog/2012/03/autocad-net-entityjig-dynamic-dimension-and-line-jig.html
Спасибо. Разберусь.
Ну и не надо.
Хотелось бы. ) Думаю, со временем пойму.
Просто в некоторых случаях (на определенных блоках) смотрится совсем не очень.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #15 : 08-08-2016, 13:44:00 »
Хотелось бы. ) Думаю, со временем пойму.
Просто в некоторых случаях (на определенных блоках) смотрится совсем не очень.
Ну если приведёшь код, то будет понятно в чем проблема. Скорее всего скрываешь не тот блок.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #16 : 08-08-2016, 13:46:32 »
Ну если приведёшь код, то будет понятно в чем проблема. Скорее всего скрываешь не тот блок.
Я уже привел (#12). :)
Добавляю подкорректированный, как я считаю, код, который позволяет манипулировать блоком, как в посте #8:
Спойлер

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #17 : 08-08-2016, 16:23:56 »
Я уже привел (#12). :)
И где же ты там прячешь блок? Я уже не говорю, что у тебя там есть куча странностей, типа ненужных  blockRef.Dispose();

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

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #18 : 08-08-2016, 16:35:29 »
И где же ты там прячешь блок?
Так я же и говорю, что ничего не вышло. :-\
Я уже не говорю, что у тебя там есть куча странностей, типа ненужных  blockRef.Dispose();
Работал с примером из поста #1 данной темы. Там был Dispose(), вот я и оставил. Полного понимания работы каждой строчки нет, отсюда и странности.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #19 : 08-08-2016, 16:51:02 »
Так я же и говорю, что ничего не вышло. :-\
Для то, чтобы скрыть вставленный в базу примитив необходимо использовать свойство Visible (устанавливать его в false).
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #20 : 08-08-2016, 17:35:14 »
Для то, чтобы скрыть вставленный в базу примитив необходимо использовать свойство Visible (устанавливать его в false).
Сделано. В первой транзакции после первого Jig (перед добавлением нового DBOObject) добавил false, а потом во втором Jig в WorldDraw добавил true и все так, как надо. Спасибо!

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #21 : 09-08-2016, 09:56:21 »
А есть ли способ заставить работать ОРТО режим при ввод в коде опубликованном в этом посте ?
Добавление 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.         }

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #22 : 09-08-2016, 10:08:10 »
А есть ли способ заставить работать ОРТО режим при ввод в коде опубликованном в этом посте ?
Добавление UserInputControls.GovernedByOrthoMode в  методе MyBlockJig2.Sampler() к нужному результату не приводят
Дело в том, что у меня построение происходит по 2м точкам, поэтому орто и не работает (как мне кажется). Вот если использовать совет Александра Ривилиса:
Для определения угла поворота можно воспользоваться не AcquirePoint, а AcquireAngle, чтобы было больше похоже на то, как это делает AutoCAD при вставке блока.
То, думаю, будет работать. Пока сам не пробовал, потому что все эти вопросы затевались для другого блока, а этот - просто что-то первое простое, что пришло в голову.
Я в дальнейшем возился с подобными блоками:



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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #23 : 09-08-2016, 11:03:47 »
Boxa.Shu
Насколько я помню орто возможно только тогда, когда задана базовая точка, т.е.
Код - C# [Выбрать]
  1. jigOpts.BasePoint = [базовая точка];
  2. jigOpts.UseBasePoint = true;
« Последнее редактирование: 09-08-2016, 11:42:09 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #24 : 09-08-2016, 12:23:08 »
Насколько я помню орто возможно только тогда, когда задана базовая точка, т.е.

Я видел эту и эту ссылки, код пробовал по  всякому, орто запустить не получилось, сообщения объявленное в 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();

ЗЫ.
Поправил ссылки. Недопоняли мы друг друга с движком форума и он лишний заголовок добавил. =(

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #25 : 09-08-2016, 12:33:23 »
Я видел эту и эту ссылки
Boxa.Shu, извини, что-то ссылки твои не открываются, не мог бы ты подкорректировать?
я сильно сомневаюсь что    evthisrel менял код метода MyBlockJig2.Sampler под новый блок и у него в видео из 22 сообщения видно, что сообщение не выводится
Да, ты прав. Сообщение не выводится. И я не разобрался, почему.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #26 : 09-08-2016, 12:33:47 »
Вставляй нормально ссылки. Или сам попробуй по ним перейти.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #27 : 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();

???
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #28 : 09-08-2016, 12:42:08 »
Откуда prompts.AcquirePoint() знать о существовании jigOpts
Так, разобрался. Перегрузки этого метода я и не посмотрел... все заработало. Спасибо.

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #29 : 09-08-2016, 12:50:08 »
А должно было выводится? Откуда prompts.AcquirePoint() знать о существовании jigOpts
Спасибо!
Насколько я помню орто возможно только тогда, когда задана базовая точка
Получается, нет, достаточно только того, что Boxa.Shu дописал (точнее, я не задавал базовую точку, а просто дописал опцию, и все работает с орто):
Код - C# [Выбрать]
  1. UserInputControls.GovernedByOrthoMode

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #30 : 29-08-2016, 18:00:55 »
Продолжу в этой теме, т.к. код здешний, только слегка модифицировал его...
Смысл такой:
1. Вставляю блок InsertJig () висит на курсоре и указывается базовая точка
2. Задаю начальные параметры DragJig2() поворот блока и длина
3. Задаю последующие параметры DragJigDist() задается ширина, должна быть перпендикулярна длине.

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



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

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

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

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

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #31 : 29-08-2016, 20:24:45 »
Подозреваю, что проблема в самом блоке.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #32 : 30-08-2016, 00:07:58 »
Подозреваю, что проблема в самом блоке.
С блоком, однозначно, все в порядке (он создан при помощи параметров и операций - там не может быть таких приколов).
Надо с кодом разбираться.. Я смогу только утром потестировать.

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #33 : 30-08-2016, 02:42:20 »
Boxa.Shu, проблема связана с некорректностью присвоения линейному параметру "дистанции". Скорей всего это баг(жду мыслей от Александра Ривилиса на этот счет).
Решение: использовать полярный параметр вместо линейного в блоке, не видоизменяя код!
Свои размышления о том, как была выявлена проблема представляю в виде видео, так как это очень сложно описать словами :)


Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #34 : 30-08-2016, 08:08:32 »
Подозреваю, что проблема в самом блоке.
нет, он очень простой, там нечему ломаться.

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

Спасибо за помощь. Чувствовал, что загвоздка очевидная и простая, но нащупать самостоятельно не смог.

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #35 : 30-08-2016, 10:27:05 »
Александр Ривилис, Еще один уточняющий вопросик по коду в этой ветке.
Как при использовании DrawJig, при вводе точки или дистанции включить динамический ввод?

На всякий случай эту тему читал, но там про Keywords, про динамический ввод не нашел...
Код в этой ветке так же посмотрел, у Александра на видео динамический код работает, а отличий в коде не нашел...

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #36 : 30-08-2016, 10:51:49 »
Как при использовании DrawJig, при вводе точки или дистанции включить динамический ввод?
Наверное нужно вводить с базовой точкой.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #37 : 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.         }

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #38 : 30-08-2016, 10:59:21 »
Что ты подразумеваешь под динамическим вводом? Появление динамических размеров? Тогда программировать это нужно. Нужно добавлять динамические размеры, нужно обеспечить метод GetDynamicDimensionData. Посмотри этот пример:
http://spiderinnet1.typepad.com/blog/2012/03/autocad-net-entityjig-dynamic-dimension-and-line-jig.html
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #39 : 30-08-2016, 11:50:49 »
Кстати, в составе ObjectARX SDK есть пример samples\dotNet\EllipseJig, который использует динамические размеры.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #40 : 30-08-2016, 11:57:06 »
Спасибо, понял. Я думал, есть более простой путь... ну ничего освою и это. =о)

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #41 : 30-08-2016, 12:13:24 »
Максим Маркевич, спасибо за упоминание отрицательного значения! слона то я и не заметил.
Решение: блок менять не нужно, код менять не нужно (AcquireDistance вполне справляется) просто добавить условие в метод WorldDraw, что производить присвоение значения, только при положительном вводном.

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

Кстати, в составе ObjectARX SDK есть пример samples\dotNet\EllipseJig, который использует динамические размеры.
Вот за это спасибо. Очень ценный пример.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #42 : 30-08-2016, 12:18:02 »
Кстати, я пробовал в твоем коде просто втупую добавить модуль в присвоении значения динамическому параметру, но мне не помогло.
Проблема кажется не только в отрицательных, но и в нулевых значениях.
Спасибо, понял. Я думал, есть более простой путь...
А как ты себе представлял более простой путь? Как программа сама догадается сколько и каких размеров ты хотел бы добавить и как они связаны с тем что у тебя рисуется в этот момент времени? Кстати, аналогичный способ используется и в Custom Entity (и в Overrule) для работы с "ручками".
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #43 : 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.         }

А как ты себе представлял более простой путь?
В процессе вытягивания, при включенном орто режиме, возле курсора появляется окошко со значением, вот и думал можно ли как то до него достучаться и передать значение... видимо нельзя и нужно делать самому.

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #44 : 30-08-2016, 12:57:01 »
Проблема кажется не только в отрицательных, но и в нулевых значениях.
Поэтому я люблю полярные параметры, чаще всего, они удобней в обращении в автокаде, и так уж сложилось, что менее требовательны к коду, который ими манипулирует.
Плюс, в случае блока от Boxи.Shu можно было бы заменить операцию угла и растяжения одним полярным параметром, но это уже совсем другая история и offtopic.
В процессе вытягивания, при включенном орто режиме, возле курсора появляется окошко со значением, вот и думал можно ли как то до него достучаться и передать значение... видимо нельзя и нужно делать самому.
Я примерно также это все представлял(до сегодняшнего дня), пока не посмотрел samples\dotNet\EllipseJig. :)

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #45 : 30-08-2016, 17:25:59 »
Худо, бедно, разобрался и вроде даже работает...


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

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

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

Архив с проектом во вложении, изменял только класс MyBlockJigDist

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #46 : 31-08-2016, 00:12:58 »
Тут и подсказывать нечего. Разберись для начала где у тебя должны быть базовые точки размера. То что я вижу - это полная ерунда:



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




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

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #47 : 31-08-2016, 05:30:23 »
Boxa.Shu, Максим Маркевич, я не увидел в ваших кодах обработку двух очень интересных моментов:
- немировая система координат
- блок с атрибутами
Еще руки не дошли или сознательно не делали?

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #48 : 31-08-2016, 07:05:10 »
Пока ехал вчера с работы, подумалось, что нужно вернуть запрос дистанции и точку считать самостоятельно, а утром увидел ответ от Александра Наумовича... верной дорогой иду =о)

То что я вижу - это полная ерунда:
не ерунда =) , а нагромождение хлама и кусков чужого кода, только для экспериментов и  для того что бы разобраться.
блок с атрибутами
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);
И вроде бы внешне все стало так как хочется:

но вот введенное значение пока не понимает... требуется еще подсказка

еще дополню...
Если вместо запроса дистанции, запрашивать точку, то введенный размер все равно не кушает:
« Последнее редактирование: 31-08-2016, 11:53:10 от Boxa.Shu »

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #49 : 31-08-2016, 09:29:15 »
Boxa.Shu, Максим Маркевич, я не увидел в ваших кодах обработку двух очень интересных моментов:
- немировая система координат
- блок с атрибутами
Еще руки не дошли или сознательно не делали?
Насчет немировой системы, лично я еще не дошел до осознания того, зачем это нужно.
Насчет атрибутов, все есть, только не в этом коде, он так, для теста.
Вот, например, jig с атрибутами:

И можно будет заканчивать эту тему, вроде бы тут будет разобрано все, что касается DrowJig, все в одном месте =о)
Вот разберешься с динамическими размерами и можно будет заканчивать (я внимательно наблюдаю, очень интересно). ;) Когда у меня доберутся руки до них и что-то будет не понятно, я новую тему создам.  :D

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #50 : 31-08-2016, 13:05:15 »
« Последнее редактирование: 31-08-2016, 13:12:47 от Александр Ривилис »

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #51 : 31-08-2016, 13:12:13 »
но вот введенное значение пока не понимает... требуется еще подсказка
Думаю что тебе следует поиграться с OnDimensionValueChanged - в этом методе получать новое значение Dimension и менять величину Distance2.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #52 : 31-08-2016, 15:10:54 »
Думаю что тебе следует поиграться с OnDimensionValueChanged - в этом методе получать новое значение Dimension и менять величину Distance2.
Видимо я что то делаю не так, т.к. данное событие у меня не срабатывает, хотя и понятно как оно должно работать (в аргументе должен возвращаться индекс измененного размера и его значение, дальше беру значение и присваиваю его переменной и в Sampler-е обрабатываю это изменение...)
Но увы, даже BrakePoint внутри этого реактора не срабатывают... =(

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #53 : 31-08-2016, 15:16:42 »
Выложи последнее состояние своего проекта - гляну.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #54 : 31-08-2016, 15:25:55 »
проект во вложении

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #55 : 31-08-2016, 16:25:53 »
Решил использовать только DrawJig, так как не вижу смысла использовать то (EntytyJig), у чего меньше возможностей (опять же, если я правильно все понял).
Каждый инструмент хорош для своих целей. Я для вставки-перемещения-поворота блока использую EntityJig. Думаю, что и в Вашем случае его будет достаточно. Для одного объекта это гораздо удобнее - меньше кода писать.

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #56 : 31-08-2016, 16:29:42 »
Для одного объекта это гораздо удобнее - меньше кода писать.
После того количества кода,просмотренного на просторах интернета, для себя сделал вывод, что это далеко не так, кода приблизительно одинаково.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #57 : 31-08-2016, 16:33:59 »
Для одного объекта это гораздо удобнее - меньше кода писать.
И динамические размеры работают.
Boxa.Shu
Похоже это или баг, или вообще не реализовано в .NET API. Отправлю в ADN DevHelp - может разъяснят.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #58 : 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. Вы не добавляете собственной графики, вам не надо обрабатывать несколько объектов. Так зачем же тогда его использовать? Это забивание гвоздей ну не микроскопом, конечно, но здоровенным таким кузнечным молотом :)

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #59 : 31-08-2016, 17:36:21 »
Спасибо за замечания.
Так зачем же тогда его использовать?
Фактор обучения. С EntityJig работал и разбирался, было интересно. С DrawJig, до этой темы не сталкивался, пока интересно. Буду ли применять в работе, вероятно буду, там где это уместно.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #60 : 31-08-2016, 18:24:56 »
Отправил в ADN DevHelp вопрос по поводу динамических размеров и DrawJig. И видео записал с твоим блоком:




По результатам доложусь.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #61 : 31-08-2016, 18:50:57 »
При каждом изменении создается новый объект в памяти, наделяется нужными свойствами, отображается и уничтожается. Я почему и спросил про атрибуты - попробуйте блок с атрибутами прогнать через такой Jig и удивитесь. Потому что для BlockReference создать атрибуты можно только тогда, когда он добавлен в базу данных. А тут объект создается в памяти только.
Посмотри, пожалуйста, видео из ответа #49. Или я что-то не так понимаю, или с атрибутами в DrawJig никаких проблем!
Здесь при каждом изменении переоткрывается объект на запись.
И что? Что в этом страшного? Поясните, если не сложно.
И самое главное. В ваших примерах никак не используются отличительные возможности DrawJig в сравнении с EntityJig.
Что значит, обрабатывать несколько объектов? Когда это может быть надо? Можно доходчивый пример?
В ваших примерах никак не используются отличительные возможности DrawJig в сравнении с EntityJig. Вы не добавляете собственной графики, вам не надо обрабатывать несколько объектов. Так зачем же тогда его использовать? Это забивание гвоздей ну не микроскопом, конечно, но здоровенным таким кузнечным молотом
Самое страшное - это отсутствие возможности. Вот я использую DrawJig и, если вдруг захочу, то добавлю линии построения или любую другую графику, а вот человек, который использует EntityJig, не сможет (отсутствие возможности)  ;)

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #62 : 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, не сможет (отсутствие возможности) 
Ну, дело хозяйское. Гвозди кувалдой тоже можно забивать, но мне удобнее молотком ;)

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #63 : 31-08-2016, 20:21:35 »
Я же привел в сообщении код, который не сможет обрабатывать атрибуты блока. В видео явно по-другому сделано.
Ну так ты привел код, в котором не обработал атрибуты в WorldDraw, откуда они там появятся? Их необходимо обрабатывать именно в WorldDraw, применительно к объекту, который создается в памяти.
Просто, когда я разбирался, у меня лучше получалось с DrawJig (я быстрее понял технологию). Как по мне, она очевидней.
Я понимаю, что не имею опыта совсем, и что есть доля правды в твоих словах.
Скоро буду писать много кода насчет вставки Jigованных блоков. Обязательно попробую и EntityJig. Все взвешу и сравню.
Ну, как минимум, производительность падает.
Я считаю, что если не видно разницы в производительности невооруженным глазом, то ее и вовсе нет. )) Или просто я не делал ничего сложного!
Гуглится без проблем, например:
Да умею немножко гуглить. Я пишу на c# для своих инженерных целей (думал о конкретной задаче). Хотя вторая ссылка очень прикольная, я побаловался вдоволь.
Ну, дело хозяйское. Гвозди кувалдой тоже можно забивать, но мне удобнее молотком
Я за многофункциональную кувалду.  ;)
Дмитрий Загорулькин, вообще, спасибо, что заставил задуматься, обязательно все попробую и взвешу!
По результатам доложусь.
Присоединяюсь к ожидающим, попробовал код от Boxa.Shu, было бы здорово, если бы работало.
P.S. Извиняюсь за некоторый offtopic. Что-то в моем кругу друзей и родственников все сложнее объяснить, чем же я занимаюсь по жизни :D, а тут, на форуме, все братцы! :)

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #64 : 31-08-2016, 23:33:17 »
Присоединяюсь к ожидающим, попробовал код от Boxa.Shu, было бы здорово, если бы работало.
В ObjectARX точно работает, а в чем тут "засада" понять не могу. Если уж динамические размеры воспринимаются, то почему не обрабатываются - ума не приложу. И что интересно нигде на просторах интернет не вижу упоминания использования этих методов в .NET
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #65 : 01-09-2016, 09:28:03 »
В ObjectARX точно работает
Попойзже посмотрю код (на линейку надо детей вести), посмотрел у себя - в Net DrawJig-OnDimensionValueChanged точно работает.

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #66 : 01-09-2016, 09:48:07 »
Дмитрий Загорулькин все правильно пишет, с кодом и памятью нужно быть аккуратнее и не мусорить. Я со многими его замечаниями согласен, но в данном случае, для меня, это обучающий момент, использовать этот код в продакшине я не собираюсь (Огромное количество копи-паста, как минимум говорит о том что код плохой, а уж про утечки и прочее можно и не вспоминать)

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

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

Александр Ривилис, спасибо. Подожду результатов. Пока может на UCS переключусь...

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #67 : 01-09-2016, 10:11:09 »
Дмитрий Загорулькин все правильно пишет, с кодом и памятью нужно быть аккуратнее и не мусорить. Я со многими его замечаниями согласен, но в данном случае, для меня, это обучающий момент, использовать этот код в продакшине я не собираюсь (Огромное количество копи-паста, как минимум говорит о том что код плохой, а уж про утечки и прочее можно и не вспоминать)
Я понимаю это. Я знаю, кто такой Загорулькин (учусь по его урокам, очень круто он все понимает, бесконечно ему признателен). Но просто хотелось бы более конкретно понимать вещи типа "Здесь при каждом изменении переоткрывается объект на запись.". Ну, по мне, пусть он хоть миллион раз переоткрывается. Я хочу понимать такие вещи в цифрах или на примерах. Ну а как еще учиться, если не спрашивать и не просить пояснить?

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

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #68 : 01-09-2016, 10:52:49 »
На всякий случай еще раз - нужно вставить дин. блок и установить параметр через "динамический" размер?

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #69 : 01-09-2016, 11:04:18 »
На всякий случай еще раз - нужно вставить дин. блок и установить параметр через "динамический" размер?
угу, все так.

Александр Ривилис, не подскажите...
Off-Topic: показать
как включить отладку при Jig, как у вас на видео в 60 сообщении, потому что у меня, при установке точки остановки в методе GetDynamicDimensionData,
получаю вот такую картинку: и дальше наощуп...

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #70 : 01-09-2016, 11:59:24 »
Boxa.Shu
Нужно играться с опциями отладчика. С какими именно точно не подскажу.
На всякий случай еще раз - нужно вставить дин. блок и установить параметр через "динамический" размер?
Тут ключевые слова "через "динамический" размер", а динамический ли это блок или что-то другое (например, длина стороны квадрата) - это в данном случае непринципиально. Ну и принципиально то, что это должен быть DrawJig, а не EntityJig - для него проблем нет.
« Последнее редактирование: 01-09-2016, 13:00:01 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #71 : 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
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #72 : 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
ОНО! Правда править пришлось в реестре, но заработало. Блин, как у Вас это получается!?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #73 : 01-09-2016, 12:47:16 »
Правда править пришлось в реестре, но заработало.
Зачем в реестре? У тебя еще и какой-то хитрый AutoCAD, которому нельзя в командной строке задать NEXTFIBERWORLD значение 0, или он потом не перезапускается? ;)

Блин, как у Вас это получается!?
Угадывать из-за чего у тебя не работает? ;) Это называется "Интуиция". :D
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #74 : 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 уже снова помененно "по курсору".

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #75 : 01-09-2016, 14:33:06 »
что меняется только переменная pt2, но не меняется свойство блока, а когда доходит очередь до него, то pt2 уже снова помененно "по курсору".
Я так понял принцип работы, что нужно отловить изменение, поменять свойство блока, и завершить работу... т.е. внутри события менять св-ва блока и завершать jig... а потому, что там вне события не совсем важно...

А на C# нету кода, для сирых и убогих =о)) , а то я F# ну очень сложно понимаю...

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

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #76 : 01-09-2016, 14:43:27 »
Завершать ничего не нужно.
C# это для настоящих профи, которые могут одновременно и о программе думать и как с языком  бороться, меня только на первое хватает.

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #77 : 01-09-2016, 14:49:22 »
Дима_,  Спасибо тебе добрый человек!!!
Разобрался как эта фигня работает, ща попробую починить...

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

Решение: Выделить обновление блока в отдельный метод, который дергать из WorldDraw и по завершению ввод, вызвать обновление блока перед ретурном в методе DragMe.
« Последнее редактирование: 01-09-2016, 16:47:21 от Boxa.Shu »

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #78 : 01-09-2016, 17:34:52 »
Или вообще в WorldDraw не изменять блок. По правилам в этом методе должна быть только отрисовка и никакой модификации.
Как-то так:
Извините, вам запрещён просмотр содержимого спойлеров.



Но вообще-то это не то, чего следовало ожидать. Интересно посмотреть что будет при двух динамических размерах - в ObjectARX это возможно.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #79 : 01-09-2016, 17:42:50 »
Но вообще-то это не то, чего следовало ожидать. Интересно посмотреть что будет при двух динамических размерах - в ObjectARX это возможно.
Я не пробовал, но без реактора думаю будет сложновато, в реакторе то номер размера выдается...
а вот эта строчка что значит dddCollection[0].ApplicationData = 1;?

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

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

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #80 : 01-09-2016, 18:02:41 »
Интересно посмотреть что будет при двух динамических размерах - в ObjectARX это возможно.
У меня в "исходной" программе у "Net-кустома" три дин. размера от одной точки (размеры до двух соседних "стоек" и сколько отодвинул от начальной точки) - работают себе (но там я правда меняю его только в "конце") - все работают, "табом" переключаются, вводятся значения и пр.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #81 : 01-09-2016, 18:13:00 »
У меня в "исходной" программе у "Net-кустома" три дин. размера от одной точки (размеры до двух соседних "стоек" и сколько отодвинул от начальной точки) - работают себе (но там я правда меняю его только в "конце") - все работают, "табом" переключаются, вводятся значения и пр.
Как ты определяешь какой динамический размер к чему относится если OnDimensionValueChanged не вызывается? Или всё-таки если размеров > 1, то он вызвается?
а вот эта строчка что значит dddCollection[0].ApplicationData = 1;?
Каждому из динамических размеров можно добавить свои данные. Это может быть что угодно. В том числе и номер размера.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #82 : 01-09-2016, 18:14:57 »
Дима_
Стоп. Это же ты показываешь GripOverrule, если я правильно понял. У них там всё несколько иначе.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #83 : 01-09-2016, 18:16:03 »
Я думаю он вызывается - просто отладчик врет.

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

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #84 : 01-09-2016, 18:18:52 »
Это же ты показываешь GripOverrule
... который (и не только он) вызывает единый для всех DrawJig

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #85 : 01-09-2016, 18:23:14 »
Я думаю он вызывается - просто отладчик врет.
Нет. Дело даже не в отладчике. В таком контексте он не вызывается и ничего не делает. Проверил с двумя динамическими размерами - этот метод тоже не вызывается.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #86 : 01-09-2016, 18:29:14 »
Я добавил в OnDimensionValueChanged в выложенном коде
Код - F# [Выбрать]
  1. System.Windows.Forms.MessageBox.Show("Я работаю")|>ignore
и увидел соотв. сообщение когда ввел значение - то есть работает он.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #87 : 01-09-2016, 18:33:24 »
Я добавил в OnDimensionValueChanged в выложенном коде
Код - F# [Выбрать]
  1. System.Windows.Forms.MessageBox.Show("Я работаю")|>ignore
и увидел соотв. сообщение когда ввел значение - то есть работает он.
У меня нет, если добавить в код Boxa.Shu. Ты используешь AcquirePoint, в коде у Boxa.Shu - AcquireDistance. Возможно проблема в этом... Очень возможно... Ведь в GripOverrule используется именно указание точки, а не расстояние.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #88 : 01-09-2016, 18:45:56 »
AcquireDistance. Возможно проблема в этом...
Видимо да...

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #89 : 01-09-2016, 18:57:54 »
AcquireDistance. Возможно проблема в этом...
Видимо да...
А если запрашивается расстояние, то совершенно логично, что размер может быть только один. Мне вот интересно, как Autodesk'овцы выкрутятся с этим вопросом. :)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #90 : 01-09-2016, 19:16:22 »
Вспомнил, я же тоже натыкался на эту "дистанцию", но там не работало что-то другое, потому и поставил везде единный класс с запросом точек.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #91 : 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.
« Последнее редактирование: 02-09-2016, 00:28:21 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #92 : 02-09-2016, 14:35:08 »
К сожалению (как обычно) в AutoCAD .NET API есть ограничения по сравнению с чистым ObjectARX. Одно из них невозможность задавать дополнительные параметры DynamicDimensionData, которые есть у его "native родителя" - AcDbDimData. В частности у AcDbDimData есть метод setConstrain, который позволяет установить значок блокировки для размера, который явно указывает, что этот размер остаётся неизменным:



Или возможность назначить свою функцию-обработчик для обработки ввода данных в поле размера...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #93 : 02-09-2016, 17:14:37 »
Это был ответ от ADN? А с какой целью так сделано не пояснили?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #94 : 02-09-2016, 17:38:33 »
Это был ответ от ADN? А с какой целью так сделано не пояснили?
Это мой ответ. От ADN пока ничего.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #95 : 02-09-2016, 18:06:59 »
А с какой целью так сделано не пояснили?
А это ты про что? Я не понял.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #96 : 02-09-2016, 18:16:05 »
Я так понимаю, что NET API это обёртка над ObjectARX, причем активно продвигаемая в массы. Вот и не понятно зачем кастрировать эту обёртку, дать сам метод OnDimensionValueChanged и не давать с ним работать, в чем смысл?
Может вообще пользоваться динамическими размерами в DrawJig ( net api) не надо (не рекомендуется). Я без претензий, просто буду знать, что если захочется динимических размеров, то пользуйся EntityJig. Если без них и много объектов, то DrawJig.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #97 : 02-09-2016, 18:36:54 »
Вот и не понятно зачем кастрировать эту обёртку
Умышленно никто ничего не кастрировал. Просто для полноценной реализации этой обертки потребовались еще значительные усилия (время и деньги) - эта обертка не делается автоматически. Видимо решили, что на это не стоит тратить силы...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #98 : 02-09-2016, 18:39:01 »
Я без претензий, просто буду знать, что если захочется динимических размеров, то пользуйся EntityJig.
Ты что пропустил всё мое общение с Димой и вот этот пример: http://adn-cis.org/forum/index.php?topic=7251.msg22179#msg22179 ???
Так и для кого я старался???
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #99 : 05-09-2016, 06:48:13 »
Видимо решили, что на это не стоит тратить силы.
Понятно, спасибо за разъяснения и за код (http://adn-cis.org/forum/index.php?topic=7251.msg22179#msg22179) сходу не понял в чем различия, а скомпилировав... событие работает, буду разбираться. Соответственно вопросов про применимость больше не возникает. Буду учиться.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #100 : 05-09-2016, 09:36:33 »
сходу не понял в чем различия
Различие в том, что используется AcquirePoint, а не AcquireDistance.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #101 : 09-09-2016, 12:17:49 »
Различие в том, что используется AcquirePoint, а не AcquireDistance.
В ADN DevHelp решили, что это неправильное поведение (т.е. вроде должно работать с обеими методами) и отправили запрос в DevTeam.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #102 : 15-10-2016, 14:51:22 »
Александр Ривилис, только сейчас очень плотно засел за динамические размеры (интересует 2 и более).
Возник вопрос насчет Вашего кода:
Я сделал тестовый пример с двумя динамическими размерами. Может быть будет интересно.
Все-таки OnDimensionValueChanged же не срабатывает! Именно для этих целей и был прописан UpdateDimensions? Если да, то почему тогда оставили OnDimensionValueChanged, он ведь реально не делает ничего.. :(

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #103 : 15-10-2016, 14:56:32 »
Все-таки OnDimensionValueChanged же не срабатывает!
Как же не срабатывает, когда он срабатывает. Иначе фиксация размеров не происходила бы...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #104 : 15-10-2016, 15:05:16 »
Как же не срабатывает, когда он срабатывает.
Извините, что-то я тупанул. Он срабатывает каждый раз после ввода значения динамического размера.
А не могли бы Вы пояснить физический смысл UpdateDimensions?
И еще, я не могу понять, как задавать динамический угол, используя AlignedDimension?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #105 : 15-10-2016, 15:13:31 »
А не могли бы Вы пояснить физический смысл UpdateDimensions?
При изменении положения/размеров объекта необходимо изменить положение и значение динамического размера. Эта функция приводит динамические размеры в соотвествие.
И еще, я не могу понять, как задавать динамический угол, используя AlignedDimension?
Это когда я смогу добраться до PC. Только вроде тип размера ты выбрал не правильно. Он угол не измеряет.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #106 : 15-10-2016, 15:21:41 »
Это когда я смогу добраться до PC. Только вроде тип размера ты выбрал не правильно. Он угол не измеряет.
Ааа, я что-то прикинул, что этот всемогущий размер _dim, относится к одному классу, а нет.
Теперь понял.

При изменении положения/размеров объекта необходимо изменить положение и значение динамического размера. Эта функция приводит динамические размеры в соотвествие.
Я просто сделал несколько иначе, в WorldDraw запихнул, и вот думаю, ерунды наделал и случайно работает или и так сойдет. :D

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #107 : 15-10-2016, 15:26:30 »
Я просто сделал несколько иначе, в WorldDraw запихнул, и вот думаю, ерунды наделал и случайно работает или и так сойдет.
Исправляй.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #108 : 15-10-2016, 23:09:45 »
Нужна помощь, братцы. :( Чувствую, что проблемка рядом, но что-то не могу найти ее. Блок с динамическими размерами (длина и угол) - хочу чтобы все хорошо работало :)
Суть проблемы в скринкасте:

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


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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #109 : 15-10-2016, 23:28:47 »
Сравни реализацию своего DragMe и моего. Обрати внимание, что мой зациклен.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #110 : 16-10-2016, 00:14:35 »
Сравни реализацию своего DragMe и моего. Обрати внимание, что мой зациклен.
А я и не знал, что те две строчки могут означать зацикленность, точнее не подумал о них.
У Вас используется
Код - C# [Выбрать]
  1. public PromptStatus DragMe()
а у меня использовался
Код - C# [Выбрать]
  1. public PromptResult DragMe(ObjectId blockId, out Point3d pt)
потому что я так четче вижу работу с блоком, хотя что я вижу :)
В общем, спасибо за совет.
Сейчас делаю под Ваш манер. Отпишусь о результатах.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #111 : 16-10-2016, 00:16:42 »
А я и не знал, что те две строчки могут означать зацикленность, точнее не подумал о них.
while как-бы подразумевает цикл...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #112 : 16-10-2016, 01:03:27 »
while как-бы подразумевает цикл...
Это понятно, но в целом, в тех строках много непонятного. Косяк по невнимательности, в общем:
Код - C# [Выбрать]
  1. public PromptStatus DragMe()
Я задумался, почему во всех примерах, по которым я работал до этого использовался:
Код - C# [Выбрать]
  1. public PromptResult DragMe()
По крайней мере, из PromptResult я могу точку достать, поэтому я и подумал - оставлю как есть. Теперь понял, что слона то и не заметил.
Но вот сделал по аналогии с Вашим примером - теперь стало все слишком зацикленно :


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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #113 : 16-10-2016, 01:15:36 »
Что-то ты еще в моём примере не досмотрел. Утро вечера мудренее - завтра найдёшь.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #114 : 16-10-2016, 18:43:44 »
Утро вечера мудренее - завтра найдёшь.
Спасибо, конечно, за напутствия, но вышло, что вечер вечера мудренее :)
Напишу немного о том, что я понял за эти выходные. Мало ли, кто-то еще решит разбираться с подобными делами (в общем, это гайд для неопытных типа меня):
1. Нужно иметь пример от Александра Ривилиса.
2. Нужно четко понимать, что такое DragMe, SamplerStatus, WorldDraw и OnDimensionValueChanged, а также как и в какой последовательности реализована их работа в классе, унаследованном от DrawJig.
3. Обязательно вспомнить геометрию и понимать (в зависимости от целей), как работают методы типа DistanceTo, GetVectorTo, GetAngleTo (тут лучше сразу создать отдельный метод и поэкспериметировать).
4. Для динамических размеров, в зависимости от того, какие нужны, важно понимать их классы (их можно посмотреть, используя любую утилиту) типа LineAngularDimension2 или AlignedDimension, затем важно открыть arxmgd.chm и посмотреть их свойства.
5. Важно понимать, что такое CurrentUserCoordinateSystem и для чего нужна. Вроде как все просто, но тем не менее..
В итоге, вот как вышло решить задачу из поста:

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

Мне кажется, что это даже лучше выглядит :), тем не менее, разбираться было очень интересно.

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #115 : 17-10-2016, 23:57:02 »
Ребзя, произошла очень странная ситуация.
Я разобрался с динамическими размерами, все работало и было круто.
Потом вечером я доставил на свой 2017x64 AutoCAD английский пакет (иногда проще с позиций программирования смотреть некоторые вещи), соответственно, на компе стало два 2017 автокада (английский и русский).
И мой код с динамическими размерами перестал работать в русском, при это исправно работает в английском (см. скринкаст). Я в недоумении. Как такое могло произойти? Может, кто-то сталкивался? Заранее, спасибо за помощь.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #116 : 18-10-2016, 01:37:02 »
Пойдём от обратного. Мой код в твоём AutoCAD 2017 с русской локализацией работает?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #117 : 18-10-2016, 18:16:17 »
Пойдём от обратного. Мой код в твоём AutoCAD 2017 с русской локализацией работает?
Точно, как я не додумался Ваш код проверить. Буду дома только к ночи, сразу отпишусь.
Сразу хочу отметить, что на работе, где нет английского пакета, все работает в том же AutoCAD2017x64 на той же системе.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #118 : 18-10-2016, 18:25:23 »
Честно говоря по твоему видео я не понял что происходит - слишком уж ты быстро на клавиши нажимаешь. :) Вроде переключение на другой размер происходит по нажатию любой клавиши или мне показалось?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #119 : 18-10-2016, 18:34:27 »
Честно говоря по твоему видео я не понял что происходит - слишком уж ты быстро на клавиши нажимаешь.
Я психованный записывал просто (после проведенных часов разборок с кодом, когда разобрался, я ощутил счастье, а потом.. установил пакет английский, и код перестал работать - расстроился очень я) :). А происходит то, что ничего не вводится в динамический размер. В смысле, окошко не реагирует на нажатие клавиш (цифр).
Вроде переключение на другой размер происходит по нажатию любой клавиши или мне показалось?
Показалось, переключение через Tab, переключение работает. )
« Последнее редактирование: 19-10-2016, 14:25:39 от Максим Маркевич »

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #120 : 19-10-2016, 14:25:27 »
Александр Ривилис, Ваш код исправно работает в двух пакетах. Мой - только в русском.
Извините, вам запрещён просмотр содержимого спойлеров.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #121 : 20-10-2016, 04:29:52 »
Александр Ривилис, Ваш код исправно работает в двух пакетах. Мой - только в русском.
Так я и догадывался. Доберусь до компа - проверю. Благо у меня установлены обе версии. Но сначала английская, потом сразу русская, а обновления уже потом устанавливались на обе версии.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн RevitTormentor

  • ADN OPEN
  • ***
  • Сообщений: 162
  • Карма: 6
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #122 : 01-10-2017, 20:20:16 »
Всё-таки не до конца понял. В чём отличие. Например Полилиния.
При DrawJig я работаю с PolyLine? И например поменять цвет линии нужно PolyLine.Color менять.
А EntityJig это я PolyLine привожу к Entity а потом у Entity меняю цвет?
Зачем вообще это разделение. Entity позднее появилось? В базе чертежа что хранится Полилиния или какой то Entity полилинии?
В 2018 версии и DrawJig и EntityJig - всё есть? Ничего не исчезнет?

В каких случаях чем пользоваться?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #123 : 01-10-2017, 23:12:26 »
Всё-таки не до конца понял.
Вообще ничего ты не понял судя по тому, что пишешь дальше. Причем тут цвет к JIG?
Entity позднее появилось?
Позднее чего???
В 2018 версии и DrawJig и EntityJig - всё есть? Ничего не исчезнет?
Единственный вопрос на который я могу дать четкий ответ: "Всё есть. Ничего не исчезло".
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн RevitTormentor

  • ADN OPEN
  • ***
  • Сообщений: 162
  • Карма: 6
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #124 : 02-10-2017, 04:24:00 »
Буду разбираться

Оффлайн serega374

  • ADN OPEN
  • Сообщений: 41
  • Карма: 0
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #125 : 21-11-2018, 04:13:48 »
помогите разобраться с EntytyJig. За основу взят код из первого поста. В общем у меня модальное окно с DataGridView с кнопкой вставить. Я не могу понять правильно ли я запрограммировал EntytyJig, потому что не могу скрыть модальное окно и передать фокус в AutoCAD. Как это сделать?

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

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

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

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #126 : 21-11-2018, 09:53:49 »
потому что не могу скрыть модальное окно и передать фокус в AutoCAD. Как это сделать?
Ну дык вы же и не скрываете окно-то! Где вызов метода Hide()?

Оффлайн Andant

  • ADN Club
  • **
  • Сообщений: 79
  • Карма: 26