Странное поведение динамического блока при использовании Jig

Автор Тема: Странное поведение динамического блока при использовании Jig  (Прочитано 18769 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн art_rrcАвтор темы

  • ADN Club
  • **
  • Сообщений: 70
  • Карма: 1
  • Skype: art_sapranovich
Доброго времени суток!
Пытаюсь приручить инструмент Jig. Но на данный момент результат просто обескураживает. Задача такая: "При вставке дин. блока нужно повлиять на его дин. параметры". В качестве параметра для теста я выбрал "Угол1". Но при выполнении, существенно меняется геометрия всего блока, не связанная с параметром Угол1. А атрибуты вообще не отображаются, а после вставки остаются на месте. Подскажите, как побороть? Явно я где-то что-то недообновляю и т.п. Или в Jig, при вызове SetDynProp также нужно использовать транзакцию каким-то образом?
Что касается конкретных вопросов, то вот например 1 из целой кучи:
В какой системе координат высчитывается получаемая в Jig точка(dresPoint.value)? Это координаты x,y,z относительно мировой системы, или же они считаются как-то с привязкой к переданному в класс примитиву?
Код - vb.net [Выбрать]
  1. Dim dresPoint As PromptPointResult = jPrompts.AcquirePoint(jigOpts)
Код:
Извините, вам запрещён просмотр содержимого спойлеров.
Спасибо. :)

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

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Ну вообще-то у тебя должно быть две Jig:
1 - для вставки блока в чертеж (на курсоре висит блок в его первоначальном виде)
2 - для изменения дин.параметра

Оффлайн art_rrcАвтор темы

  • ADN Club
  • **
  • Сообщений: 70
  • Карма: 1
  • Skype: art_sapranovich
1 - для вставки блока в чертеж (на курсоре висит блок в его первоначальном виде)
Зачем? Так же не красиво.
Основная концепция придумана и реализована достаточно давно. На данном этапе, цель перевести все на .net + прикрутить всяко-разные красивости типа jigs, pointmonitor т.д. + Сделать это легкоустанавливаемым для использования. Что-то не надо было над адаптацией по пол часа колдовать каждый раз.
Видео YouTube:
Извините, вам запрещён просмотр содержимого спойлеров.

ps Видео записано существенно позже реализации.
« Последнее редактирование: 25-10-2015, 14:37:24 от art_rrc »

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

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Зачем? Так же не красиво
Что значит "Зачем"? О_о
Чтобы изменять динамический параметр блока этот блок ДОЛЖЕН БЫТЬ! Его нужно сначала вставить в чертеж
В видео, которое ты приложил, указывается ДВЕ точки - первая для вставки блока. Просто там не используется Jig при этом, поэтому блока и не видно

Оффлайн art_rrcАвтор темы

  • ADN Club
  • **
  • Сообщений: 70
  • Карма: 1
  • Skype: art_sapranovich
Чтобы изменять динамический параметр блока этот блок ДОЛЖЕН БЫТЬ! Его нужно сначала вставить в чертеж
Т.е. обязательно нужно его сначала добавить например в ModelSpace?
Вот же создается вхождение блока:
Код - vb.net [Выбрать]
  1. Dim bdId As ObjectId = bt("123")
  2. Dim pt As New Point3d(0, 0, 0)
  3. Dim br As New BlockReference(pt, bdId)
В оригинальной программе я планировал pt - получать как результат запроса к пользователю, а уже указание второй точки и размещение полки указывать с помощью Jigs. Просто для тестов порезал функционал немного для экономии времени. Мне кажется, что так достаточно логично.
Вот фрагмент из рабочего файла без Jigs. Просто полный повтор функционала VBA (как на видео).
Извините, вам запрещён просмотр содержимого спойлеров.

Так вот теперь пытаюсь 2ю точку получать используя Jig, для первой считаю что не нужно. Но тут вопрос ведь гораздо коварнее.. Что вообще теоритически так влияет на геометрию блока из Gifки (пост №1), ведь я на нее влияю только с помощью Sub SetDynProp, корорая отрезки вообще не трогает.

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

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Вот же создается вхождение блока:
Просмотрел. Каюсь - мой косяк и неоправданный наезд  :)
Видимо 2 часа ночи на меня плохо действуют  ;D
Что вообще теоритически так влияет на геометрию блока из Gifки
Теоретически (как и практически) - неправильно написанный код для Jig. Инфа 100% - сам с таким сталкивался. Но лично я не могу проверить, ибо VB.Net...

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

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Что-то до меня только сейчас дошло - а зачем вот это:
Код - vb.net [Выбрать]
  1. 'Угол между двумя Point3d (От оси X)
  2.     Public Shared Function AngleFromXAxis3d(StartPoint As Point3d, EndPoint As Point3d) As Double
  3.         Dim pt1 As Point2d = New Point2d(StartPoint.X, StartPoint.Y)
  4.         Dim pt2 As Point2d = New Point2d(EndPoint.X, EndPoint.Y)
  5.         AngleFromXAxis3d = pt1.GetVectorTo(pt2).Angle
  6.     End Function
? ? ? ?  :o
Тебе для расположения полки нужна ТОЧКА, а ни какой не угол! Причем тут вообще угол?

Оффлайн art_rrcАвтор темы

  • ADN Club
  • **
  • Сообщений: 70
  • Карма: 1
  • Skype: art_sapranovich
Теоретически (как и практически) - неправильно написанный код для Jig.
Видимо 2 часа ночи на меня плохо действуют 
В принципе 2 часа ночи они общие для всех. Утро вечера мудренее, утром может и сам найду в чем дело. Или может кто-то подскажет где копнуть.. ;)

Оффлайн art_rrcАвтор темы

  • ADN Club
  • **
  • Сообщений: 70
  • Карма: 1
  • Skype: art_sapranovich
Тебе для расположения полки нужна ТОЧКА, а ни какой не угол! Причем тут вообще угол?
Мне нужно расстояние и угол. Я решил для начала обойтись только углом.
Вот это настройка расположения блока при указании 2х точек вручную:
Извините, вам запрещён просмотр содержимого спойлеров.

Отмечено как Решение art_rrc 25-10-2015, 03:16:53

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

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Ну вообще-то я был прав с самого начала  ;D
Т.к. тебе нужно менять дин.параметры вхождения блока, то он должен быть уже вставлен в чертеж!
Если твой код немножко совсем изменить, то задание угла будет работать как надо:
Код - vb.net [Выбрать]
  1. Dim pt As New Point3d(0, 0, 0)
  2. Dim br As New BlockReference(pt, bdId)
  3. Dim ms As BlockTableRecord = DirectCast(tr.GetObject(bt(BlockTableRecord.ModelSpace), OpenMode.ForWrite), BlockTableRecord)
  4. ms.AppendEntity(br)
  5. tr.AddNewlyCreatedDBObject(br, True)
  6. Dim entJig As New BlockJig(br)
  7. pr = ed.Drag(entJig)
  8. If pr.Status = PromptStatus.OK Then
  9.     'Dim ms As BlockTableRecord = DirectCast(tr.GetObject(bt(BlockTableRecord.ModelSpace), OpenMode.ForWrite), BlockTableRecord)
  10.     'ms.AppendEntity(entJig.GetEntity())
  11.     'tr.AddNewlyCreatedDBObject(entJig.GetEntity(), True)
  12.     Dim bd As BlockTableRecord = DirectCast(tr.GetObject(bdId, OpenMode.ForRead), BlockTableRecord)
Насчет атрибута ничего не скажу - не смотрел. Но думаю, причина "где-то рядом"

Оффлайн art_rrcАвтор темы

  • ADN Club
  • **
  • Сообщений: 70
  • Карма: 1
  • Skype: art_sapranovich
Огромное спасибо! Все работает! У меня просто нет слов. Большое спасибо за поддержку. Самому докопаться до ответов, которые я получаю здесь, было бы титанически сложно. Вы для меня просто герои!
Насчет атрибута ничего не скажу - не смотрел. Но думаю, причина "где-то рядом"
Да, действительно рядом, в соседней теме http://adn-cis.org/forum/index.php?topic=3128.0  :) Там после вставки, еще отдельно атрибуты добавлять нужно, но это вопрос уже решенный.  :)
Ну, теперь думаю со спокойной совестью можно и поспать, в уже завтра домучить этот Jig, который сам меня целый день мучал.. :D

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Т.к. тебе нужно менять дин.параметры вхождения блока, то он должен быть уже вставлен в чертеж!
Здесь тебя это не удивляет и ты не считаешь это багом?! :)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
art_rrc
Очень рекомендую для записи записи видео использовать https://screencast.autodesk.com/ (сама "грабалка" здесь: http://www.autodesk.com/screencast-download/), а вставлять видео на форум как у меня указано в подписи. Преимуществ масса. В том числе и то что видно какие клавиши/кнопки мыши нажимаются.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн art_rrcАвтор темы

  • ADN Club
  • **
  • Сообщений: 70
  • Карма: 1
  • Skype: art_sapranovich
Очень рекомендую для записи записи видео использовать https://screencast.autodesk.com/
Спасибо, я учту. Видео в этой теме не записывалось, а просто было под рукой и я решил скинуть ссылку. Попробую след. раз скринкастом воспользоваться. Хотя в последнее время я вообще в основном использую не видео, а GIF. Просто, лаконично, но вполне информативно.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Хотя в последнее время я вообще в основном использую не видео, а GIF. Просто, лаконично, но вполне информативно.
Недостаточно информативно, если не видно какая кнопка мыши нажата или какой текст введён. Кроме того нельзя остановить воспроизведение, что тоже существенный минус. Ну и в ADN DevHelp только такое видео.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение