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

[Yêu cầu] Lisp tạo viewport từ khung chọn bên model.

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

Xin chào cả nhà

Hôm nay có vấn đề này mong cả nhà giúp đỡ.

Mình muốn tạo các viewport từ khung chọn bên model ( mỗi một khung chọn bên model sẽ tạo ra 1 khung viewport bên layout, mỗi layout chỉ có 1 viewport)

Số thứ tự viewport và layout được tạo ra sẽ theo số thứ tự pick chọn khung bên model.

Nội dung quá trình thực hiện cụ thể như sau:

Bên Model

Đánh lệnh: mtl

Chọn khung bên model ( đối tượng là rectang, ví dụ chọn 3 khung, các khung này kích cỡ khác nhau)

Kết quá: tạo ra 3 layout và mỗi layout có chứa 1 viewport( kích thước viewport bằng đúng kích thước khung rectang chọn bên model và view trọn khung rectang bên model đó)

 

Vui lòng tải file đính kèm tại đây: https://www.dropbox.com/s/um8swotgv1fy6tl/cadviet.dwg

 

Xin chân thành cám ơ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

Xin chào cả nhà

Hôm nay có vấn đề này mong cả nhà giúp đỡ.

Mình muốn tạo các viewport từ khung chọn bên model ( mỗi một khung chọn bên model sẽ tạo ra 1 khung viewport bên layout, mỗi layout chỉ có 1 viewport)

Số thứ tự viewport và layout được tạo ra sẽ theo số thứ tự pick chọn khung bên model.

Nội dung quá trình thực hiện cụ thể như sau:

Bên Model

Đánh lệnh: mtl

Chọn khung bên model ( đối tượng là rectang, ví dụ chọn 3 khung, các khung này kích cỡ khác nhau)

Kết quá: tạo ra 3 layout và mỗi layout có chứa 1 viewport( kích thước viewport bằng đúng kích thước khung rectang chọn bên model và view trọn khung rectang bên model đó)

 

Vui lòng tải file đính kèm tại đây: https://www.dropbox....6tl/cadviet.dwg

 

Xin chân thành cám ơn!!!

Nhờ anh em giúp đỡ vấn đề này.

  • Vote giảm 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
Xin chào cả nhà Hôm nay có vấn đề này mong cả nhà giúp đỡ. Mình muốn tạo các viewport từ khung chọn bên model ( mỗi một khung chọn bên model sẽ tạo ra 1 khung viewport bên layout, mỗi layout chỉ có 1 viewport) Số thứ tự viewport và layout được tạo ra sẽ theo số thứ tự pick chọn khung bên model. Nội dung quá trình thực hiện cụ thể như sau: Bên Model Đánh lệnh: mtl Chọn khung bên model ( đối tượng là rectang, ví dụ chọn 3 khung, các khung này kích cỡ khác nhau) Kết quá: tạo ra 3 layout và mỗi layout có chứa 1 viewport( kích thước viewport bằng đúng kích thước khung rectang chọn bên model và view trọn khung rectang bên model đó) Vui lòng tải file đính kèm tại đây: https://www.dropbox....6tl/cadviet.dwg Xin chân thành cám ơn!!!

Hề hề hề,

 

Không biết cái của đi chôm này có ưng ý bạn hay không, nếu nó dùng được thì chịu khó cám ơn ông chủ lisp thanhduan2407 nghen.

Lưu ý rằng lisp này xuất ra các viewports dạng file *.xps lưu tại đường dẫn do bạn chọn khi lisp hỏi địa chỉ lưu file chứ không phải tạo thêm các layout mới như bạn mong muốn. Điều này có lẽ thuận lợi hơn cho bạn khi xuất để in ấn. nếu muốn xuất thành các layout riêng có nhẽ không khó lắm nữa nhưng mình chưa rành về layout nên không thể hứa hẹn gì với bạn cả. Trước mắt theo ngu ý của mình thì dùng cái này còn ngon hơn layout nhiều vì vừa nặng bản vẽ lại vừa rất dễ toi khi người dùng không rành về layout.

 

Nếu nó chưa như ý thì cũng đừng phiền lòng và hãy post lên để có thể có người khác giúp bạn được.

Lisp đây hè:

(defun c:mla (/ d1 d2 p1 p2 p3 plst ssl)
(vl-load-com)
(command "undo" "be")
(setvar "tilemode" 0)
(command "PSPACE")
(setq
 	D1 (getpoint "\nChon diem thu nhat goc tren ben trai khung ban ve: ")
 	D2 (getpoint "\nChon diem thu hai goc tren ben phai khung ban ve: ")
)
(command "MSPACE")
(alert "\n Chon cac khung nhin theo thu tu layout")
(setq ssl (acet-ss-to-list (ssget (list (cons 0 "lwpolyline")))))
(foreach pl ssl
(setq plst (acet-geom-vertex-list pl)
             p1 (nth 0 plst)
             p2 (nth 1 plst)
             p3 (nth 2 plst)
)
   (command "layout" "n" (setq a (getstring "\n Nhap ten layout moi: ")))
   (command "layout" "s" a)
(command "PSPACE")
(if (> (distance p1 p2) (distance p2 p3))
		(alignspace P1 P2 D1 D2)
		(alignspace P2 P3 D1 D2)
)

(command "_plot" "" "" "" "" "" "" "")  
(command "MSPACE")
)
(setvar "tilemode" 1)
(command "undo" "e")
(princ)
)

Chúc bạn vui.

 

PS: Bạn lưu ý thêm rằng trong lisp có sử dụng hàm (alignspace ....) là một hàm có trong bộ Express tools. Vì thế có thể khi chạy lisp lần đầu tiên nó sẽ báo lỗi không có hàm này. Lý do là một số hàm của express tools không tự động load vào bản vẽ. Do vậy để an toàn trước khi sử dụng lisp này bạn cần phải gọi lệnh align space này ít nhất là một lần trong phiên làm việc với bản vẽ cần chạy lisp để CAD có thể nhận dạng hàm (alignspace .....) này. Để tìm hiểu kỹ hơn về hàm alignspace bạn cần mở thư mục express tools của CAD và tìm tới lisp này để hiểu nó.

cách chạy lisp bổ sung này y như cũ, chỉ có lưu ý thêm phải nhập tên của các layout mới được tạo ra.

Để tiết kiệm đất nên mình bổ sung luôn vào lisp cũ. nếu bạn đã down về rồi thì hãy down lại một lần nữa. Nên download, tránh copy - paste code vì rất có thể bị lỗi lisp do code box của diễn đàn có vấn đề mà mình không biết cách khắc phục.

  • 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

-Rất cám ơn bạn phamthanhbinh đã giúp đỡ. Lisp của bạn gửi lên đây chưa đúng ý của mình cụ thể khi gõ lệnh nó đã nhảy sang layout và nó hỏi góc khung bên trái và góc khung bên phải sau đó nhảy vào model và chọn các khung muốn view, khi mình chọn nhiều khung để view thì nó cũng chỉ tạo ra được 1 layout mới và view không theo khung bên model.

- Xin nhắc lai là mình muốn tạo viewport bằng cách chọn khung bên model, mỗi khung chọn sẽ cho ra 1 khung nhìn trong 1 layout.

- Mong bạn phamthanhbinh nghiên cứu giúp mình. thanks

PS: Cho mình hỏi thêm cái lisp bạn giới thiệu bên trên thì ý đồ của tác giả làm ra nó để làm gì vậy???

Thanks!!

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

-Rất cám ơn bạn phamthanhbinh đã giúp đỡ. Lisp của bạn gửi lên đây chưa đúng ý của mình cụ thể khi gõ lệnh nó đã nhảy sang layout và nó hỏi góc khung bên trái và góc khung bên phải sau đó nhảy vào model và chọn các khung muốn view, khi mình chọn nhiều khung để view thì nó cũng chỉ tạo ra được 1 layout mới và view không theo khung bên model.

- Xin nhắc lai là mình muốn tạo viewport bằng cách chọn khung bên model, mỗi khung chọn sẽ cho ra 1 khung nhìn trong 1 layout.

- Mong bạn phamthanhbinh nghiên cứu giúp mình. thanks

PS: Cho mình hỏi thêm cái lisp bạn giới thiệu bên trên thì ý đồ của tác giả làm ra nó để làm gì vậy???

Thanks!!

Hề hề hề,

Hãy gửi bản vẽ của bạn lên để mình test thử.

Mình test trên các bản vẽ của mình thì thấy hoàn toàn đạt theo cái sự hiểu của mình (Mình dùng CAD2004)

Người lập lisp này có ý đồ có vẻ giống bạn nhưng để tạo ra các bản in khác nhau của cùng một bản vẽ và lưu lại dưới dạng file xps để khi cần thì lôi ra in, không cần phải mở bản vẽ nữa. Mình đã bổ sung thêm việc tạo các layout mới và lưu lại các layout này, bạn đã test chưa mà không thấy có phản hồi về điều này???

