Удаление всех внешних ссылок

Автор Тема: Удаление всех внешних ссылок  (Прочитано 18441 раз)

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

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Здравствуйте.
Нашел способ удаления всех внешних ссылок лишь перебором всего в модели, нахождения внешних ссылок и удаления каждой методом DetachXRef
есть ли проще?
Спасибо

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Удаление всех внешних ссылок
« Ответ #1 : 23-11-2018, 16:48:46 »
есть ли проще?
А как ты себе представляешь это "проще"?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Отмечено как Решение simson43 23-11-2018, 17:08:18

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: Удаление всех внешних ссылок
« Ответ #2 : 23-11-2018, 16:50:57 »
Какой-нибудь метод Database.RemoveAllXrefs(), наверное :)

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: Удаление всех внешних ссылок
« Ответ #3 : 23-11-2018, 17:08:09 »
Какой-нибудь метод Database.RemoveAllXrefs(), наверное :)
Работает, спасибо!)

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: Удаление всех внешних ссылок
« Ответ #4 : 26-11-2018, 12:33:42 »
я к тому, что делать итерацию внутри XrefGraph, наверное, быстрее чем внутри модели...

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: Удаление всех внешних ссылок
« Ответ #5 : 26-11-2018, 14:37:13 »
Не факт, надо проверять. Никто не гарантирует, что "внутри", при формировании XrefGraph, не используется тот же самый проход по всем объектам чертежа.

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: Удаление всех внешних ссылок
« Ответ #6 : 26-11-2018, 15:20:53 »
ну да если сравнивать цифры во время отладки то они одинаковые...
в таком варианте хотя бы код поприятнее.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Удаление всех внешних ссылок
« Ответ #7 : 26-11-2018, 15:22:32 »
Никто не гарантирует, что "внутри", при формировании XrefGraph, не используется тот же самый проход по всем объектам чертежа.
Нет. Зачем? И вообще проще просканировать BlockTable на предмет нахождения в ней BlockTableRecord, соответствующим внешним ссылкам и для них выполнить DetachXref.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: Удаление всех внешних ссылок
« Ответ #8 : 26-11-2018, 16:30:11 »
а как из btr вытащить слой? только BlockReference получать?

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: Удаление всех внешних ссылок
« Ответ #9 : 26-11-2018, 16:34:04 »
И вообще проще просканировать BlockTable на предмет нахождения в ней BlockTableRecord, соответствующим внешним ссылкам и для них выполнить DetachXref.
Насколько я понимаю, нужно будет ещё дополнительно проверить, что эта внешняя ссылка не является вложенной в другую.
Кстати, а возможна же ситуация, когда внешняя ссылка вложена в блок чертежа? Тогда, получается, простая итерация по объектам модели или листов недостаточна. Надо ещё внутрь всех блоков входить... Маловероятно, конечно, что кто-то будет внешнюю ссылку в блок пихать. Но чего только не встретишь в реальности :)

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Удаление всех внешних ссылок
« Ответ #10 : 26-11-2018, 16:34:22 »
а как из btr вытащить слой?
А кто-то в теме спрашивал про слой? Как нибудь определись с тем, что тебе нужно.
Если тебе нужно удалить только те внешние ссылки, которые вставлены на определённый слой (или слои), то конечно нужно анализировать вставки (BlockReference), а не Xref (BlockTableRecord). Тем не менее найти все BlockReference, которые относятся к данной BlockTableRecord без сканирования всей базы можно при помощи метода BlockTableRecord.GetBlockReferenceIds
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Удаление всех внешних ссылок
« Ответ #11 : 26-11-2018, 16:35:48 »
Тогда, получается, простая итерация по объектам модели или листов недостаточна.
Конечно.
Насколько я понимаю, нужно будет ещё дополнительно проверить, что эта внешняя ссылка не является вложенной в другую.
Думаю, что да.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: Удаление всех внешних ссылок
« Ответ #12 : 26-11-2018, 16:38:29 »
А может это и неважно. Возможно, что ничего страшного не случится, если "детачить" вложенную ссылку. Хотя, я бы на такое не надеялся :)
Надо проверять, тестировать...

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: Удаление всех внешних ссылок
« Ответ #13 : 28-11-2018, 14:56:12 »
А кто-то в теме спрашивал про слой? Как нибудь определись с тем, что тебе нужно.
мне нужно удалить то все! но если они лежат в заблокированном слое, то его нужно разблокировать сначала. а для этого узнать что за слой! так ведь?

а вот если проходить по BlockTable, то мне нужно открывать по ObjectId каждый btr и проверять что это внешняя ссылка?

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: Удаление всех внешних ссылок
« Ответ #14 : 28-11-2018, 14:59:39 »
но если они лежат в заблокированном слое, то его нужно разблокировать сначала. а для этого узнать что за слой! так ведь?
Не нужно, если открывать объект с соответствующей опцией forceOpenOnLockedLayer: http://help.autodesk.com/view/OARX/2018/ENU/?guid=OREFNET-Autodesk_AutoCAD_DatabaseServices_Transaction_GetObject_ObjectId_Autodesk_AutoCAD_DatabaseServices_OpenMode__MarshalAsUnmanagedType_U1__bool__MarshalAsUnmanagedType_U1__bool