Объединение слоёв для блоков
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Объединение слоёв для блоков

Объединение слоёв для блоков

Ответ
Поиск в этой теме
Непрочитано 08.12.2011, 11:14 #1
Объединение слоёв для блоков
Borikv
 
Регистрация: 24.10.2007
Сообщений: 108

Имеется чертёж с огромным наследством от бывших XREF блоков - куча одинаковых слоёв с разными названиями. Например Wall, Plan1$0$Wall, Plan2$0$Wall и т.п. Привести все эти слои к одному Wall для не блоков вроде несложно. А есть ли возможность привести к одному теже слои, содержащиеся в блоках? Разных блоков много, все нужные и удаляться не могут.
Просмотров: 7094
 
Непрочитано 08.12.2011, 11:31
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404


laywalk?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 08.12.2011, 11:47
#3
Borikv


 
Регистрация: 24.10.2007
Сообщений: 108


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
laywalk?
Так это же вроде только для просмотра слоёв?
Borikv вне форума  
 
Непрочитано 08.12.2011, 12:30
#4
Хмурый


 
Регистрация: 29.10.2004
СПб
Сообщений: 16,379


_laymrg
Хмурый вне форума  
 
Автор темы   Непрочитано 08.12.2011, 12:52
#5
Borikv


 
Регистрация: 24.10.2007
Сообщений: 108


Цитата:
Сообщение от Хмурый Посмотреть сообщение
_laymrg
А как это для блоков без их разборки?
Borikv вне форума  
 
Непрочитано 08.12.2011, 12:55
#6
Хмурый


 
Регистрация: 29.10.2004
СПб
Сообщений: 16,379


слой по имени называй
Цитата:
_laymrg
Select object on layer to merge or [Name]: _n
появится оконце...
Миниатюры
Нажмите на изображение для увеличения
Название: screenshot223.jpg
Просмотров: 221
Размер:	15.9 Кб
ID:	71043  
Хмурый вне форума  
 
Автор темы   Непрочитано 08.12.2011, 13:44
#7
Borikv


 
Регистрация: 24.10.2007
Сообщений: 108


Интересно, что в одних чертежах laymrg срабатывает, а в других нет. Отчего это зависит?
Borikv вне форума  
 
Непрочитано 08.12.2011, 13:54
#8
Хмурый


 
Регистрация: 29.10.2004
СПб
Сообщений: 16,379


выложи чертёж, в котором не срабатывает
Хмурый вне форума  
 
Автор темы   Непрочитано 08.12.2011, 14:55
#9
Borikv


 
Регистрация: 24.10.2007
Сообщений: 108


Со срабатываним немного разобрался. Тут появляется другой вопрос: -Как сделать выбор удаляемых слоёв более удобным? Ползти в стандартном окошке по сотне строк в поиске нужных довольно муторно, а какие-то фильтры или перегруппировки в этом окошке вроде не предусмотрены.
Borikv вне форума  
 
Непрочитано 08.12.2011, 16:37
#10
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от Borikv Посмотреть сообщение
Как сделать выбор удаляемых слоёв более удобным?
Нарисуй в сторонке отрезки, и назначь им удаляемые слои. Потом выбирай не по имени, а объекты
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 08.12.2011, 16:42
#11
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Цитата:
Сообщение от VVA Посмотреть сообщение
Нарисуй в сторонке отрезки, и назначь им удаляемые слои. Потом выбирай не по имени, а объекты
Но сначала Layiso чтобы убедиться, что ничего нужного в удаляемые слои не попало
Vova вне форума  
 
Автор темы   Непрочитано 08.12.2011, 16:54
#12
Borikv


 
Регистрация: 24.10.2007
Сообщений: 108


Цитата:
Сообщение от VVA Посмотреть сообщение
Нарисуй в сторонке отрезки, и назначь им удаляемые слои. Потом выбирай не по имени, а объекты
Во многих случаях несомненно поможет. Но в моём 469 слоёв ........
Borikv вне форума  
 
Непрочитано 08.12.2011, 17:39
#13
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404


Тогда уж искать тему "НОрмализация блоков"
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 08.12.2011, 19:34
1 | #14
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от Borikv Посмотреть сообщение
Например Wall, Plan1$0$Wall, Plan2$0$Wall и т.п. Привести все эти слои к одному Wall для не блоков вроде несложно. А есть ли возможность привести к одному теже слои, содержащиеся в блоках?

Цитата:
Сообщение от Borikv Посмотреть сообщение
Но в моём 469 слоёв ........
_LAYTRANS (Транслятор слоев) тебе в руки

Есть еще это Массовое переименование слоев в группе файлов
Миниатюры
Нажмите на изображение для увеличения
Название: laytr.png
Просмотров: 224
Размер:	48.6 Кб
ID:	71084  
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 19.01.2023, 10:36
#15
koui


 
Регистрация: 24.01.2017
Сообщений: 125


Цитата:
Сообщение от Borikv Посмотреть сообщение
Во многих случаях несомненно поможет. Но в моём 469 слоёв ........
так как решить задачу с учетом вот этого? у меня 22 блока XREF1...22, в каждом 34 слоя, то есть, 748 слоев. Слои отличаются первыми 5-6 символами, остальное всё одинаковое. Как объединить эти слои, что о сталось 34?

----- добавлено через ~2 мин. -----
Цитата:
Сообщение от Хмурый Посмотреть сообщение
_laymrg
700+ кликов - дело неблагодарное

----- добавлено через ~3 мин. -----
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Тогда уж искать тему "НОрмализация блоков"
https://forum.dwg.ru/showthread.php?t=21492 - вот эта тема? ничего полезного не нашёл (((

----- добавлено через ~4 мин. -----
Цитата:
Сообщение от VVA Посмотреть сообщение
_LAYTRANS (Транслятор слоев) тебе в руки

Есть еще это Массовое переименование слоев в группе файлов
опять же, не для 700+ слоев, которые различаются "префиксами", когда нужно сохранить "суффикс"
koui вне форума  
 
Непрочитано 19.01.2023, 10:51
#16
AMDen

Инженер-проектировщик
 
Регистрация: 07.07.2016
Санкт-Петербург
Сообщений: 759


https://forum.dwg.ru/showthread.php?t=66355&page=15
AMDen вне форума  
 
Непрочитано 19.01.2023, 11:06
#17
koui


 
Регистрация: 24.01.2017
Сообщений: 125


Цитата:
Сообщение от AMDen Посмотреть сообщение
отличная вещь, уже давно пользуюсь, и именно в моём файле я использовал "BGBLXCLIPEXP - взорвать подрезанный блок". но дальше-то что делать? или что-то до взрыва нужно было сделать? никак не допру.
koui вне форума  
 
Непрочитано 19.01.2023, 11:10
#18
AMDen

Инженер-проектировщик
 
Регистрация: 07.07.2016
Санкт-Петербург
Сообщений: 759


BGBLFIX - Нормализация блоков (цвет, слой, взрываемость и т.п.)
AMDen вне форума  
 
Непрочитано 19.01.2023, 11:17
#19
koui


 
Регистрация: 24.01.2017
Сообщений: 125


Цитата:
Сообщение от AMDen Посмотреть сообщение
BGBLFIX - Нормализация блоков (цвет, слой, взрываемость и т.п.)
не могу найти. у меня должно остаться 34 слоя, по крайней мере, очень желательно, что б осталось 34. это - планы, которые иногда обновляются. и в них множество "вредной" информации. но есть и много полезной. часть приходится удалять слоями, часть через поиск (например, слой с экспликацией помещений совпадает с слоем с экспликацией полов, первое мне нужно, а второе - нет).

вообще, если я пытаюсь что-то сделать этой командой со всеми слоями, то окошко закрывается "Команда: BGBLFIX Настройка переменной AutoCAD отвергнута: "CMDECHO" nil" что-то делать частями - можно, если этих частей будет мало.
koui вне форума  
 
