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

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

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

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

Имеется чертёж с огромным наследством от бывших XREF блоков - куча одинаковых слоёв с разными названиями. Например Wall, Plan1$0$Wall, Plan2$0$Wall и т.п. Привести все эти слои к одному Wall для не блоков вроде несложно. А есть ли возможность привести к одному теже слои, содержащиеся в блоках? Разных блоков много, все нужные и удаляться не могут.
Просмотров: 6790
 
Непрочитано 19.01.2023, 14:21
#21
Dinoxromniy


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


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

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

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


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


Цитата:
Сообщение от 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,780


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


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


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,295
Отправить сообщение для doctorraz с помощью Skype™


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


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


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


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


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
Сообщений: 126


Цитата:
Сообщение от 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,295
Отправить сообщение для doctorraz с помощью Skype™


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


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


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

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

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


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


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

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

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


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


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

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


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


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


Кулик Алексей 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