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

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

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

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

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

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



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

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

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

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

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь 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
  • *****
  • Сообщений: 624
  • Карма: 158
    • ПГСу Бложик
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #34 : 30-08-2016, 08:08:32 »
Подозреваю, что проблема в самом блоке.
нет, он очень простой, там нечему ломаться.

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

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

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

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

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

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

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

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

  • ADN Club
  • *****
  • Сообщений: 624
  • Карма: 158
    • ПГСу Бложик
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
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь 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
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: В чем отличия EntytyJig от DrawJig?
« Ответ #39 : 30-08-2016, 11:50:49 »
Кстати, в составе ObjectARX SDK есть пример samples\dotNet\EllipseJig, который использует динамические размеры.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

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

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

  • ADN Club
  • *****
  • Сообщений: 624
  • Карма: 158
    • ПГСу Бложик
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. :)