Việc chọn khung nhìn bên model và bên layout thì có chi khác nhau nhỉ?? Cái cần là kết quả chứ đâu có phải cách làm. Cách chi là do cái sự hiểu của người viết lisp, nếu bạn yêu cầu người viết phải hiểu theo cách của bạn thì e rằng sẽ hơi vất vả vì cái sự hiểu của họ không thể bằng của bạn, nhất là về cái chuyên môn sâu của bạn bạn ạ. Mình cũng chỉ đoán mò cái yêu cầu của bạn và cảm thấy cái của Thanhduan2407 giông giống thì sửa chữa một chút rồi post lên chứ không phải hiểu hoàn toàn đúng ý của bạn. Vậy nên nó chưa phù hợp cũng là điều dễ hiểu mà.

Nếu bạn gửi bản vẽ lên thì mình mới có thể hiểu đúng ý của bạn để test lisp được.

Rất mong bạn thông cảm.

  • Like 1
  • 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

Xin chào cả nhà

Hôm nay có vấn đề này mong cả nhà giúp đỡ.

Mình muốn tạo các viewport từ khung chọn bên model ( mỗi một khung chọn bên model sẽ tạo ra 1 khung viewport bên layout, mỗi layout chỉ có 1 viewport)

Số thứ tự viewport và layout được tạo ra sẽ theo số thứ tự pick chọn khung bên model.

Nội dung quá trình thực hiện cụ thể như sau:

Bên Model

Đánh lệnh: mtl

Chọn khung bên model ( đối tượng là rectang, ví dụ chọn 3 khung, các khung này kích cỡ khác nhau)

Kết quá: tạo ra 3 layout và mỗi layout có chứa 1 viewport( kích thước viewport bằng đúng kích thước khung rectang chọn bên model và view trọn khung rectang bên model đó)

 

Vui lòng tải file đính kèm tại đây: https://www.dropbox....6tl/cadviet.dwg

 

Xin chân thành cám ơn!!!

Bác Tùng dùng thử lisp này xem đã đúng ý chưa.

Hướng dẫn:

Load File lisp

Đánh lệnh mtl

Chọn các khung bên model theo thứ tự từng khung một hoặc quét chọn hàng loạt

Chuột phảihttp://www.cadviet.c...3/71162_mtl.lsp

  • Vote tăng 2

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

Xin chào cả nhà

Hôm nay có vấn đề này mong cả nhà giúp đỡ.

Mình muốn tạo các viewport từ khung chọn bên model ( mỗi một khung chọn bên model sẽ tạo ra 1 khung viewport bên layout, mỗi layout chỉ có 1 viewport)

Số thứ tự viewport và layout được tạo ra sẽ theo số thứ tự pick chọn khung bên model.

Nội dung quá trình thực hiện cụ thể như sau:

Bên Model

Đánh lệnh: mtl

Chọn khung bên model ( đối tượng là rectang, ví dụ chọn 3 khung, các khung này kích cỡ khác nhau)

Kết quá: tạo ra 3 layout và mỗi layout có chứa 1 viewport( kích thước viewport bằng đúng kích thước khung rectang chọn bên model và view trọn khung rectang bên model đó)

 

Vui lòng tải file đính kèm tại đây: https://www.dropbox....6tl/cadviet.dwg

 

Xin chân thành cám ơn!!!

Bác Tùng dùng thử lisp này xem đã đúng ý chưa.

http://www.cadviet.c...3/71162_mtl.lsp

Hướng dẫn:

Load File lisp

Đánh lệnh mtl

Chọn các khung bên model theo thứ tự từng khung một hoặc quét chọn hàng loạt

Chuột phải

  • 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

Cám ơn bạn phamthanhbinh.

Mình cũng xin giải thích rõ hơn 1 chút như sau:

[Hãy gửi bản vẽ của bạn lên để mình test thử.]

Bình vui lòng down bản vẽ ở đây: https://www.dropbox....6tl/cadviet.dwg

[Mình test trên các bản vẽ của mình thì thấy hoàn toàn đạt theo cái sự hiểu của mình (Mình dùng CAD2004)]

Mình dùng cad 13 Bình à

[Người lập lisp này có ý đồ có vẻ giống bạn nhưng để tạo ra các bản in khác nhau của cùng một bản vẽ và lưu lại dưới dạng file xps để khi cần thì lôi ra in, không cần phải mở bản vẽ nữa. Mình đã bổ sung thêm việc tạo các layout mới và lưu lại các layout này, bạn đã test chưa mà không thấy có phản hồi về điều này???]

