Возможно ли получить все объекты определенного типа

Автор Тема: Возможно ли получить все объекты определенного типа  (Прочитано 16275 раз)

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

Оффлайн Виктор ЧекалинАвтор темы

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Разговор будет более предметным, если Вы назовете тип объектов, которые хотите извлечь ;)
Мне нужно было получить Устройства регулирования потока для конкретной напорной трубопроводной сети. Если говорить языком API, то объекты класса PressureAppurtenance для класса PressureNetwork.
Класс PressureNetwork не содержит метода GetAppertunanceIds().
Поддержка ADN подтвердила, что API для работы с напорными трубопроводными сетями пока еще сыровато. Они добавили появление этого метода в список пожеланий.

Написал вот статью по этому поводу.

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
А... Напорка :) Да, недоработок в ней еще пока полно, даже с пользовательской стороны. Интересная статья, спасибо :)

Оффлайн Gennadiy

  • ADN Club
  • **
  • Сообщений: 81
  • Карма: 0
Доброго дня всем.
У меня возник такой вопрос по этой теме:
мне нужно при открытии формы пройтись итерацией по базе данных и сделать определенную выборку,
через SelectAll мне не получить то что мне нужно, т.к. мне нужны также и удаленные (IsErased) объекты.
Воспользовался примерами Андрея Бушмана отсюда
https://sites.google.com/site/bushmansnetlaboratory/sendbox/stati/database/dbsearcher.
Но вот пришлось мне открыть чертеж, где TargetDb.Handseed.Value было равно 756 413 642!!!, причем
реально объектов в базе было около 250 000, а на остальные Handle код
bool result = database.TryGetObjectId(h, out id); выдавал false. Так вот такая итерация
у меня занимает времени около 4-5 минут. Отсюда вопрос: можно ли как то ещё получить объекты из базы данных?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Но вот пришлось мне открыть чертеж, где TargetDb.Handseed.Value было равно 756 413 642!!!, причем
реально объектов в базе было около 250 000
Бывает, хотя чаще всего этот чертеж создается не средствами AutoCAD или в нём действительно было огромное число примитивов, большую часть из которых удалили. Есть выполнить для такого чертежа _WBLOCK *, то метки упорядочиваются.
Ну а дальше всё зависит от того что тебе нужно. Можно пройтись по всем блокам (в том числе и по ModelSpace/PaperSpace) и в каждом из них отбирать то, что тебе нужно. А может тебе достаточно отобрать только в ModelSpace или PaperSpace - без четкой постановки задачи понять сложно.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Gennadiy

  • ADN Club
  • **
  • Сообщений: 81
  • Карма: 0
Мне нужны все полилинии с определенным ExtensionDictionary, причем также и удаленные из чертежа, для того чтобы повесить на них реакторы на
удаление-восстановление, пока открыта моя палетка (тогда в случае команды "UNDO" они будут появляться в моем списке на палетке)

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

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

Оффлайн Gennadiy

  • ADN Club
  • **
  • Сообщений: 81
  • Карма: 0
Полилинии в ModelSpace, но разве ObjectId удаленных примитивов там остаются после удаления? Я думал что их можно достать только из базы.

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

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

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Думаю что эта ссылка поможет тебе пройтись по пространству Модели и получить все удаленные примитивы в ней: http://adndevblog.typepad.com/autocad/2012/07/indentifying-erased-entities.html
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Gennadiy

  • ADN Club
  • **
  • Сообщений: 81
  • Карма: 0
То что нужно! Про это
BlockTableRecord withErasedBTR = record.IncludingErased;я не знал.
Большое спасибо!

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Я добавил перевод этой статьи на наш сайт: http://adn-cis.org/poisk-udalennyix-primitivov.html
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение