Использование транзитной графики

Автор Тема: Использование транзитной графики  (Прочитано 9061 раз)

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

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

Оффлайн Привалов ДмитрийАвтор темы

  • ADN Club
  • *****
  • Сообщений: 546
  • Карма: 119
как-то давно увидел данную тему
http://adn-cis.org/ispolzovanie-tranzitnoj-grafiki.html
давно попробовал, работало.

Сейчас на 2014 автокаде захотелось применить в работе данный механизм, но стали вываливаются ошибки, при transientManager.AddTransient(....)

Наткнулся на обсуждение.
http://forums.autodesk.com/t5/net/transientmanager-trouble/td-p/4786911

Если я правильно понял обсуждение, то:
1. TransientManager не применим для долгосрочного отображения на экране.
2. Нельзя внутри метода использовать объекты, созданные не в базе данных.

Для этих целей рекомендуют использовать
If you have to achieve the similar visisual effect and clear it at later time, using DrawableOverrule might be much better solution. In your can simply override the WorldDraw() method to fill  the polyline with desired color. You set the Overrule's custom filter to user picked polyline.

Я планировал использовать TransientManager именно для долгосрочной отрисовки на экране.
Типа включить/выключить отображение ошибок. Пользователь сам должен выбирать момент когда включить/отключить отображение.

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

Подскажите пожалуйста, как для этих целей пользоваться override the WorldDraw() method, или как правильно использовать TransientManager.

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

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Использование транзитной графики
« Ответ #1 : 29-06-2015, 10:26:41 »
А чем DrawJig не угодил?

Оффлайн Привалов ДмитрийАвтор темы

  • ADN Club
  • *****
  • Сообщений: 546
  • Карма: 119
Re: Использование транзитной графики
« Ответ #2 : 29-06-2015, 10:45:53 »
А чем DrawJig не угодил?
А подойдет?
Обычно им динамически изменяемые объекты отрисовывают на короткий период.
В данном случае статические объекты, не зависящие от действий пользователя. Объектов может быть много.

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

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Использование транзитной графики
« Ответ #3 : 29-06-2015, 10:49:43 »
Так Вы сами написали:
Цитировать
If you have to achieve the similar visisual effect and clear it at later time, using DrawableOverrule might be much better solution. In your can simply override the WorldDraw() method to fill  the polyline with desired color. You set the Overrule's custom filter to user picked polyline
Там и советуют использовать DrawJig. Благо примеров полно: http://through-the-interface.typepad.com/through_the_interface/jigs/

Оффлайн Привалов ДмитрийАвтор темы

  • ADN Club
  • *****
  • Сообщений: 546
  • Карма: 119
Re: Использование транзитной графики
« Ответ #4 : 29-06-2015, 11:00:20 »
и советуют использовать DrawJig
Ок, спасибо, не сообразил что DrawableOverrule и есть DrawJig.
Не приходилось использовать, для теста один раз запустил пример и то давно.
Попробую, отпишусь что получилось.

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: Использование транзитной графики
« Ответ #5 : 29-06-2015, 11:06:13 »
Ок, спасибо, не сообразил что DrawableOverrule и есть DrawJig.
Насколько я знаю, это разные вещи. Первое - для изменения постоянного отображения объекта, второе - для получения временного отображения объекта или объектов при операциях копирования, перемещения и т.п.

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

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Использование транзитной графики
« Ответ #6 : 29-06-2015, 11:10:59 »
Ок, спасибо, не сообразил что DrawableOverrule и есть DrawJig.
Насколько я знаю, это разные вещи. Первое - для изменения постоянного отображения объекта, второе - для получения временного отображения объекта или объектов при операциях копирования, перемещения и т.п.
Скорее всего да - это разные вещи (лично я просто не пробовал DrawableOverrule), но с помощью DrawJig тоже можно менять постоянное отображение объекта

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: Использование транзитной графики
« Ответ #7 : 29-06-2015, 11:22:40 »
но с помощью DrawJig тоже можно менять постоянное отображение объекта
Но ведь только на момент выполнения какого-то пользовательского запроса? Давно не трогал Jigs, подзабыл. Но вот глянул быстро примеры кода, и вроде как да, только когда выполняется запрос с помощью Editor.Drag, можно на это время что-то поменять. А DrawableOverrule меняет отображение "на постоянной основе", т.е. до тех пор, пока его не отключить.

Отмечено как Решение Привалов Дмитрий 29-06-2015, 20:49:43

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Использование транзитной графики
« Ответ #8 : 29-06-2015, 15:02:32 »
Если я правильно понял обсуждение, то:
1. TransientManager не применим для долгосрочного отображения на экране.
2. Нельзя внутри метода использовать объекты, созданные не в базе данных.
Ну это обсуждение - не истина в последней инстанции. Впрочем, любой чужой код может стереть твою транзитную графику.
И если объект не в базе, а просто создан при помощи оператора new, то он может быть в любой момент удалён сборщиком мусора. Так что такие объекты желательно сделать глобальными/статическими.

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

Оффлайн Привалов ДмитрийАвтор темы

  • ADN Club
  • *****
  • Сообщений: 546
  • Карма: 119
Re: Использование транзитной графики
« Ответ #9 : 29-06-2015, 21:31:05 »
Ну это обсуждение - не истина в последней инстанции. Впрочем, любой чужой код может стереть твою транзитную графику.
И если объект не в базе, а просто создан при помощи оператора new, то он может быть в любой момент удалён сборщиком мусора. Так что такие объекты желательно сделать глобальными/статическими.
Как всегда в точку.
Только одно уточнение обязательно сделать глобальными/статическими, если хотим использовать объекты после завершения работы функции.
Иначе в 2014 версии происходит крах "unhandled access violation reading" через различные промежутки времени.
Вероятнее как раз во время работы сборщика мусора.

Либо, как следовало в обсуждении
http://forums.autodesk.com/t5/net/transientmanager-trouble/td-p/4786911
сделать освобождение объектов внутри функции,  до работы сборщика мусора.

Если есть возможность, подправьте пожалуйста статью, добавьте комментарий в коде.
http://adn-cis.org/ispolzovanie-tranzitnoj-grafiki.html
Это поможет избежать проблем другим программистам, при использовании кода.

Еще ссылка, где обсуждается использование в пространстве листа.
http://www.theswamp.org/index.php?topic=36557.0


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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Использование транзитной графики
« Ответ #10 : 29-06-2015, 21:38:27 »
Ну вообще-то в коде статьи элементы транзитной графики явно сделаны глобальными.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Привалов ДмитрийАвтор темы

  • ADN Club
  • *****
  • Сообщений: 546
  • Карма: 119
Re: Использование транзитной графики
« Ответ #11 : 29-06-2015, 21:43:38 »
Ну вообще-то в коде статьи элементы транзитной графики явно сделаны глобальными.
Да это так. Моя ошибка состояла в том, что вынес код в отдельную функцию и запустил.
И для меня было не очевидно, из-за чего произошел крах, пока вы не подсказали)