Mình đã test và khi đánh lệnh nó tạo layout mới và nhảy sang bên layout luôn.

[Việc chọn khung nhìn bên model và bên layout thì có chi khác nhau nhỉ??]

Nó khác nhau Bình à, vì bản vẽ ở model và được đóng khung, hoặc được tạo đường bao, vì thế mình muốn từ model chọn các khung và nó sẽ cho ra mỗi khung chọn 1 viewport trong 1 layout.

[Cái cần là kết quả chứ đâu có phải cách làm. Cách chi là do cái sự hiểu của người viết lisp, nếu bạn yêu cầu người viết phải hiểu theo cách của bạn thì e rằng sẽ hơi vất vả vì cái sự hiểu của họ không thể bằng của bạn, nhất là về cái chuyên môn sâu của bạn bạn ạ. Mình cũng chỉ đoán mò cái yêu cầu của bạn và cảm thấy cái của Thanhduan2407 giông giống thì sửa chữa một chút rồi post lên chứ không phải hiểu hoàn toàn đúng ý của bạn. Vậy nên nó chưa phù hợp cũng là điều dễ hiểu mà.

Nếu bạn gửi bản vẽ lên thì mình mới có thể hiểu đúng ý của bạn để test lisp được.]

Đồng ý kết quả là quan trọng. Mình ko viết được lisp vì thế mình nói ý đồ và kết quả. Những người biết viết lisp sẽ có thể thay đổi các bước làm để cho phù hợp với code lập trình trong lisp để cho lisp hoạt động tốt hơn ( điều này người ko biết sẽ ko nắm được) miễn sao kết quả ok là được.

Cuối cùng rất cám ơn phamthanhbinh đã giúp đỡ.

PS: Lisp của bạn KangKung mới gửi phù hợp mới ý đồ của mình, tuy nhiên mình có nhờ bổ sung thêm. Bình có thể xem thêm bài dưới giúp mình nhé.

Thanks!

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ác Tùng dùng thử lisp này xem đã đúng ý chưa.

http://www.cadviet.c...3/71162_mtl.lsp

Hướng dẫn:

Load File lisp

Đánh lệnh mtl

Chọn các khung bên model theo thứ tự từng khung một hoặc quét chọn hàng loạt

Chuột phải

Cám ơn bạn KangKung. Lisp chuẩn, tuy nhiên nhờ KangKung và các bạn bổ sung thêm Plot area cho mỗi viewport được tạo ra để khi in không phải set windown cho từng viewport đó nữa.

Rất cám ơn 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

Hi Bác Tùng

Lisp mới của bác Tùng đây:

http://www.cadviet.com/upfiles/3/71162_mtl_rev1.lsp

Tuy nhiên trước khi chạy Lisp bác nên đặt máy in và khổ giấy ở Layout1 của bản vẽ và xoá Layout2, Layout3, Layout4,… thì Lisp này chạy mới Smooth.

  • 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

Hi Bác Tùng

Lisp mới của bác Tùng đây:

http://www.cadviet.c...62_mtl_rev1.lsp

Tuy nhiên trước khi chạy Lisp bác nên đặt máy in và khổ giấy ở Layout1 của bản vẽ và xoá Layout2, Layout3, Layout4,… thì Lisp này chạy mới Smooth.

Tuyệt với, xin cám ơn bạn. Sau khi dùng lisp thì đúng ý đồ khi mình đề ra. Tuy nhiên mình mong được bổ sung cho hoàn thiện hơn ( do phát sinh vấn đề trong khi sử dụng) cụ thể như sau:

- Bổ sung thêm dòng nhắc hỏi tên ký tự đầu của layout ( các các khác sẽ tự động gắn 1, 2, 3... vào sau tên khái báo)

- Bổ sung thêm tỷ lệ khung viewport cho layout tạo ra ( mặc định là 1/1)

- Cái phần cuối nó hỏi khổ giấy thì mình thấy ko cần thiết ( ko hiểu KangKung cho dòng nhắc đó vào là có ý đồ gì?). Khi mình đã tạo được các layout và viewport rồi thì muốn in ấn thì mình publish chọn máy và khổ in tổng thể luôn.

Cám ơn kangkung, mong được bổ sung hoàn thiện ( :mellow: cái này gọi là; được voi đòi hai bà trưng... hehehe)

Thanks!

  • 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

Nhoc ham vui xíu:

-Bổ sung đầu là seo nhỉ đặt tên cho từng layout hả bạn vd: vuiqua sau đó sẽ gắn đối với từng khung đc chọn sẽ là vuiqua-1, vuiqua-2,....

-Bổ sung thêm tỉ lệ nghĩa là mình có thể chọn thay đổi tỉ lệ cho các layout đó ah,nếu ko nhập gì mặc định nó sẽ tạo ra là 1/1 chăng, có thể nhoc chưa hỉu nhưng thấy yêu cầu của bạn là zoom khung viewport bằng khung bên model >>>> tỉ lệ viewport = 1/1 rùi sữa làm gì nhỉ :D

-Cái cuối nhoc đoán là bạn ấy cho bạn chọn set sẵn khổ giấy, rùi dùng chế độ win down quét vừa khung viewport lun oỳ, như bạn ấy có nói bạn nên chọn máy in sẵn ở layout 1 trước nên ý đồ là thế ^^, ko pit nhoc có đoán sai không :D

  • Like 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

Mạn phép bạn KangKung cho nhoc sữa lại tí :D, nhoc cũng mới tập tềnh học lsp, nên thấy lsp nào nhoc có khả năng thử chỉnh sữa nhằm rèn luyện ^^

-Yêu cầu bổ sung đầu tiên của bạn nhoc hỉu sao sữa vậy bạn xem thử hen

-yêu cầu thứ 2 chưa hỉu ko pit sữa sao ^^

-thắc mắc thứ 3 của bạn, vậy thể theo nguyện vọng bỏ lun phần đó cho nó đỡ rùm rà hen :D

;========LISP TAO VIEWPORT TREN LAYOUT BANG CACH CHON O MODEL========
(defun C:mtl(/ taphop soluong ten size i index oldos)
 (command "UNDO" "BE")
 (setq oldos (getvar "osmode"))
 (setvar "OSMODE" 0)
 (setq taphop(ssget))
 (setq soluong (sslength taphop))
 (setq ten (getstring 1 "\n Nhap ten layout:"))
 (setq index 0)
 (setq i 0)
 (while (< index soluong)
(setq i(1+ i))
(setq khung(ssname taphop index))
(setq lst(acet-geom-vertex-list khung))
(command "COPYCLIP" khung "")
(command "LAYOUT" "N" (strcat ten (rtos i 2 0)))
(command "LAYOUT" "S" (strcat ten (rtos i 2 0)))
(command "layout" "d" "layout1" "")
(command "layout" "d" "layout2" "")
(command "layout" "d" "layout3" "")
(command "ERASE" "ALL" "")
(command "PASTECLIP" "0,0")
(command "MVIEW" "O" (entlast))
(command "MSPACE")
(command "ZOOM" (nth 0 lst) (nth 2 lst))
(command "PSPACE")
(command "ZOOM" "E")
(command "PLOT" "Y" "" "" size "M" "L" "N" "W" "0,0" (list (abs(- (car (nth 2 lst)) (car (nth 0 lst)))) (abs(- (cadr (nth 2 lst)) (cadr (nth 0 lst))))) "F" "" "Y" "" "Y" "N" "N" "N" "N" "Y" "N")
(command "MODEL")
(setq index (+ index 1))
)
 (command "UNDO" "END")
 (setvar "OSMODE" oldos)
 (princ)
 )

  • Vote tăng 2

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

oh giờ đọc lại mới pit bạn ấy viết hỏi chọn khổ giáy nhằm mục đich gì rùi, để lây thông số đó set vùng in , vậy nhoc sữa chưa hết rùi ^^, mẹ bắt đi ngủ, nếu mai chưa ai sữa hộ bạn thì nhoc sẽ nghiên cứu sữa lại hen :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

Mạn phép bạn KangKung cho nhoc sữa lại tí :D, nhoc cũng mới tập tềnh học lsp, nên thấy lsp nào nhoc có khả năng thử chỉnh sữa nhằm rèn luyện ^^

-Yêu cầu bổ sung đầu tiên của bạn nhoc hỉu sao sữa vậy bạn xem thử hen

 

Bạn Có thể sửa lại cho tất cả nằm trong một layout. thì tuyệt vời. mỗi khung cách nhau la 50m

  • Like 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

Bạn anhbkhcm spam ghê thế, như nói trên nhoc mới tập tềnh về lsp thui, việc xuất ra trong 1 layout nhoc có thể sữa đc nhưng cách nhau 50m thì nhoc chịu ^^, mà bạn có để ý ko, layout là cách nói hiển thị trên trang giấy mà mỗi khung cách nhau 50m thì tờ giấy phải dài bao nhiu mới đủ đây :D

- Nếu cách nhau 50mm = 5cm thì có thể đc or 500mm = 50 cm cũng có thể đc nhưng in ra cũng tốn giấy ah ^^

-thôi thì thế này nhoc chỉ giúp bạn sữa đc ra trong 1 layout thui còn lại bạn tự xử hen :D, thông cảm khả năng giới hạn

;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=68723&pid=225475&st=0entry225475
;========LISP TAO VIEWPORT TREN LAYOUT BANG CACH CHON O MODEL========
(defun C:mtl(/ taphop soluong ten size i index oldos)
 (command "UNDO" "BE")
 (setq oldos (getvar "osmode"))
 (setvar "OSMODE" 0)
 (setq taphop(ssget))
 (setq soluong (sslength taphop))
 (setq ten (getstring 1 "\n Nhap ten layout:"))
 (setq index 0)
 (setq i 0)
 (while (< index soluong)
(setq i 1)
(setq khung(ssname taphop index))
(setq lst(acet-geom-vertex-list khung))
(command "COPYCLIP" khung "")
(command "LAYOUT" "N" (strcat ten (rtos i 2 0)))
(command "LAYOUT" "S" (strcat ten (rtos i 2 0)))
(command "layout" "d" "layout1" "")
(command "layout" "d" "layout2" "")
(command "layout" "d" "layout3" "")
(command "ERASE" "ALL" "")
(command "PASTECLIP" "0,0")
(command "MVIEW" "O" (entlast))
(command "MSPACE")
(command "ZOOM" (nth 0 lst) (nth 2 lst))
(command "PSPACE")
(command "ZOOM" "E")
(command "PLOT" "Y" "" "" size "M" "L" "N" "W" "0,0" (list (abs(- (car (nth 2 lst)) (car (nth 0 lst)))) (abs(- (cadr (nth 2 lst)) (cadr (nth 0 lst))))) "F" "" "Y" "" "Y" "N" "N" "N" "N" "Y" "N")
(command "MODEL")
(setq index (+ index 1))
)
 (command "UNDO" "END")
 (setvar "OSMODE" oldos)
 (princ)
 )

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 Tùng ơi theo ý kiến của nhoc thì thế này vì việc chọn khổ giấy liên quan đến việc chọn vùng nên nhoc nghĩ mình cứ để vậy thui, nhoc cũng ko pit sữa ^^, chờ pac KangKung giúp vậy :D, nhoc để nguyên phần chọn khổ nhé

;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=68723&pid=226065&st=0entry226065
;========LISP TAO VIEWPORT TREN LAYOUT BANG CACH CHON O MODEL========
(defun C:mtl(/ taphop soluong ten size i index oldos)
 (command "UNDO" "BE")
 (setq oldos (getvar "osmode"))
 (setvar "OSMODE" 0)
 (setq taphop(ssget))
 (setq soluong (sslength taphop))
 (setq size(getstring "\n Kho giay in A0/A1/A2/A3/A4? < A3 >: "))
 (if (= size nil) (setq size A3))
 (setq ten (getstring 1 "\n Nhap ten layout:"))
 (setq index 0)
 (setq i 0)
 (while (< index soluong)
(setq i(1+ i))
(setq khung(ssname taphop index))
(setq lst(acet-geom-vertex-list khung))
(command "COPYCLIP" khung "")
(command "layout" "n" (strcat "layout" (rtos i 2 0)))
(command "LAYOUT" "N" (strcat ten (rtos i 2 0)))
(command "LAYOUT" "S" (strcat ten (rtos i 2 0)))
(command "layout" "d" "layout1" "")
(command "layout" "d" "layout2" "")
(command "layout" "d" "layout3" "")
(command "ERASE" "ALL" "")
(command "PASTECLIP" "0,0")
(command "MVIEW" "O" (entlast))
(command "MSPACE")
(command "ZOOM" (nth 0 lst) (nth 2 lst))
(command "PSPACE")
(command "ZOOM" "E")
(command "PLOT" "Y" "" "" size "M" "L" "N" "W" "0,0" (list (abs(- (car (nth 2 lst)) (car (nth 0 lst)))) (abs(- (cadr (nth 2 lst)) (cadr (nth 0 lst))))) "F" "" "Y" "" "Y" "N" "N" "N" "N" "Y" "N")
(command "MODEL")
(setq index (+ index 1))
)
 (command "UNDO" "END")
 (setvar "OSMODE" oldos)
 (princ)
 )

  • 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

Tuyệt với, xin cám ơn bạn. Sau khi dùng lisp thì đúng ý đồ khi mình đề ra. Tuy nhiên mình mong được bổ sung cho hoàn thiện hơn ( do phát sinh vấn đề trong khi sử dụng) cụ thể như sau:

- Bổ sung thêm dòng nhắc hỏi tên ký tự đầu của layout ( các các khác sẽ tự động gắn 1, 2, 3... vào sau tên khái báo)

- Bổ sung thêm tỷ lệ khung viewport cho layout tạo ra ( mặc định là 1/1)

- Cái phần cuối nó hỏi khổ giấy thì mình thấy ko cần thiết ( ko hiểu KangKung cho dòng nhắc đó vào là có ý đồ gì?). Khi mình đã tạo được các layout và viewport rồi thì muốn in ấn thì mình publish chọn máy và khổ in tổng thể luôn.

Cám ơn kangkung, mong được bổ sung hoàn thiện ( :mellow: cái này gọi là; được voi đòi hai bà trưng... hehehe)

Thanks!

Lần này hi vọng mọi thứ đã đúng hết ý của bác.

1. Đã bổ sung thêm dòng nhắc hỏi kí tự đầu của Layout. Nếu không nhập gì thì mặc định tên là Layout1, Layout2, …

2. Đã bổ sung thêm tỷ lệ khung Viewport cho layout tạo ra. Ví dụ tỉ lệ bản vẽ là 1/1000 thì nhập số 1 ở dòng nhắc lệnh, 1/500 thì nhập số 0.5, nếu tỷ lệ 1/2000 thì nhập số 2

3. Mình vẫn để dòng nhắc chọn khổ giấy vì khi in ấn thì chắc chắn phải chọn khổ giấy rồi, vậy nên thay vì chọn thủ công khổ giấy cho từng Layout một thì ở đây lisp nó chọn hàng loạt cho mình luôn. Giả dụ bác có 1000 Layout, sau này in ấn mà phải chọn khổ giấy cho từng Layout thì chắc… hết muốn in luôn.

Chúc bác vui.

http://www.cadviet.c...62_mtl_rev2.lsp

  • Vote tăng 2

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 KangKung ơi cách bạn thêm vào hay hơn nhoc :D, nhưng nhoc xài thử thì thấy nó ko đc như lsp thứ 1 của bạn, tạo xong thì mỗi layout nó lại tạo khung view chung cho khung 2 và 3, mình làm thử trên file vd của bạn tùng, và nó hơi dư layout 1, 2 ,3. Nên nhoc có sữa tí trong lsp bạn Tùng xem cái nào hợp thì xài hen ^^

;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=68723&pid=226065&st=0entry226065
;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=68723&pid=226065&st=0entry226065
;========LISP TAO VIEWPORT TREN LAYOUT BANG CACH CHON O MODEL========
(defun C:mtl(/ taphop soluong ten size i index oldos Tyle)
 (command "UNDO" "BE")
 (setq oldos (getvar "osmode"))
 (setvar "OSMODE" 0)
 (setq taphop(ssget))
 (setq soluong (sslength taphop))
 (setq size(getstring "\n Kho giay in A0/A1/A2/A3/A4? < A3 >: "))
 (if (= size nil) (setq size A3))
 (setq ten (getstring 1 "\n Nhap ten layout:"))
 (if (= Tyle nil)
(setq Tyle1 1)
(setq Tyle1 Tyle))
 (setq Tyle (getreal (strcat "\n Ty le: <" (rtos Tyle1 2 0) "> ")))
 (if (= Tyle nil)
(setq Tyle Tyle1))
 (setq index 0)
 (setq i 0)
 (while (< index soluong)
(setq i(1+ i))
(setq khung(ssname taphop index))
(setq lst(acet-geom-vertex-list khung))
(command "COPYCLIP" khung "")
(command "layout" "n" (strcat "layout" (rtos i 2 0)))
(command "LAYOUT" "N" (strcat ten (rtos i 2 0)))
(command "LAYOUT" "S" (strcat ten (rtos i 2 0)))
(command "layout" "d" "layout1" "")
(command "layout" "d" "layout2" "")
(command "layout" "d" "layout3" "")
(command "ERASE" "ALL" "")
(command "PASTECLIP" "0,0")
(command "SCALE" (entlast) "" "0,0" (/ 1000 tyle))
(command "MVIEW" "O" (entlast))
(command "MSPACE")
(command "ZOOM" (nth 0 lst) (nth 2 lst))
(command "PSPACE")
(command "ZOOM" "E")
(command "PLOT" "Y" "" "" size "M" "L" "N" "W" "0,0" (list (abs(- (car (nth 2 lst)) (car (nth 0 lst)))) (abs(- (cadr (nth 2 lst)) (cadr (nth 0 lst))))) "F" "" "Y" "" "Y" "N" "N" "N" "N" "Y" "N")
(command "MODEL")
(setq index (+ index 1))
)
 (command "UNDO" "END")
 (setvar "OSMODE" oldos)
 (princ)
 )