Непрочитано 19.01.2023, 11:31
#20
AMDen

Инженер-проектировщик
 
Регистрация: 07.07.2016
Санкт-Петербург
Сообщений: 759


Может это поможет?
http://www.lee-mac.com/pslay.html
AMDen вне форума  
 
Непрочитано 19.01.2023, 14:21
#21
Dinoxromniy


 
Регистрация: 14.09.2020
Санкт-Петербург
Сообщений: 395


Цитата:
Сообщение от koui Посмотреть сообщение
700+ кликов - дело неблагодарное
Подумал, что достаточно просто можно переименовать слои через экспорт названий в эксель, вроде как логика работает, но столкнулся со следующей сложностью:

если запустить команду rename через минус:
-ren LA
то Акад ждет ввода имени слоя, и все известные мне знаки энтера (типо пробела, точки с запятой или символ(10) из экселя) он не воспринимает как завершение ввода.

Штудировать книгу Света "Язык макрокоманд" ни времени, ни желания нет. Коллеги, подскажите, можно ли что-то подставить в текстовую строку, чтобы акад воспринял этот символ в данном случае как энтер?
Dinoxromniy вне форума  
 
Непрочитано 19.01.2023, 16:38
#22
koui


 
Регистрация: 24.01.2017
Сообщений: 125


Цитата:
Сообщение от AMDen Посмотреть сообщение
Может это поможет?
http://www.lee-mac.com/pslay.html
пробую. немного странная логика лиспа - он переименовывает слои, но нужно выбирать объекты. но! при это маски в стиле #?* не работают. странно, очень.

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

Последний раз редактировалось koui, 19.01.2023 в 16:56.
koui вне форума  
 
Непрочитано 19.01.2023, 16:52
#23
engngr

сети
 
Регистрация: 03.11.2008
Московия*
Сообщений: 5,916


Цитата:
Сообщение от koui Посмотреть сообщение
700+ кликов - дело неблагодарное
В самом менеджере слоев сделать фильтр, и объединять выбранные слои в один?
engngr вне форума  
 
Непрочитано 19.01.2023, 19:01
#24
Dinoxromniy


 
Регистрация: 14.09.2020
Санкт-Петербург
Сообщений: 395


koui, можете попробовать жутко колхозное, но вроде бы рабочее решение.
Суть в получение двух готовых сформированных команд, которые нужно просто вставить в командную строку.
У меня вся эта страсть сработала, но акад должен быть английским. Копировать и вставлять нужно очень четко, именно теми сочетаниями, которые указаны ниже (это не всегда принципиально, но иногда - важно не упустить ни одного энтера).
Для этого:
1. Открываете менеджер слоев по Layer, выделяете все слои ctrl+a , копируете ctrl+c
2. Вставляете в любой пустой лист экселя, копируете из него только столбик с названиями слоев, вставляете этот столбик в приложенную таблицу в красный столбик, все остальные названия слоев, которые для примера - удаляете
3. Отфильтровываете желтый столбик, оставив только непустые ячейки, копируете этот столбик в Word, в Word заменяете через ctrl+h символ кавычки " на пустую строку.
4. То, что получилось в Word, выделяете через ctrl+A, затем ctrl+c и вставляете в командную строку автокада. На этом действии каждый первый экземпляр слоев из вставленного xref, которого еще не было в исходном файле, будет переименован (т.е. из названия будет убран префикс).
5. Убираем фильтр из желтого столбца.
6. Аналогичные действия выполняем с зеленым столбцом - фильтруем непустые, копируем отфильтрованное в Word, в Word заменяем кавычку " на пустую строку, выделяем все через ctrl+A (тут важно выделить все знаки), копируем и вставляем в автокад, идем пить чай, ибо процесс идет не так уж быстро.

