Поиск и выбор объекта.

Автор Тема: Поиск и выбор объекта.  (Прочитано 11370 раз)

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

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

Оффлайн zmk.autocadАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 64
  • Карма: 0
Поиск и выбор объекта.
« : 02-05-2015, 19:54:45 »
Здравствуйте! Это опять я, с глупыми вопросами. Пишу свою вторую программу для автокада для своего рода деятельности.
Точнее если быть то уже написал, но сегодня решил добавить новый метод поиска и выделения нужного текстового объекта.
Имеется чертеж с 3000 текстовыми данными  и пойнтами. Нужно запросить у пользователя строку поиска. допустим он вводит 1234! после этого найти текстовый файл с текстом "SE1234" выделить его!
что то не понимаю как его осуществить. думаю в этом направлении:
Код - C# [Выбрать]
  1.             Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
  2.             Database acDocBase = acDoc.Database;
  3. using (DocumentLock acDocLock = acDoc.LockDocument())
  4.             {
  5.                 using (Transaction acDocTr = acDocBase.TransactionManager.StartTransaction())
  6.                 {
  7.                     DBObjectCollection ob_all = acDoc.TransactionManager.GetAllObjects();
  8.  
  9.                 }
  10.             }
и дальше не понимаю что нужно, как работать с DBObjectCollection? это как бы массив объектов получается? тоесть его можно перебрать при помощи foreach?
« Последнее редактирование: 02-05-2015, 20:28:01 от zmk.autocad »

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Поиск и выбор объекта.
« Ответ #1 : 02-05-2015, 20:01:25 »
Тебе уже давалась ссылка.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Поиск и выбор объекта.
« Ответ #2 : 02-05-2015, 20:19:13 »
Начни с того, что разберись что возвращает TransactionManager.GetAllObjects().
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Поиск и выбор объекта.
« Ответ #3 : 02-05-2015, 20:22:21 »
Кроме того, прежде чем опубликовывать текст - читай, что ты написал. Что за мешанина из "чертёжа с текстовыми данными" и из "текстовых файлов"? Работа с текстовыми файлами не требует наличия AutoCAD .NET API.

Оффлайн zmk.autocadАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 64
  • Карма: 0
Re: Поиск и выбор объекта.
« Ответ #4 : 02-05-2015, 20:46:10 »
Андрей, я это уже читал. Но не догнал -( вот хоть осуждайте хоть нет. таковы мои мозги в данной области.
Александр, TransaktionManager.GetAllObjects() возвращает все объекты всех транзакции в форме DBObjectCollection. Хотя да ты прав. мне не нужны объекты транзакций, мне нужны все однострочные объекты из базы чертежа.

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Поиск и выбор объекта.
« Ответ #5 : 02-05-2015, 20:54:03 »
Похоже тебе нужно для начала разобраться со структурой базы данных чертежа. Тогда ты сможешь более чётко сформировать для самого себя задачу. Почитай так же о том, что из себя представляют пространство модели, листа и определений блоков (экземплярами какого класса они представлены и где хранятся в БД). Почитай и о том, как вхождения блоков связаны с их определениями. Затем подумай ещё раз о том, какой текст ты хочешь обрабатывать: вообще весь в базе данных, или же весь в модели, или же весь в модели и на листах и т.п. (вариантов море). Если ты не хочешь обрабатывать текст атрибутах вхождений блоков или обычный текст в их определениях, то имеет смысл исключить их из обработки.

Цитата: zmk.autocad
Андрей, я это уже читал. Но не догнал -(
Что конкретно не понятно?

Не пропускай #2.

Оффлайн zmk.autocadАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 64
  • Карма: 0
Re: Поиск и выбор объекта.
« Ответ #6 : 02-05-2015, 21:08:21 »
Андрей, там ты создаешь интерфейс потом вызываешь методы интерфейса, а разве нельзя обойтись без интерфейсов а сделать это в обычном методе класса?

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Поиск и выбор объекта.
« Ответ #7 : 02-05-2015, 21:11:45 »
Ты сейчас не на то внимание обращаешь. Там присутствует код различных вариантов выборки нужных объектов. А через интерфейс это будет делаться или нет - это уже другой вопрос. Ты спрашивал "как" - я показал примеры конкретного кода.

Оффлайн zmk.autocadАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 64
  • Карма: 0
Re: Поиск и выбор объекта.
« Ответ #8 : 02-05-2015, 21:13:41 »
я не понимаю первую строку кода уже:
ObjectId[] GetAllObjects(DBObjectStatus status);
Что это?

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Поиск и выбор объекта.
« Ответ #9 : 02-05-2015, 21:18:04 »
Получение идентификаторов всех объектов. Код обозначенного метода так же присутствует. Внимательней код смотри - там всё что нужно представлено.

Так же я бы рекомендовал глянуть здесь код метода
Код - C# [Выбрать]
  1. public static Db.ObjectId[] GetDBObjectIds(this Db.Database db,
  2.             Func<Db.ObjectId, Boolean> filter) {
это более корректный вариант, т.к. выполняет дополнительную проверку:
Код - C# [Выбрать]
  1. approxNum > 0

Отмечено как Решение zmk.autocad 03-05-2015, 06:47:52

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Поиск и выбор объекта.
« Ответ #10 : 02-05-2015, 22:51:19 »
Думаю что эта задача решается проще при помощи Editor.SelectAll с фильтром. В качестве примера:

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

Оффлайн zmk.autocadАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 64
  • Карма: 0
Re: Поиск и выбор объекта.
« Ответ #11 : 02-05-2015, 23:59:14 »
Александр, спасибо тебе за постоянную помощь моих глупых вопросов. Но мне нужно выбрать имменно однострочный текст  в содержании которой имееться конкретная подстрока!

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Поиск и выбор объекта.
« Ответ #12 : 03-05-2015, 00:05:17 »
Но мне нужно выбрать имменно однострочный текст  в содержании которой имееться конкретная подстрока!
Ну и что? Хочешь чтобы я "разжевал и положил в рот"? ;) Ладно. В указанном примере фильтр будет выглядеть так:
Код - C# [Выбрать]
  1. string str = "строка поиска"; // Здесь искомая строка
  2. filterlist[0] = new TypedValue(0, "TEXT");
  3. filterlist[1] = new TypedValue(1, "*"+str+"*");
Фильтр может быть более сложным в зависимости от того, что тебе нужно.
« Последнее редактирование: 03-05-2015, 00:38:17 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн zmk.autocadАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 64
  • Карма: 0
Re: Поиск и выбор объекта.
« Ответ #13 : 03-05-2015, 00:12:59 »
Александр. Ну просто я не представлял себе что так можно :(! прям спасибо большое! сейчас буду пробывать!

Оффлайн zmk.autocadАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 64
  • Карма: 0
Re: Поиск и выбор объекта.
« Ответ #14 : 03-05-2015, 00:23:43 »
Да, Александр этого вполне хватает спасибо большое! теперь буду пытаться выделять объекты