1. ВНИМАНИЕ! В течении пары дней +- будет переезд форума на более защищённый сервер. Возможны периодические перебои в работе.

Каждый слой dwg в отдельный файл

Тема в разделе "Autodesk", создана пользователем toshiba, 24 май 2011.

  1. toshiba

    toshiba Форумчанин

    Столкнулся с проблемой.
    Есть файл DWG (генплан нас.пункта) в котором 212 слоев.
    Компьютер у меня не сильно мощный, поэтому сам файл открывается с дикими тормозами.
    Кроме того необходимо преобразовать некоторые слои в dxf для импорта в другую программу.

    Собственно вопрос существует ли способ автоматически каждый слой файла пересохранить в отдельный файл (например по названию слоя)?

    Заранее спасибо за советы.
     
  2. Qvinto

    Qvinto Форумчанин

    212 слоев? Многовато. А может там много лишних? Очистить файл командой _purge не пробовали?
    Прямых инструментов для сохранения каждого слоя в отдельный файл не нашёл даже в Тулпаке. Хотя, оптимизировать процесс в ToolPac можно, конечно. Но, нужно просмотреть файл внимательно, не ссылаются ли описания блоков на некоторые слои. А то получатся пустые файлы с пустым слоем.
     
  3. В.Шуфотинский

    В.Шуфотинский Модератор Команда форума

    Подскажите, пожалуйста, как в «AutoCAD 2004» экспортировать 1 слой СО ВСЕМ СОДЕРЖИМЫМ В НЁМ. Остальные слои не должны экспортироваться.
    Просьба, вариант с удалением всех слоёв, кроме нужного, не предлагать.
     
  4. Qvinto

    Qvinto Форумчанин

    Можно воспользоваться командой проход по слоям, из панели Слои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
     
  5. X-Y-H

    X-Y-H Администратор Команда форума

    Народ а что SelSim или же обычные фильтры уже не катят?
     
  6. Qvinto

    Qvinto Форумчанин

    Не катят. Никак. Примитивов на слое может быть много и разных и в разных местах. Попробуй, отфильтруй их всех!
     
  7. X-Y-H

    X-Y-H Администратор Команда форума

    Через SELSim погорячился но вот через быстрый выбор (фильтр в свойствах)
     

    Вложения:

  8. Qvinto

    Qvinto Форумчанин

    Забыл указать еще один вариантов, изолировать слой, но, это из той же панели СлоиII.
     
  9. X-Y-H

    X-Y-H Администратор Команда форума

    Присоединюсь, к вопросу - перерыл весь рунет, ответа не нашел.
     
  10. Alexandr-GR

    Alexandr-GR Форумчанин

    Может что-то типа:
    Код:
    (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)
      )
    )
     
    Sergey Oleynikov, flareon и X-Y-H нравится это.
  11. X-Y-H

    X-Y-H Администратор Команда форума

    Спасибо! Проверил на 5 оставшихся слоях, все работает.
     
  12. Alexandr-GR

    Alexandr-GR Форумчанин

    Подправил код.
    Код:
    (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
      )
    )
     
    Sergey Oleynikov, Denver-m, pashuha и 2 другим нравится это.
  13. --- Сообщения объединены, 18 май 2015, Оригинальное время сообщения: 18 май 2015 ---
    Здравствуйте а на основе этого кода можно сделать код чтоб сохранялись листы на отдельных файлах? тоесть есть файл dwg c 20 листами, мне надо разбить этот файл на 20 файлов (1 лист один файл)?
     
  14. Qvinto

    Qvinto Форумчанин

    ToolPac вам в помощь.
    LyoSavFil
     
  15. Да я бы им и воспользовался но он платный для 2014 автокада
     
  16. Qvinto

    Qvinto Форумчанин

    intelligent, а бесплатный только сыр в мышеловке. Не знали?
    --- Сообщения объединены, 18 май 2015, Оригинальное время сообщения: 18 май 2015 ---
    Ладно. Держи бесплатный менеджер листов. Твоя команда
    https://apps.exchange.autodesk.com/ACD/ru/Detail/Index?id=appstore.exchange.autodesk.com:layoutmanager_windows32and64:en
     

    Вложения:

    intelligent нравится это.
  17. Очень тебе благодарен!!! Проверил все как мне и надо было!!!!!
     
  18. Alexandr-GR

    Alexandr-GR Форумчанин

    Подправил код. Не работал при наличии "пустых" слоев
    Код:
    (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)
    )
     

    Вложения:

    • exp-layer.lsp
      Размер файла:
      833 байт
      Просмотров:
      79
    Vict0r, oksliz, chehoff и 6 другим нравится это.
  19. oksliz

    oksliz Форумчанин

    Добрый день!
    Подскажите пожалуйста, а как это
    поправить чтобы на выходе получился DXF?
     
  20. Alexandr-GR

    Alexandr-GR Форумчанин

    что-то типа:
    Код:
    (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 , но примитивы исчезнут в исходном чертеже, надо будет либо закрыть без сохранения, либо вернутся до выполнения команды
     

    Вложения:

    • exp-layer.lsp
      Размер файла:
      656 байт
      Просмотров:
      35
    Vict0r, oksliz, TulGeo и 2 другим нравится это.
  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление
  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление