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

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

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

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь 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
  • Карма: 737
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
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь 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
  • *****
  • Сообщений: 624
  • Карма: 158
    • ПГСу Бложик
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
  • *****
  • Сообщений: 624
  • Карма: 158
    • ПГСу Бложик
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #69 : 01-09-2016, 11:04:18 »
На всякий случай еще раз - нужно вставить дин. блок и установить параметр через "динамический" размер?
угу, все так.

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

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь 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
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь 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
  • *****
  • Сообщений: 624
  • Карма: 158
    • ПГСу Бложик
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
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь 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 уже снова помененно "по курсору".