Chuyển đến nội dung
Diễn đàn CADViet
Luu Nguyen

Tách Các Bản Vẽ Bên Layout Thành Từng Bản Vẽ Riêng Biệt

Các bài được khuyến nghị

Xin chào các bạn trên diễn đàn cadviet.com! Chúc các bạn nhiều niềm vui trong ngày nghỉ cuối tuần. 

Mình có 1 vấn đề rắc rối mà không biết làm cách nào nên nhờ các bạn trên diễn đàn ai biết thì giúp mình với:

Cụ thể là mình có các bản vẽ đang ở bên môi trường làm việc layout(4, 5 hoặc 6 bản vẽ trong 1 file), bây giờ mình muốn tác nó ra thành từng bản vẽ riêng biệt(mỗi bản vẽ trong 1 file). Các bạn viết hộ mình 1 lsp, sau khi gõ lệnh(TBV) và chọn vào từng bản vẽ thì bản vẽ đó sẽ tách ra riêng biệt(đường dẫn lưu file do mình chọn). Về cách đặt tên cho từng bản vẽ thì đặt theo số thứ tự tăng dần là KC 01, KC02, KC 03, ... chẳng hạn(sau đó mình sẽ sửa lại tên cho từng bản vẽ đó)

Diễn giải: đầu tiên khi vẽ mình muốn để chung như vậy cho dễ quan sát và kiểm tra, nhưng khi hoàn tất rồi thì phải tách ra từng bản cho nó nhẹ và gởi khách hàng(Vd: trong 1 layout có khoảng 15 bản vẽ vừa kiến trúc và kết cấu thì tách ra từng bản cũng là 1 khoảng thời gian dài). 

Mong tin vui từ các bạn. 

Đây là file tổng cần tách:

146653_untitled.jpg

Các file con tác ra từ file tổng.

146653_untitled_1_1.jpg

http://www.cadviet.com/upfiles/5/146653_ban_ve.rar

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

:D :D :D

Không có cao thủ nào vậy ta, xài đỡ cách của 2 lúa trong khi chờ VIP vậy:

 

Đồ nghề đây:

http://www.cadviet.com/upfiles/5/110802_2lua_1.rar

 

Cách xài:

1. Nạp vào tự chạy.

2. Mỗi khung bản vẽ nên để ở 1 layout khác nhau.

3. líp không chạy trong model.

4. 2 lúa nhớ đề này có lâu rồi, chắc vip bận việc.

:D :D :D

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

:D :D :D

Không có cao thủ nào vậy ta, xài đỡ cách của 2 lúa trong khi chờ VIP vậy:

 

Đồ nghề đây:

http://www.cadviet.com/upfiles/5/110802_2lua_1.rar

 

Cách xài:

1. Nạp vào tự chạy.

2. Mỗi khung bản vẽ nên để ở 1 layout khác nhau.

3. líp không chạy trong model.

4. 2 lúa nhớ đề này có lâu rồi, chắc vip bận việc.

:D :D :D

Bạn 2 lúa cho mình hỏi:

- Ý 1(1. Nạp vào tự chạy.) có nghĩa là sau khi appload thì nó tự chạy hay sao? Không cần gõ lệnh ah! Mình appload xong thì nó không chạy được. 

- Ý 2(2. Mỗi khung bản vẽ nên để ở 1 layout khác nhau.)?  Các bản vẽ ban đầu mình để chung 1 layout cho dễ quan sát và chỉnh sửa(nếu tách ra mỗi 1 layout chứa 1 bản vẽ  thì nó cũng tốn thời gian như tiêu đề của topic rồi). Nếu vậy lsp thực hiện qua 2 bước cũng được là: tách từ bản vẽ tổng(trong 1 layout) thành mỗi  layout chứa 1 bản vẽ  rồi sau đó tách thành từng bản vẽ riêng biệt thì cũng được. 

Mong bạn giúp đỡ thêm.

146653_untitled_2.jpg

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

:D :D :D

Líp đó 2 lúa viết trên cad 2015, chạy tốt.

 

Bạn thử lại líp sau, đã tét trên cad2015:

 

1. líp 2lua, lệnh gõ: 2lua, 

http://www.cadviet.com/upfiles/5/110802_2lua.zip

 

Nơi kiếm file sau khi chạy lệnh:

C:\Users\Administrator\AppData\Local\Autodesk\AutoCAD 2015\R20.0\enu\Template\

 

2. líp 2lua2, lệnh gõ: 2lua2

líp này 2 lúa chưa tét, tác giả cho rằng chạy được từ cad2000~cad2013

http://www.cadviet.com/upfiles/5/110802_2lua2.zip

:D :D :D

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

:D :D :D

Líp đó 2 lúa viết trên cad 2015, chạy tốt.

 

Bạn thử lại líp sau, đã tét trên cad2015:

 

1. líp 2lua, lệnh gõ: 2lua, 

http://www.cadviet.com/upfiles/5/110802_2lua.zip

 

Nơi kiếm file sau khi chạy lệnh:

C:\Users\Administrator\AppData\Local\Autodesk\AutoCAD 2015\R20.0\enu\Template\

 

2. líp 2lua2, lệnh gõ: 2lua2

líp này 2 lúa chưa tét, tác giả cho rằng chạy được từ cad2000~cad2013

http://www.cadviet.com/upfiles/5/110802_2lua2.zip

:D :D :D

Đã áp dụng lsp 2lua2 của bạn sgcq rồi(lsp 2lua chưa áp dụng vì chưa cài cad 2015), nhưng nó chỉ chạy được trong môi trường mỗi layout chứa mỗi bản vẽ thôi. Sao bạn không cho nó chạy ở 1 layout chứa nhiều bản vẽ vậy? Nếu từ 1 bản vẽ tổng(1 layout chứa nhiều bản vẽ) ta tách ra thành mỗi layout chứa mỗi bản vẽ rồi dùng lsp 2lua2 thì cũng giống như ta save as lại thành từng bản vẽ rồi(thời gian tách mỗi layout chứa mỗi bản vẽ cũng giống như thời gian ta tách thành mỗi bản vẽ riêng biệt). Bạn có thể khắc phục giúp mình hạn chế này với? 

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

:D :D :D

Nếu 2 lúa làm được như bạn nói thì không gọi là 2 lúa nữa. :D

Cách xử lý tạm v1.0:

1. Bạn chạy líp 2lua2 để lấy file tổng.

2. Copy nó thành 4 cái.

3. Xóa phần bị thừa đi.

Cách xử lý tạm v2.0:

1. Cài express tool cho cad2007, nghe đồn cách này làm cho líp 2lua cũng chạy ngon lành trên cad 2007.

2. các bước khác như Cách xử lý tạm v1.0:

 

Ghi chú:

Lệnh save as và líp 2lua có công năng khác nhau. Nếu tất cả mọi thứ đã nằm bên model (Bao gồm khung tên, dim, ghi chú...) nhưng bạn vẫn cần líp tách thì bạn cần chờ 1 cao thủ thật sự. 2 lúa hiểu nếu 1 bản tổng có ~1000 khung tên để tách thì nên có líp.

 

Cách của 2 lúa chỉ để chữa cháy. 

 

File gốc của bạn: bản vẽ nằm ở model, khung tên nằm ở layout.

110802_screenshot_14.png

 

Sau khi chạy líp 2lua: khung tên + bản vẽ đều đưa về model, nếu có nhiều layout, mỗi layout sẽ ra 1 file riêng.

File đây: http://www.cadviet.com/upfiles/5/110802_ban_ve_tong_can_tachlayout.dwg

 

Bạn copy thành 4 file theo "Cách xử lý tạm v1.0:" để thu kết quả.

110802_screenshot_15.png

 

 

2 lúa đã tét líp 2lua2 trên cad2015 --> cái này chỉ giống nhu 1 lệnh save as.

 

:D :D :D

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

:D :D :D

Nếu 2 lúa làm được như bạn nói thì không gọi là 2 lúa nữa. :D

Cách xử lý tạm v1.0:

1. Bạn chạy líp 2lua2 để lấy file tổng.

2. Copy nó thành 4 cái.

3. Xóa phần bị thừa đi.

Cách xử lý tạm v2.0:

1. Cài express tool cho cad2007, nghe đồn cách này làm cho líp 2lua cũng chạy ngon lành trên cad 2007.

2. các bước khác như Cách xử lý tạm v1.0:

 

Ghi chú:

Lệnh save as và líp 2lua có công năng khác nhau. Nếu tất cả mọi thứ đã nằm bên model (Bao gồm khung tên, dim, ghi chú...) nhưng bạn vẫn cần líp tách thì bạn cần chờ 1 cao thủ thật sự. 2 lúa hiểu nếu 1 bản tổng có ~1000 khung tên để tách thì nên có líp.

 

Cách của 2 lúa chỉ để chữa cháy. 

 

File gốc của bạn: bản vẽ nằm ở model, khung tên nằm ở layout.

110802_screenshot_14.png

 

Sau khi chạy líp 2lua: khung tên + bản vẽ đều đưa về model, nếu có nhiều layout, mỗi layout sẽ ra 1 file riêng.

File đây: http://www.cadviet.com/upfiles/5/110802_ban_ve_tong_can_tachlayout.dwg

 

Bạn copy thành 4 file theo "Cách xử lý tạm v1.0:" để thu kết quả.

110802_screenshot_15.png

 

 

2 lúa đã tét líp 2lua2 trên cad2015 --> cái này chỉ giống nhu 1 lệnh save as.

 

:D :D :D

Trong 1 layout của mình thì có khoảng từ 20 bản vẽ(vừa kiến trúc và kết cấu), nếu copy ra 20 bản vẽ rồi mở từng bản lên và xóa 19 bản, chỉ chừa lại1 bản và làm 20 lần như vậy thì hơi vất vã đấy.

Dù sao cũng cảm ơn bạn đã nhiệt tình!

Xin nhờ các cao thủ về lsp ai biết về vấn đề này thì hỗ trợ mình 1 lsp với. 

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Bạn thử cái này xem:

http://www.cadviet.com/upfiles/5/141736_tbv_1.rar

+ Lệnh: TBV

+ File tách nằm cùng thư mục bản vẽ gốc.

+ Tên file tách có cùng tên bản vẽ gốc + thêm đuôi.

Thanks bạn quocmanh04tt! Nhưng lsp này chỉ tách ra được khi mỗi layout chứa mỗi bản vẽ thôi(cái này bác 2 lúa cũng cho lsp ok rồi), ý của mình là tách ra thành từng bản riêng biệt khi chúng cùng nằm trong 1 layout thôi. 

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Bạn đã thử chưa ? Trong bản vẽ mà bạn gửi lên ý!

Yêu cầu để lisp chạy tốt:

+ Layout chứa các bản vẽ tên là: Layout.

+ Trong layout chứa các bản vẽ có Block khung tên, tên của block là: "KHUNG TEN"

*** Có bao nhiêu Block "KHUNG TEN" trong layout thì có bấy nhiêu bản vẽ được tách ra.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Bạn đã thử chưa ? Trong bản vẽ mà bạn gửi lên ý!

Yêu cầu để lisp chạy tốt:

+ Layout chứa các bản vẽ tên là: Layout.

+ Trong layout chứa các bản vẽ có Block khung tên, tên của block là: "KHUNG TEN"

*** Có bao nhiêu Block "KHUNG TEN" trong layout thì có bấy nhiêu bản vẽ được tách ra.

Ok bạn quocmanh04tt bản vẽ mình gởi lên bạn nói là đúng rồi, mình cũng đã text nhưng nó không chạy được(máy mình thì đang cài cad 2007) không biết đây có phải là nguyên nhân không nữa. Bạn trên cad mấy vây? 146653_untitled_3.jpg

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Vậy là lsp không chạy được trên cad 2007(mình đã text rồi), máy ở cty của mình cũng đang dùng cad 2007 nữa, bạn giúp mình cho lsp chạy trên cad 2007 với. Thanks bạn! 

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Bạn là người rất nhiệt tình, làm cho trót luôn há bạn. Công dụng của việc đặt bv bên model và khung tên bên layout là: 

1/ Bên layout mình dùng 1 loại khổ giấy

2/ Bên model mình có thể vẽ nhiều tỉ lệ khác nhau(5, 10, 15, ..). 

3/ Bên layout một khung tên mình có thể view nhiều bản vẽ bên model. 

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Ok bạn quocmanh04tt rất tuyệt vời, nhưng sao nó chạy được với khung tên thiết kế thôi, khi mình dùng khung tên shop thì nó lại không chạy được, với lại khi chạy xong lsp xóa các bv còn lại chỉ chừa mỗi bv trong khung tên thôi là ok rồi, bạn chỉnh sao cho khi xóa thì chừa lại hình chữ nhật bao quanh bản vẽ để mình kiểm soát sau này. Mong tin vui từ bạn.

Chúc bạn buổi sáng vui vẻ!

http://www.cadviet.com/upfiles/5/146653_ban_ve_shop.dwg

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Ok bạn quocmanh04tt rất tuyệt vời, nhưng sao nó chạy được với khung tên thiết kế thôi, khi mình dùng khung tên shop thì nó lại không chạy được, với lại khi chạy xong lsp xóa các bv còn lại chỉ chừa mỗi bv trong khung tên thôi là ok rồi, bạn chỉnh sao cho khi xóa thì chừa lại hình chữ nhật bao quanh bản vẽ để mình kiểm soát sau này. Mong tin vui từ bạn.

Chúc bạn buổi sáng vui vẻ.http://www.cadviet.com/upfiles/5/146653_ban_ve_shop.dwg