В моем файле вся эта страсть успешно устранила все слои без видимой потери примитивов, но проверял я бегло, так что лучше потестируйте.
Вложения
Тип файла: xlsx renlayer.xlsx (61.5 Кб, 11 просмотров)
Dinoxromniy вне форума  
 
Непрочитано 19.01.2023, 21:48
#25
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,297
Отправить сообщение для doctorraz с помощью Skype™


Возможно поможет
https://doctorraz.blogspot.com/2016/...ename.html?m=1
__________________
Мастерская СПДС
doctorraz вне форума  
 
Непрочитано 20.01.2023, 00:38
#26
koui


 
Регистрация: 24.01.2017
Сообщений: 125


Цитата:
Сообщение от engngr Посмотреть сообщение
В самом менеджере слоев сделать фильтр, и объединять выбранные слои в один?
думаю над этим вариантом. скорее всего, в моём случае он самый подходящий. но результат будет промежуточный - не все слои буду объединять.
koui вне форума  
 
Непрочитано 20.01.2023, 10:40
#27
Dinoxromniy


 
Регистрация: 14.09.2020
Санкт-Петербург
Сообщений: 395


koui, переложил логику из файла эскселя в VBA, на моих файлах сработало - одноименные слои из разных вставленных xref объединяются.

Код:
[Выделить все]
Sub lr_xref_mrg()
Dim strLay() As String, i As Long, j As Long, k As Long, P  As Boolean
Dim strCom As String

ReDim strLay(ThisDrawing.Layers.Count - 1)
For i = LBound(strLay) To UBound(strLay)
strLay(i) = ThisDrawing.Layers.Item(i).Name
Next i
For i = LBound(strLay) To UBound(strLay)
P = True
    If strLay(i) Like "*$0$*" Then
        For j = LBound(strLay) To UBound(strLay)
            If LayNameWanted(strLay(i)) = strLay(j) Then
                 P = False
                 Exit For
            End If
        Next j
        If P Then
            ThisDrawing.Layers.Item(strLay(i)).Name = LayNameWanted(strLay(i))
            strLay(i) = LayNameWanted(strLay(i))
        End If
    End If
Next i

For i = LBound(strLay) To UBound(strLay)
    If strLay(i) Like "*$0$*" Then strCom = strCom & "-laymrg" & Chr(10) & "n " & strLay(i) & Chr(10) & Chr(10) & "n " & LayNameWanted(strLay(i)) & Chr(10) & "Y "
 
Next i
ThisDrawing.SendCommand strCom
End Sub
Function LayNameWanted(ByVal strLr As String) As String
    LayNameWanted = strLr
    If strLr Like "*$0$*" Then LayNameWanted = Mid(strLr, InStr(strLr, "$0$") + 3)
End Function
Dinoxromniy вне форума  
 
Непрочитано 23.01.2023, 09:36
#28
koui


 
Регистрация: 24.01.2017
Сообщений: 125


Цитата:
Сообщение от Dinoxromniy Посмотреть сообщение
koui, переложил логику из файла эскселя в VBA, на моих файлах сработало - одноименные слои из разных вставленных xref объединяются.

Код:
[Выделить все]
Sub lr_xref_mrg()
Dim strLay() As String, i As Long, j As Long, k As Long, P  As Boolean
Dim strCom As String

ReDim strLay(ThisDrawing.Layers.Count - 1)
For i = LBound(strLay) To UBound(strLay)
strLay(i) = ThisDrawing.Layers.Item(i).Name
Next i
For i = LBound(strLay) To UBound(strLay)
P = True
    If strLay(i) Like "*$0$*" Then
        For j = LBound(strLay) To UBound(strLay)
            If LayNameWanted(strLay(i)) = strLay(j) Then
                 P = False
                 Exit For
            End If
        Next j
        If P Then
            ThisDrawing.Layers.Item(strLay(i)).Name = LayNameWanted(strLay(i))
            strLay(i) = LayNameWanted(strLay(i))
        End If
    End If
Next i

