| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
30.09.2011, 12:46 | #1 | |
Массовое переименование слоев в группе файлов
конструктор
Волгоград
Регистрация: 23.03.2009
Сообщений: 120
|
||
Просмотров: 11843
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787
|
Я не анализировал и не проверял код, вопрос немного "в воздух": а что будет, если слой с "новым" именем уже есть в файле?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
конструктор Регистрация: 23.03.2009
Волгоград
Сообщений: 120
|
Собрал чертежи в особую папку. Открыл новый (пустой) чертеж. Подгрузил программу. Разумеется заранее вбил нужное переименование слоев. Фрагмент внутри функции "cond" выглядит так:
Код:
Стали такие: "А_Выноски, А_Двери, А_Двери_1, А_Двери_2, А_Двери_3, А_Двери_4, А_Двери_5, А_Двери_6". При совпадении слоев программа добавляет, в конце, числовой индекс.
__________________
Мой сайт ingnmb.wixsite.com/acad-s |
|||
|
||||
конструктор Регистрация: 23.03.2009
Волгоград
Сообщений: 120
|
Цитата:
Технология переименования слоев проста. 1. Копипастим код из поста в редактор "Visual Lisp" как есть и кнопочкой "загрузить активное окно редактора" загружаем в чертеж (пустой) 2. Переходим в окно Автокада и в командной строке набираем команду "sobla". Выбираем папку с файлами у которых будут изменятся слои. 3. Нажав F2 из текстового окна копипастим все используемые слои сначала в какой-нибудь текстовый редактор (например AkeIPad) и переводим весь список слоев в прописные. А от туда копируем в функцию COND (там где много #). 4. Вставляем перед каждым слоем - ((= (strcase laynamp) " а после - ")(setq laymannw "новое имя")). Понятно, что "новое имя" (можно писать одинаковые - программа доставит в конце нового имени слоя индексы) это назначенное новое имя для слоя записанного прописными. 5. Когда работа будет пройдена и убран "мусор", опять кнопочкой "загрузить активное окно редактора" загружаем код в чертеж. 6. Теперь в командной строке Автокада набираем "renamlay". Выбирам опять папку с файлами чертежей, где будут менятся слои. После нескольких секунд все файлы будут изменены. Конечно, для тех, кто хотел бы меньше заморочек можно усовершенствовать программу. Код сразу загружать в чертеж, а имена перезначаемых слоев записать в текстовый файл разделив старое и новое название слоев каким-нибудь малоупотребимым символом (например "#"). Но составлять свой список (возможно и не маленький) все равно придется пользователю. Такой вариант кода пишется и может быть, если время позволит, будет скоро выложен.
__________________
Мой сайт ingnmb.wixsite.com/acad-s |
|||
|
||||
пищевая технология Регистрация: 02.06.2009
Киев
Сообщений: 283
|
Вопросы: почему весь текст нужно выполнять прописными (ну не силен я в лиспе , я пользователь ваших идей. И если разобраться, то ради таких как я вы и создаете все это)? Можно ли это автоматизировать средствами данной программы? Плюс к этому хотелось бы диалог старое имя-новое имя упростить. Я имею в виду можно ли как то функциям ((= (strcase laynamp) и ")(setq laymannw "новое имя")) дать более простые псевдоимена или что то такое. Спасибо!!!
|
|||
|
||||
конструктор Регистрация: 23.03.2009
Волгоград
Сообщений: 120
|
Подкорректировал програмку. Теперь вся трасляция слоев записывается в текстовый файл с именем "lay_trans.txt". Этот файл создается (копируется или переносится) в папке из которой будут меняться слои в чертежах (чтобы дважды не указывать положение). Образец прилагается. Каждая строка для каждого переименования, по типу "Имя_Старого_Слоя#Имя_Нового_Слоя". Имена старых слоев можно указывать прописными или строчными буквами. Новых - так как они должны быть записаны. В файле программы менять ничего не надо.
Технология почти как и предыдущая.
__________________
Мой сайт ingnmb.wixsite.com/acad-s |
|||
|
||||
конструктор Регистрация: 23.03.2009
Волгоград
Сообщений: 120
|
При выполнении программы, когда назначается новое имя слоя совпадающие с уже существующим, такому новому слою добавляется порядковый индекс в конце. В общем - количество слоев до и после переименования должно остатся одинаковым. Слить примитивы в один слой из других слоев средствами LISPа (при обработке нескольких файлов) не получается. При этой технологии открытия файлов, кажется (и не пробывал) не поддерживается "PurgeAll" метод, позволяющий удалить неиспользуемые объекты.
__________________
Мой сайт ingnmb.wixsite.com/acad-s |
|||
|
||||
Delineante Регистрация: 26.12.2006
Ростов-на-Дону/Madrid
Сообщений: 396
|
например
у меня есть 10 чертежей. в каждом есть только один слой ААА. Я хочу, чтобы он назывался в каждом чертеже ВВВ. Но в результате получаю чертеж1 - слой ВВВ чертеж2 - слой ВВВ_1 чертеж3 - слой ВВВ_2 чертеж4 - слой ВВВ_3 и т.д. |
|||
|
||||
конструктор Регистрация: 23.03.2009
Волгоград
Сообщений: 120
|
Да, мой косяк. Подправил.
__________________
Мой сайт ingnmb.wixsite.com/acad-s |
|||
|
||||
Регистрация: 29.11.2011
Сообщений: 5
|
Помогите, не получается переименовать слои:
--------------------------------------------------------- Команда: (LOAD "C:/Users/MikhailKozlov/Downloads/RenamLay/Rename Layer new.LSP") PROV_SOVPAD_LAYERS Команда: SOBLA 0 Слой1 Слой2 Слой3nil Команда: Команда: RENAMLAY nil Сборка: ACADVER = "18.2s (LMS Tech)" Примерно с тем же результатом пробовал на 2008 и 2011. Помогите код очень нужен, пусть даже с обрезанной пакетностью (работа только с активным документом). Сложно ли дописать этот лисп, чтобы аналогичным способом переименовывать блоки? |
|||
|
||||
Регистрация: 03.09.2009
Сообщений: 5
|
Цитата:
Команда: renamlay ; ошибка: неверный тип аргумента: FILE nil после переноса файла lay_trans.txt в папку, в которой расположены файлы для переименования начал выдавать ошибку: Команда: RENAMLAY ; ошибка: неверный тип аргумента: stringp nil в чем проблема? у меня задача добавить перед всеми названиями слоев, которые есть в чертежах (в папке) нижнее подчеркивание. как можно малой кровью это сделать чтобы не перелопачивать все чертежи и не переименовывать имеющиеся в них слои? Последний раз редактировалось Al_ufa, 16.12.2011 в 15:58. |
|||
|
||||
конструктор Регистрация: 23.03.2009
Волгоград
Сообщений: 120
|
В программе была (ошибочно) заложена зависимость по способу формирования списка трансляции. Программа работала, если в конце списка была пустая строка. Добавил в код такой фрагмент (if (not str_lay)(setq str_lay "")) и теперь программа принимает также списки без последней пустой строки. Обновленная программа и образец списка переименования прикреплены.
ЗЫ. Изменяемые файлы не должны быть загружены в Автокаде или других программах!
__________________
Мой сайт ingnmb.wixsite.com/acad-s Последний раз редактировалось nik_mb, 17.12.2011 в 18:16. |
|||
|
||||
Регистрация: 03.09.2009
Сообщений: 5
|
Цитата:
но как говорится чем дальше в лес, тем толще партизаны... не могли бы вы сделать универсальный универсальный инструмент чтобы в названия всех слоев, которые встречаются в файле добавлялось нижнее подчеркивание? (вызвано это тем, что в различных файлах одни и те же слои могут называться по-разному) |
|||
|
||||
конструктор Регистрация: 23.03.2009
Волгоград
Сообщений: 120
|
Цитата:
Команда на выполнение: ADDRENAMLAY. Вроде работает, так что можно использовать "как есть".
__________________
Мой сайт ingnmb.wixsite.com/acad-s |
|||
|
Опции темы | Поиск в этой теме |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Групповое переименование слоев (rename layers) | ElectroBOG | AutoCAD | 5 | 27.09.2023 07:28 |
1000 слоев. Нормально или плохо? И другие аспекты правильного черчения в автокаде | Vova | AutoCAD | 96 | 07.09.2019 16:26 |
Для чего нужны фильтры слоев?Как ими пользоваться? | Aysulu | AutoCAD | 43 | 17.04.2019 10:59 |
Переименование стандартных слоев в AutoCAD Architecture 2008 | Кристи | Вертикальные решения на базе AutoCAD | 2 | 14.10.2008 15:22 |
Переименование файлов | Солидворкер | Разное | 21 | 28.03.2008 10:30 |