Không đọc được Code của a quocmanh04tt nhưng cũng đoán mò tí ^^

Code bác ấy viết để tách bve dựa vào  Block khung tên, tên của block là: "KHUNG TEN"

*** Có bao nhiêu Block "KHUNG TEN" trong layout thì có bấy nhiêu bản vẽ được tách ra.

Nếu bạn muốn chạy được với bản vẽ Shop thì đặt tên Block khung tên trong bản vẽ shop là "KHUNG TEN" là được ^^

 

P/s:Anh quocmanh04tt có thể share code cho em tham khảo với được không ạ??.Em cũng mò mẫm mấy bữa nay viết mà ko được ^^ Em cảm ơn trước!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

mình thấy hơi lạ về cách trình bày bản vẽ của bạn. 20 bản vẽ trong 1 file thì mình đã hiểu còn 20 bản trong 1 layout thì hơi lạ. tại sao bạn hơm tách thành 20 layout từ lúc đầu và sử dụng shet set nữa thì rất tuyệt vời khi in ấn.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Mình đã tham khảo cách của bạn Tr.CongSon nhưng không được, đành phải chờ bạn quocmanh04tt sửa giúp. Khi nào rảnh bạn quocmanh04tt giúp mình với nha!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Share code cho "Nhạc sỹ" và bạn nào nếu cần.

+ Hạn chế của lisp:
* Như đã nói ở bài #13
- Khung ten Block
- Layout
(vấn đề này có thể gải quyết bằng cách dùng hộp thoại để chọn Layout, và Block)
- Nếu trong layout có nhiều viewport lồng vào nhau thì lisp chưa xử lý được.

+ Code chưa tối ưu, đang còn lộn xộn ... :D

