LISP tách layout thành từng bản vẽ riêng biệt

Mình thường nhận được một bản vẽ Autocad với nhiều bản vẽ trên nhiều layout khác nhau. Vì quản lý bản vẽ bằng Sheet Set Manager nên mình phải làm công việc sắp xếp lại và tách chúng ra thành những bản vẽ riêng biệt. Mỗi bản vẽ nằm trên một layout.

Có vài ba LISP thực hiện việc này nhưng sau một thời gian sử dụng và kiểm thử mình sử dụng đoạn LISP bên dưới. Các bạn có thể tải về ở file đính kèm.

Sau khi tách thành những bản vẽ riêng biệt thì bạn nên dùng LISP để xóa những đối tượng không nằm trên viewport để làm giảm nhẹ bớt dung lượng file CAD

Công dụng - Tách layout thành những bản vẽ riêng biệt - Bỏ qua layout trắng

    (defun c:layoutstodwgs (/ ct doc exprt fda lays msg pre)
      (vl-load-com)
      (setq    fda   (getvar 'filedia)
        pre   (getstring "\n Enter filename prefix: ")
        exprt (getvar 'expert)
        ct    (getvar 'ctab)
        doc   (vla-get-activedocument (vlax-get-acad-object))
        lays  (vla-get-layouts doc)
        msg   ""
      )
      (setvar 'filedia 0)
      (setvar 'expert 5)
      (setvar 'tilemode 1)
      (command "_ucs" "_w")
      (foreach l (layoutlist)
        (setvar 'ctab l)
        (if    (> (sslength (ssget "_x" (list (cons 410 (getvar 'ctab))))) 1)
          (progn (vla-endundomark doc)
             (vla-startundomark doc)
             (vlax-for x lays
               (and (/= (vla-get-name x) (getvar 'ctab)) (vl-catch-all-apply 'vla-delete (list x)))
             )
             (command "_-wblock" (strcat (getvar 'dwgprefix) pre l) "*")
             (setq msg (strcat (getvar 'dwgprefix) pre l ".dwg created.\n" msg))
             (vla-endundomark doc)
             (command "_u")
          )
          (setq msg (strcat "Tab " l " has nothing on it and skipped.\n" msg))
        )
      )
      (setvar 'filedia fda)
      (setvar 'expert exprt)
      (setvar 'ctab ct)
      (princ msg)
    )

Bạn cũng có thể tham khảo thêm LISP Tabs2Drawings bên dưới