Объединение слоев

Автор Тема: Объединение слоев  (Прочитано 10164 раз)

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

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

  • ADN OPEN
  • ***
  • Сообщений: 106
  • Карма: 3
Объединение слоев
« : 03-09-2020, 10:19:31 »
Существует ли способ объединить слои, или нужно перебирать все объекты на слоях и переносить в другой слой, а этот удалять?

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

  • Administrator
  • *****
  • Сообщений: 13898
  • Карма: 1790
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Объединение слоев
« Ответ #1 : 03-09-2020, 10:28:06 »
Существует ли способ объединить слои, или нужно перебирать все объекты на слоях и переносить в другой слой, а этот удалять?
Слой - это свойство примитива, а не какая-то отдельная сущность. И поэтому единственный способ - это изменить слой у примитива. Кстати, "перебрать все объекты на слоях" - это не вполне тривиальная операция в общем случае. Ведь объект (примитив) не обязательно прямо находится в пространстве модели/пространстве листа - он может входить в состав какого-нибудь блока, который еще куда-то вставлен.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13898
  • Карма: 1790
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Объединение слоев
« Ответ #2 : 03-09-2020, 11:01:01 »
Чтобы было понятнее можно использовать MGDDBG для анализа:



Здесь у меня окружность на слое TestLayer, еще одна окружность и отрезок внутри блока с именем "А" тоже на слое TestLayer и сам блок вставлен на слой TestLayer. Поэтому менять слой придётся у четырёх примитивов, два из которых внутри блока.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 839
  • Карма: 168
    • Мои плагины к Автокаду
Re: Объединение слоев
« Ответ #3 : 03-09-2020, 11:16:30 »
Кстати, "перебрать все объекты на слоях" - это не вполне тривиальная операция в общем случае.
Вроде бы тривиально. Достаточно перебрать всю таблицу блоков и все объекты внутри BTR. Это даже не рекурсия.
Или еще где-то в словарях могут быть ссылки на слои?
Возможно возникнут проблемы со слоями внешних ссылок - у них двойные имена и другая database.

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

  • ADN Club
  • *****
  • Сообщений: 554
  • Карма: 119
Re: Объединение слоев
« Ответ #4 : 03-09-2020, 11:18:04 »
Существует ли способ объединить слои, или нужно перебирать все объекты на слоях и переносить в другой слой, а этот удалять?

Уточни, какая задача главная?
Если главная задача, удалить слой, то необходимо, чтобы на слой не ссылались объекты.
Тогда изменить свойства LayerId у всех блоков и примитивах в них может оказаться недостаточно.

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

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

  • Administrator
  • *****
  • Сообщений: 13898
  • Карма: 1790
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Объединение слоев
« Ответ #5 : 03-09-2020, 11:19:46 »
Возможно возникнут проблемы со слоями внешних ссылок - у них двойные имена и другая database.
Ну это даже смысла нет обсуждать. Речь же идёт про изменение имени слоя...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 106
  • Карма: 3
Re: Объединение слоев
« Ответ #6 : 03-09-2020, 14:11:47 »
Уточни, какая задача главная?
Задача объединить слои, а именно, перенести все объекты из объединяемых слоев в один и удалить остальные. Пока что буду перебором всех объектов решить эту задачу, а там по ходу посмотрим что будет мешать удалению.

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

  • ADN Club
  • *****
  • Сообщений: 554
  • Карма: 119
Re: Объединение слоев
« Ответ #7 : 03-09-2020, 15:03:57 »
Задача объединить слои, а именно, перенести все объекты из объединяемых слоев в один и удалить остальные.
вторую часть задачи лучше сформулируй так "...и удалить, если не используются."
..иначе она станет основной по времени.

Ищи по форуму  Database.Purge
Есть Database.Purge, которая позволяет определить можно ли безболезнено удалять.

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

  • Administrator
  • *****
  • Сообщений: 13898
  • Карма: 1790
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Объединение слоев
« Ответ #8 : 03-09-2020, 16:00:05 »
Пока что буду перебором всех объектов решить эту задачу
Перебирать где будешь?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 106
  • Карма: 3
Re: Объединение слоев
« Ответ #9 : 03-09-2020, 16:35:58 »
Перебирать где будешь?
В BlockTable.

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

  • Administrator
  • *****
  • Сообщений: 13898
  • Карма: 1790
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Объединение слоев
« Ответ #10 : 03-09-2020, 16:40:16 »
В BlockTable.
В BlockTable нет примитивов и соответственно нет слоёв. Наверное ты имеешь в виду все BlockTableRecord в BlockTable, как предложил  avc.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 106
  • Карма: 3
Re: Объединение слоев
« Ответ #11 : 03-09-2020, 16:48:59 »
В BlockTable нет примитивов и соответственно нет слоёв. Наверное ты имеешь в виду все BlockTableRecord в BlockTable, как предложил  avc.
Ага, это и имел в виду.