For i = LBound(strLay) To UBound(strLay)
    If strLay(i) Like "*$0$*" Then strCom = strCom & "-laymrg" & Chr(10) & "n " & strLay(i) & Chr(10) & Chr(10) & "n " & LayNameWanted(strLay(i)) & Chr(10) & "Y "
 
Next i
ThisDrawing.SendCommand strCom
End Sub
Function LayNameWanted(ByVal strLr As String) As String
    LayNameWanted = strLr
    If strLr Like "*$0$*" Then LayNameWanted = Mid(strLr, InStr(strLr, "$0$") + 3)
End Function
пожалуй, это будет самый глупый ответ: мне сисадмин не одобрил установку VBA для АвтоКад)
koui вне форума  
 
Непрочитано 23.01.2023, 09:47
| 1 #29
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,297
Отправить сообщение для doctorraz с помощью Skype™


Цитата:
Сообщение от koui Посмотреть сообщение
сисадмин не одобрил установку VBA для АвтоКад)
Эксель или ворд стоит жэж, там есть vba
__________________
Мастерская СПДС
doctorraz вне форума  
 
Непрочитано 23.01.2023, 09:56
#30
Dinoxromniy


 
Регистрация: 14.09.2020
Санкт-Петербург
Сообщений: 395


Цитата:
Сообщение от koui Посмотреть сообщение
мне сисадмин не одобрил установку VBA
Какой важный курица.

koui, у вас акад русский или английский? Команды для них нужны разные.
Что касается VBA - можно админа попросить временно поставить VBA, можно поставить VBA сисадмину, можно взять работу флешку и сделать это дома, можно приложить на форум перечень ваших слоев и получить взамен текст двух команд, которые нужно просто вставить в комстроку.

Вы то сами заинтересованы не щелкать мышкой 700 раз?
Dinoxromniy вне форума  
 
Непрочитано 23.01.2023, 09:58
#31
koui


 
Регистрация: 24.01.2017
Сообщений: 125


Цитата:
Сообщение от Dinoxromniy Посмотреть сообщение
Какой важный курица.

koui, у вас акад русский или английский? Команды для них нужны разные.
Что касается VBA - можно админа попросить временно поставить VBA, можно поставить VBA сисадмину, можно взять работу флешку и сделать это дома, можно приложить на форум перечень ваших слоев и получить взамен текст двух команд, которые нужно просто вставить в комстроку.

Вы то сами заинтересованы не щелкать мышкой 700 раз?
я - заинтересован. сисадмин заинтересован не делать ни одного лишнего клика мышью.
koui вне форума  
 
Непрочитано 23.01.2023, 09:59
#32
Dinoxromniy


 
Регистрация: 14.09.2020
Санкт-Петербург
Сообщений: 395


Цитата:
Сообщение от koui Посмотреть сообщение
я - заинтересован.
Замечательно. Тогда дайте ответ на вопрос: какой у вас акад - русский или английский?
Dinoxromniy вне форума  
 
Непрочитано 23.01.2023, 11:07
1 | #33
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404


Цитата:
Сообщение от Dinoxromniy Посмотреть сообщение
Команды для них нужны разные.
Не совсем: https://autolisp.ru/2010/03/04/localization/
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 23.01.2023, 11:22
#34
Dinoxromniy


 
Регистрация: 14.09.2020
Санкт-Петербург
Сообщений: 395


Кулик Алексей aka kpblc, благодарю, не знал, что параметры команды тоже успешно локализуются через "_".
Dinoxromniy вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Объединение слоёв для блоков



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Очистка рисунка от "пустых" блоков Makswell Готовые программы 15 26.10.2022 15:24
Можно ли выполнить проверку слабых слоёв основания и подстилающих слоёв в ФОК ПК ПАРУС? МишаИнженер Расчетные программы 10 03.10.2011 14:07
Тормозит команда расчленения набора блоков batmax Программирование 4 31.08.2010 17:37
Подсчет и сортировка блоков на текущем слое. Помогите отредактировать. Kortes Программирование 17 26.03.2010 18:46