Столкнулся с проблемой. Есть файл DWG (генплан нас.пункта) в котором 212 слоев. Компьютер у меня не сильно мощный, поэтому сам файл открывается с дикими тормозами. Кроме того необходимо преобразовать некоторые слои в dxf для импорта в другую программу. Собственно вопрос существует ли способ автоматически каждый слой файла пересохранить в отдельный файл (например по названию слоя)? Заранее спасибо за советы.
212 слоев? Многовато. А может там много лишних? Очистить файл командой _purge не пробовали? Прямых инструментов для сохранения каждого слоя в отдельный файл не нашёл даже в Тулпаке. Хотя, оптимизировать процесс в ToolPac можно, конечно. Но, нужно просмотреть файл внимательно, не ссылаются ли описания блоков на некоторые слои. А то получатся пустые файлы с пустым слоем.
Подскажите, пожалуйста, как в «AutoCAD 2004» экспортировать 1 слой СО ВСЕМ СОДЕРЖИМЫМ В НЁМ. Остальные слои не должны экспортироваться. Просьба, вариант с удалением всех слоёв, кроме нужного, не предлагать.
Можно воспользоваться командой проход по слоям, из панели СлоиII. Она отключает все слои, оставляя включеным слой, который мы укажем. Затем, правда, надо будет выбрать все примитивы слоя, и скопировать их в новый чертеж. Если это Автокад 2004, то эту команду надо будет искать в Експрессах. Но, я бы воспользовался лиспом, который выбирает все примитивы слоя, выбрав один примитив на нужном нам слое. Работает во всех версиях Автокада. Код: ;******************* sel_lay.lsp ***************************************** ; Выбор всех объектов на слое выбранного объекта. ; Автор Владимир Громов. ; (defun C:SEL_LAY ( / echo sen ent lay ss len da) (setq echo (getvar "CMDECHO")) (setvar "CMDECHO" 0) (princ "\n Определение слоя по объекту.") (setq sen (entsel " Выберите нужный объект: ")) (if sen (progn (setq ent (entget (car sen))) (setq lay (cdr (assoc 8 ent))) (setvar "CLAYER" lay) (setq ss (ssget "_X" (list (cons 8 lay)))) (setq len (sslength ss)) (sssetfirst nil ss) (initget 6 "Да Нет Yes No _ Yes No") (setq da (getkword "\n Отключить остальные слои? [Да/Нет] <Да>: ")) (if (or (= da "Yes") (= da nil)) (progn (vl-cmdf "_-LAYER" "_OF" "*" "_Y" "") (vl-cmdf "_-LAYER" "_ON" LAY "") )); if da (sssetfirst ss ss) (princ "\n Слой: ") (princ lay) (princ " Количество объектов = ") (princ len) ) (princ "\n Объект не выбран!") ); if sen (setvar "cmdecho" echo) (princ) ) ;;;Возможный макрос для кнопки или пункта меню: ;;;^C^C^P(if (not C:SEL_LAY) (load "sel_lay")) SEL_LAY
Не катят. Никак. Примитивов на слое может быть много и разных и в разных местах. Попробуй, отфильтруй их всех!
Может что-то типа: Код: (DEFUN C:exp-layer (/ get-all-layer) (defun get-all-layer (/ CUR_LAYER LIST_OF_LAYER) (setq list_of_layer (list (cdr (assoc 2 (tblnext "Layer" t))))) (while (setq cur_layer (tblnext "Layer")) (setq list_of_layer (append list_of_layer (list (cdr (assoc 2 cur_layer))) ) ) ) ;_ end of while ) (MAPCAR (FUNCTION (LAMBDA (x / sel) (setq sel (ssget "_X" (list (cons 8 x)) ) ) (vl-cmdf "_wblock" (strcat (getvar 'DWGPREFIX) x) "=" "" '(0 0 0) sel "" ) ) ) (get-all-layer) ) )
Подправил код. Код: (DEFUN C:exp-layer (/ get-all-layer adoc) (vl-load-com) (setq adoc (vla-get-activedocument (vlax-get-acad-object))) (defun get-all-layer (/ CUR_LAYER LIST_OF_LAYER) (setq list_of_layer (list (cdr (assoc 2 (tblnext "Layer" t))))) (while (setq cur_layer (tblnext "Layer")) (setq list_of_layer (append list_of_layer (list (cdr (assoc 2 cur_layer))) ) ) ) ;_ end of while ) ((LAMBDA (ls a) (MAPCAR (FUNCTION (LAMBDA (x / sel) (ssget "_X" (list (cons 8 x)) ) (setq sel (vla-get-ActiveSelectionSet a ) ) (vla-wblock a (strcat (getvar 'DWGPREFIX) x ".dwg") sel) ) ) ls ) ) (get-all-layer) adoc ) )
--- Сообщения объединены, 18 май 2015, Оригинальное время сообщения: 18 май 2015 --- Здравствуйте а на основе этого кода можно сделать код чтоб сохранялись листы на отдельных файлах? тоесть есть файл dwg c 20 листами, мне надо разбить этот файл на 20 файлов (1 лист один файл)?
intelligent, а бесплатный только сыр в мышеловке. Не знали? --- Сообщения объединены, 18 май 2015, Оригинальное время сообщения: 18 май 2015 --- Ладно. Держи бесплатный менеджер листов. Твоя команда https://apps.exchange.autodesk.com/ACD/ru/Detail/Index?id=appstore.exchange.autodesk.com:layoutmanager_windows32and64:en
Подправил код. Не работал при наличии "пустых" слоев Код: (DEFUN C:exp-layer (/ get-all-layer adoc) (vl-load-com) (setq adoc (vla-get-activedocument (vlax-get-acad-object))) (defun get-all-layer (/ CUR_LAYER LIST_OF_LAYER) (setq list_of_layer (list (cdr (assoc 2 (tblnext "Layer" t))))) (while (setq cur_layer (tblnext "Layer")) (setq list_of_layer (append list_of_layer (list (cdr (assoc 2 cur_layer))) ) ) ) ;_ end of while ) ((LAMBDA (ls a) (MAPCAR (FUNCTION (LAMBDA (x / sel) (if (ssget "_X" (list (cons 8 x)) ) (progn (setq sel (vla-get-ActiveSelectionSet a ) ) (vla-wblock a (strcat (getvar 'DWGPREFIX) x ".dwg") sel) ) ) ) ) ls ) ) (get-all-layer) adoc ) (princ) )
что-то типа: Код: (DEFUN C:exp-layer (/ get-all-layer) (vl-load-com) (defun get-all-layer (/ CUR_LAYER LIST_OF_LAYER) (setq list_of_layer (list (cdr (assoc 2 (tblnext "Layer" t))))) (while (setq cur_layer (tblnext "Layer")) (setq list_of_layer (append list_of_layer (list (cdr (assoc 2 cur_layer))) ) ) ) ;_ end of while ) ((LAMBDA (ls) (MAPCAR (FUNCTION (LAMBDA (x / sel) (if (setq sel (ssget "_X" (list (cons 8 x)) )) (vl-cmdf "_-WBLOCK" (strcat (getvar 'DWGPREFIX) x ".dxf") "" "" "0,0,0" sel "") ) ) ) ls ) ) (get-all-layer) ) (princ) ) выгрузит все слои в отдельные файлы имяслоя.dxf , но примитивы исчезнут в исходном чертеже, надо будет либо закрыть без сохранения, либо вернутся до выполнения команды