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

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

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

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

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


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

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

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

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

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

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



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




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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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