PS: vụ tỉ lệ nhoc có sữa lại tí, vd bạn nhập 1/500 >>> khung view sẽ scale lên 2 lần, tương tự cho các tỉ lệ khác bạn nhập ^^

  • 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

Chào bạn anhbkhcm

 

Theo mình thì cái tiện lợi của việc đặt Layout là khi mọi thứ đã hoàn chỉnh hết thì người dùng khi muốn in một Layout nào đó thì chỉ cần chuột phải vào Layout đó và chọn Plot rồi OK là xong không cần phải thiết lập thêm thông số gì nữa. Ví dụ khi bạn muốn in Layout10 chẳng hạn, cho dù bạn đang ở Layout khác hoặc ở chế độ Model thì bạn vẫn làm được điều đó. Hay thậm chí bạn còn in được một lúc nhiều Layout bằng cách giữ phím Ctrl hoặc Shift rồi chọn các Layout cần in. Đó mới là cái hay của việc đặt Layout. Còn việc bạn muốn đặt nhiều Viewport trên một Layout cũng được thôi nhưng khi in thì bạn phải mất công chọn lại Window cho từng bản vẽ. Như thế sẽ mất nhiều thời gian cho việc in ấn nếu khối lượng lớn.

Mình cũng hay dùng Layout để in ấn nên cũng có đôi chút kinh nghiệm như vậy để chia sẻ. Tuy nhiên nếu bạn vẫn muốn đặt tất cả các Viewport trên một Layout thì dùng Lisp dưới đây nhé.

 

http://www.cadviet.c..._mtl_rev3_1.lsp

 

 

PS: Nếu thấy hay thì nhớ bấmLike thisnhé. Thanks

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

Chào bạn anhbkhcm

 

Theo mình thì cái tiện lợi của việc đặt Layout là khi mọi thứ đã hoàn chỉnh hết thì người dùng khi muốn in một Layout nào đó thì chỉ cần chuột phải vào Layout đó và chọn Plot rồi OK là xong không cần phải thiết lập thêm thông số gì nữa. Ví dụ khi bạn muốn in Layout10 chẳng hạn, cho dù bạn đang ở Layout khác hoặc ở chế độ Model thì bạn vẫn làm được điều đó. Hay thậm chí bạn còn in được một lúc nhiều Layout bằng cách giữ phím Ctrl hoặc Shift rồi chọn các Layout cần in. Đó mới là cái hay của việc đặt Layout. Còn việc bạn muốn đặt nhiều Viewport trên một Layout cũng được thôi nhưng khi in thì bạn phải mất công chọn lại Window cho từng bản vẽ. Như thế sẽ mất nhiều thời gian cho việc in ấn nếu khối lượng lớn.

Mình cũng hay dùng Layout để in ấn nên cũng có đôi chút kinh nghiệm như vậy để chia sẻ. Tuy nhiên nếu bạn vẫn muốn đặt tất cả các Viewport trên một Layout thì dùng Lisp dưới đây nhé.

 

http://www.cadviet.c..._mtl_rev3_1.lsp

 

 

PS: Nếu thấy hay thì nhớ bấmLike thisnhé. Thanks

Cảm ơn bạn nhiều tuy nhiên lisp của bạn bị lỗi không chạy được , bạn kiểm tra lại xem.

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 sửa sắp đúng ý mình rồi. tuy nhiên ý mình muốn nó nằm trên một layout, như file mình gưi kèm theo.

http://www.mediafire...ck39bq60xsbrc9y

Ơ nó nằm trên cùng một Layout rồi mà. Không hiểu bạn dùng Lisp nào. Lisp mình viết cho bạn là mtl_Rev3.lsp vẫn chạy ngon lành trên máy mình mà. Kết quả cũng giống y hệt như Layout bạn tạo 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

 

 

Ơ nó nằm trên cùng một Layout rồi mà. Không hiểu bạn dùng Lisp nào. Lisp mình viết cho bạn là mtl_Rev3.lsp vẫn chạy ngon lành trên máy mình mà. Kết quả cũng giống y hệt như Layout bạn tạo ra.

MÌNH CHẠY NÓ BÁO LỖI NÀY. BẠN THỬ LẠI XEM SAO?

; error: bad argument type: numberp: #<SUBR @10b98a28 TYLE>

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

×