(defun xuat-file (/ e i ss ssg ssv)
(command "_ucs" "_w")
(vlax-for x (vla-get-layouts acaddoc)
(if (wcmatch (vla-get-name x) "QUOCMANH-*")
(progn (vla-put-ActiveLayout acaddoc x)
(vla-ZoomExtents acadapp)
(vla-put-ActiveLayout acaddoc acadlyt))))
(foreach l (cdr (layoutlist))
(setvar 'ctab l)
(if (> (sslength (ssget "_x" (list (cons 410 (getvar 'ctab))))) 1)
(progn (vla-endundomark acaddoc)
(vla-startundomark acaddoc)
(vlax-for x (vla-get-layouts acaddoc)
(and (/= (vla-get-name x) (getvar 'ctab))
(vl-catch-all-apply 'vla-delete (list x))))
(if (setq ss (ssget "_X" (list (cons 410 "Model"))))
(progn (if (setq ssv (ssget "_X" (list (cons 0 "VIEWPORT"))))
(mapcar '(lambda (e) (Vla-Display (vlax-ename->vla-object e) :vlax-true))
(mapcar 'cadr (ssnamex ssv))))
(vla-put-mspace (vla-get-ActiveDocument (vlax-get-acad-object)) :vlax-true)
(setq ssg (ssget "_W" (getvar 'EXTMIN) (getvar 'EXTMAX)))
(setq i 0)
(while (setq e (ssname ssg i)) (setq ss (ssdel e ss)) (setq i (1+ i)))
(mapcar '(lambda (e) (vla-delete (vlax-ename->vla-object e)))
(mapcar 'cadr (ssnamex ss)))))
(vla-put-mspace (vla-get-ActiveDocument (vlax-get-acad-object))
:vlax-false)
(command "_-wblock"
(strcat (getvar 'dwgprefix) (vl-filename-base (getvar 'dwgname)) "-" l)
"*")
(vla-endundomark acaddoc)
(command "_u"))))
(princ))
;;------------------------------------------------------------------
(defun c:tbv (/ maxp minp acadapp acaddoc acadlyt lst-nn vars vals sbv ssb)
(vl-load-com)
(if (and (member "Layout" (layoutlist))
(ssget "_X"
(list (cons 0 "INSERT") (cons 2 "KHUNG TEN") (cons 410 "Layout"))))
(progn (setq vars '("FILEDIA" "EXPERT" "TILEMODE" "CTAB" "REGENMODE" "CMDECHO" "LAYOUTREGENCTL" "OSMODE")
vals (mapcar 'getvar vars))
(mapcar 'setvar vars '(0 5 1 "Layout" 0 0 0 0))
(setq acadapp (vlax-get-acad-object)
acaddoc (vla-get-ActiveDocument acadapp)
acadlyt (vla-get-ActiveLayout acaddoc))
(createlayobj)
(vlax-for x (vla-get-layouts acaddoc)
(if (wcmatch (vla-get-name x) "QUOCMANH-*")
(progn (vla-put-ActiveLayout acaddoc x)
(vla-ZoomExtents acadapp)
(vla-put-ActiveLayout acaddoc acadlyt))))
(xuat-file)
(vlax-for x (vla-get-layouts acaddoc)
(if (wcmatch (vla-get-name x) "QUOCMANH-*")
(vla-delete x)))
(mapcar 'setvar vars vals)
(if sbv
(alert
(strcat "Co "
(itoa sbv)
" file ban ve duoc tach ra! \nLisp write by QuocManh04tt-Cadviet.com."))))
(alert "Khong ton tai layout co ten: Layout! \nHoac Block KHUNG TEN..."))
(princ "\nLisp write by QuocManh04tt-Cadviet.com.")
(princ))
;;--------------------------------------------------
(defun createlayobj (/ create-layout nl i ss k lst ssold copy2layout lay-out lso lst-new-layout)
(defun create-layout (name)
(vl-catch-all-apply '(lambda () (vla-add (vla-get-layouts acaddoc) name)))
(vla-item (vla-get-layouts acaddoc) name))
(defun copy2layout (k / lobj i llst layout tab lay)
(if (setq ss (ssget "_C" minp maxp (list (cons 410 "Layout"))))
(progn (repeat (setq i (sslength ss))
(setq lobj (cons (vlax-ename->vla-object (ssname ss (setq i (1- i)))) lobj)))
(if (= 1 (getvar 'cvport))
(setq tab (strcase (getvar 'ctab)))
(setq tab "MODEL"))
(vlax-invoke (vla-get-activedocument (vlax-get-acad-object))
'CopyObjects
lobj
(vla-get-block (nth k lst)))
(vla-ZoomExtents (vlax-get-acad-object)))))
;; --- MAIN ----
(if (setq ssb (ssget "_X"
(list (cons 0 "INSERT") (cons 2 "KHUNG TEN") (cons 410 "Layout"))))
(progn (if (not (member "QUOCMANH-1" (layoutlist)))
(progn
(repeat (setq i (sslength ssb))
(create-layout (strcat "QUOCMANH-" (itoa i)))
(setq lst-new-layout (cons (strcat "QUOCMANH-" (itoa i)) lst-new-layout))
(setq i (1- i)))))
;; listlayout
(vlax-for lay (vla-get-layouts (vla-get-activedocument (vlax-get-acad-object)))
(if (/= tab (strcase (vla-get-name lay)))
(setq lst (cons lay lst))))
;;del old obj
(vlax-for x (vla-get-layouts acaddoc)
(if (wcmatch (vla-get-name x) "QUOCMANH-*")
(progn (setq lst-nn (cons (vla-get-name x) lst-nn)
lay-xl (cons x lay-xl))
(vla-put-ActiveLayout acaddoc x)
(vla-ZoomExtents acadapp)
(vla-put-ActiveLayout acaddoc acadlyt)
(if (setq ssold (ssget "_X" (list (cons 410 (vla-get-name x)))))
(mapcar '(lambda (e) (vla-delete (vlax-ename->vla-object e)))
(mapcar 'cadr (ssnamex ssold)))))))
;; copy obj
(if (setq ssb (ssget "_X"
(list (cons 0 "INSERT") (cons 2 "KHUNG TEN") (cons 410 "Layout"))))
(progn (setq k 0
sbv (sslength ssb))
(repeat (length (setq lso (mapcar 'vlax-ename->vla-object
(vl-remove-if 'listp (mapcar 'cadr (ssnamex ssb))))))
(vla-getBoundingBox (nth k lso) 'Minp 'Maxp)
(setq minp (vlax-safearray->list Minp)
maxp (vlax-safearray->list Maxp))
(copy2layout k)
(setq k (1+ k))))))))

* File bản vẽ thứ 2 của chủ thớt có nhiều viewport lồng vào nhau​

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Share code cho "Nhạc sỹ" và bạn nào nếu cần.

+ Hạn chế của lisp:

* Như đã nói ở bài #13

- Khung ten Block

- Layout

(vấn đề này có thể gải quyết bằng cách dùng hộp thoại để chọn Layout, và Block)

- Nếu trong layout có nhiều viewport lồng vào nhau thì lisp chưa xử lý được.

+ Code chưa tối ưu, đang còn lộn xộn ... :D

 

Em cảm ơn nhiều ^^

"Nhạc sỹ" mới vào"sô bít" nên trình còn non kém lắm

Mong anh chị chỉ bảo thêm !

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

×