Метод GetSelection и предварительный выбор - некорректная работа. Как побороть?

Автор Тема: Метод GetSelection и предварительный выбор - некорректная работа. Как побороть?  (Прочитано 19332 раз)

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

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Так и знал, что введу в заблуждение :)
Таки смог!  :)
Вроде не первый день пишу на NET под автокад и не знал, что ID хранит ссылку на базу данных  :o
Если быть точным, то ObjectId хранит ссылку на базу данных только (!!!) если он уже добавлен в базу данных. В противном случае ObjectId.Database вернет null, что впрочем понятно. В данном случае очевидно, что все примитивы, которые мы собираемся фильтровать уже находятся в базе. Более того, конкретно в базе Application.DocumentManager.MdiActiveDocument.Database
« Последнее редактирование: 01-06-2015, 22:31:10 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Может кому пригодится. Причесал маленько.
Нечто похожее я размещал здесь (см. код класса DatabaseExtensionMethods.cs). Там даны несколько вариантов выборки, группировки, модификации и генерации произвольных данных.

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Андрей. Я что-то не уловил зачем функция public static Db.ObjectId GetCurrentSpaceObjectId(this Db.Database database) и чем она отличается от обычного Database.CurrentSpaceId
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Андрей. Я что-то не уловил зачем функция public static Db.ObjectId GetCurrentSpaceObjectId(this Db.Database database) и чем она отличается от обычного Database.CurrentSpaceId
Если в данный момент вы находитесь в видовом экране, размещённом на листе, то чей идентификатор покажет Database.CurrentSpaceId: Листа или Модели? Насколько я помню, он покажет идентификатор листа, на котором находится активный видовой экран. На всякий случай перепроверьте - я не могу, т. к. Linux.

Мне нужно, чтобы в этом случае возвращался идентификатор модели, поскольку в данный момент работа происходит именно в этом пространстве.


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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Код для проверки:
Код - C# [Выбрать]
  1. [CommandMethod("TestSpace", CommandFlags.Modal)]
  2. static public void TestSpace()
  3. {
  4.   Document doc = Application.DocumentManager.MdiActiveDocument;
  5.   Editor ed = doc.Editor;
  6.   Database db = doc.Database;
  7.   ObjectId curSpaceId = db.CurrentSpaceId;
  8.   using (BlockTableRecord btr = curSpaceId.Open(OpenMode.ForRead) as BlockTableRecord) {
  9.     ed.WriteMessage("\nName of space: {0}", btr.Name);
  10.   }
  11. }
В пространстве модели:
Name of space: *Model_SpaceВ пространстве листа:
Name of space: *Paper_SpaceВ видовом экране внутри пространства листа:
Name of space: *Model_SpaceТ.е., как я понимаю именно то, что тебе было нужно...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Согласен, велосипед! Исправил.

Оффлайн Phil

  • ADN OPEN
  • Сообщений: 47
  • Карма: 0
Добрый день!

В процессе разработки своей программы, нашел данную ветку форума. Решение, приведенное здесь, мне здорово помогло.
Но есть одна проблема: в результате выполнения приведенного кода по обработке предварительного набора объектов с фильтрацией полилиний, отфильтрованные объекты не только подсвечиваются, но и появляются "ручки". Как сделать, что бы ручки не появлялись? Мне нужно продолжить команду, и появление ручек в этот момент совсем некстати.

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Как сделать, что бы ручки не появлялись?
В 26 строке удалить:
Код - C# [Выбрать]
  1. ed.SetImpliedSelection(selRes.Value.GetObjectIds());
И добавить обработку выбранных объектов методом Entity.Highlight()

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
в результате выполнения приведенного кода по обработке предварительного набора объектов с фильтрацией полилиний, отфильтрованные объекты не только подсвечиваются, но и появляются "ручки".
Если имеется в виду под подсветкой выбор объектов, то ручки будут всегда. А если нет и нужно просто показать объекты, то Дмитрий Загорулькин прав.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Phil

  • ADN OPEN
  • Сообщений: 47
  • Карма: 0
И добавить обработку выбранных объектов методом Entity.Highlight()
Если имеется в виду под подсветкой выбор объектов, то ручки будут всегда. А если нет и нужно просто показать объекты, то Дмитрий Загорулькин прав.
Благодарю! Нужна именно подсветка на период выполнения моей команды. А по завершении команды, я очевидно, должен вручную снять подсветку, иначе она останется, верно? Методом Entity.UnHighlight() ?

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
А по завершении команды, я очевидно, должен вручную снять подсветку, иначе она останется, верно? Методом Entity.UnHighlight() ?
Да.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение