Добро пожаловать!

Войдите или зарегистрируйтесь сейчас!

Войти

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

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

  1. toshiba

    Форумчанин

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

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

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

    Форумчанин

    Регистрация:
    10 дек 2008
    Сообщения:
    5.681
    Симпатии:
    4.223
    Адрес:
    Украина, г.Калуш
    212 слоев? Многовато. А может там много лишних? Очистить файл командой _purge не пробовали?
    Прямых инструментов для сохранения каждого слоя в отдельный файл не нашёл даже в Тулпаке. Хотя, оптимизировать процесс в ToolPac можно, конечно. Но, нужно просмотреть файл внимательно, не ссылаются ли описания блоков на некоторые слои. А то получатся пустые файлы с пустым слоем.
     
    #2
  3. В.Шуфотинский

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

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

    Форумчанин

    Регистрация:
    10 дек 2008
    Сообщения:
    5.681
    Симпатии:
    4.223
    Адрес:
    Украина, г.Калуш
    Можно воспользоваться командой проход по слоям, из панели Слои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
     
    #4
  5. X-Y-H

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

    Регистрация:
    18 май 2007
    Сообщения:
    21.791
    Симпатии:
    7.068
    Адрес:
    Россия
    Народ а что SelSim или же обычные фильтры уже не катят?
     
    #5
  6. Qvinto

    Форумчанин

    Регистрация:
    10 дек 2008
    Сообщения:
    5.681
    Симпатии:
    4.223
    Адрес:
    Украина, г.Калуш
    Не катят. Никак. Примитивов на слое может быть много и разных и в разных местах. Попробуй, отфильтруй их всех!
     
    #6
  7. X-Y-H

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

    Регистрация:
    18 май 2007
    Сообщения:
    21.791
    Симпатии:
    7.068
    Адрес:
    Россия
    Через SELSim погорячился но вот через быстрый выбор (фильтр в свойствах)
     

    Вложения:

    #7
  8. Qvinto

    Форумчанин

    Регистрация:
    10 дек 2008
    Сообщения:
    5.681
    Симпатии:
    4.223
    Адрес:
    Украина, г.Калуш
    Забыл указать еще один вариантов, изолировать слой, но, это из той же панели СлоиII.
     
    #8
  9. X-Y-H

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

    Регистрация:
    18 май 2007
    Сообщения:
    21.791
    Симпатии:
    7.068
    Адрес:
    Россия
    Присоединюсь, к вопросу - перерыл весь рунет, ответа не нашел.
     
    #9
  10. Alexandr-GR

    Форумчанин

    Регистрация:
    9 июн 2011
    Сообщения:
    1.192
    Симпатии:
    945
    Адрес:
    Новосибирск
    Может что-то типа:
    Код:
    (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)
      )
    )
     
    #10
    Sergey Oleynikov, flareon и X-Y-H нравится это.
  11. X-Y-H

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

    Регистрация:
    18 май 2007
    Сообщения:
    21.791
    Симпатии:
    7.068
    Адрес:
    Россия
    Спасибо! Проверил на 5 оставшихся слоях, все работает.
     
    #11
  12. Alexandr-GR

    Форумчанин

    Регистрация:
    9 июн 2011
    Сообщения:
    1.192
    Симпатии:
    945
    Адрес:
    Новосибирск
    Подправил код.
    Код:
    (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
      )
    )
     
    #12
    Sergey Oleynikov, Denver-m, pashuha и 2 другим нравится это.
  13. intelligent

    Регистрация:
    18 май 2015
    Сообщения:
    3
    Симпатии:
    0
    --- Сообщения объединены, 18 май 2015, Оригинальное время сообщения: 18 май 2015 ---
    Здравствуйте а на основе этого кода можно сделать код чтоб сохранялись листы на отдельных файлах? тоесть есть файл dwg c 20 листами, мне надо разбить этот файл на 20 файлов (1 лист один файл)?
     
    #13
  14. Qvinto

    Форумчанин

    Регистрация:
    10 дек 2008
    Сообщения:
    5.681
    Симпатии:
    4.223
    Адрес:
    Украина, г.Калуш
    ToolPac вам в помощь.
    LyoSavFil
     
    #14
  15. intelligent

    Регистрация:
    18 май 2015
    Сообщения:
    3
    Симпатии:
    0
    Да я бы им и воспользовался но он платный для 2014 автокада
     
    #15
  16. Qvinto

    Форумчанин

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

    Вложения:

    #16
    intelligent нравится это.
  17. intelligent

    Регистрация:
    18 май 2015
    Сообщения:
    3
    Симпатии:
    0
    Очень тебе благодарен!!! Проверил все как мне и надо было!!!!!
     
    #17
  18. Alexandr-GR

    Форумчанин

    Регистрация:
    9 июн 2011
    Сообщения:
    1.192
    Симпатии:
    945
    Адрес:
    Новосибирск
    Подправил код. Не работал при наличии "пустых" слоев
    Код:
    (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 байт
      Просмотров:
      76
    #18
    Vict0r, oksliz, chehoff и 6 другим нравится это.
  19. oksliz

    Форумчанин

    Регистрация:
    25 июл 2015
    Сообщения:
    28
    Симпатии:
    4
    Адрес:
    г. Находка Приморский край
    Добрый день!
    Подскажите пожалуйста, а как это
    поправить чтобы на выходе получился DXF?
     
    #19
  20. Alexandr-GR

    Форумчанин

    Регистрация:
    9 июн 2011
    Сообщения:
    1.192
    Симпатии:
    945
    Адрес:
    Новосибирск
    что-то типа:
    Код:
    (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 байт
      Просмотров:
      30
    #20
    Vict0r, oksliz, TulGeo и 2 другим нравится это.

Поделиться этой страницей

  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление