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ị

1. Tạo nhiều Layout nhằm mục đích thuận lợi cho việc in ấn. Sau khi tạo được các layout rồi người sử dụng có thể in hàng loạt bằng lựa chọn Publish hoặc giữ phím Shift (Ctrl) và chọn các layout bất kì rồi click chuột phải sau đó chọn plot là xong mà không cần phải bắt điểm để in từng bản vẽ một. Đó chính là lí do mà Lisp này hướng tới.

Bản chất Layout là dùng để in ấn và mỗi layout chỉ tương ứng với một khổ giấy thôi. Muốn in cái gì thì đặt lên khổ giấy rồi in. Các công ty nước ngoài không bao giờ họ để nhiều khung in trong 1 Layout như một số công ty ở Việt Nam đâu. Tôi quan niệm rằng Layout là một khổ giấy có giới hạn tuy nhiên có phần lề thì rộng vô cùng và một số bạn thì rất thích bố trí bản vẽ vào phần lề này thay vì bố trí sang Layout khác. Cách bố trí này cũng có thuận tiện tuy nhiên theo tôi là chưa tối ưu.

2. Bạn đang làm ngược rồi. Khung tên là gốc và khung bao bên Model phải scale theo tỉ lệ và kích thước của khung vport bên layout.

@Khaosatheco: OK đã hiểu. Các polyline định hướng này cũng chính là giao của khung bao và tim tuyến. Không cần phải thêm bước chọn đường định hướng nữa vì Lisp cũng đã biết vị trí các điểm này khi tính giao cắt.

Bạn có thể chỉnh giúp mình xuất các khung ra nằm trên cùng 1 layout không ?

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

@NNS: đã có lisp xuất chung 1 layout trong topic này. Bạn tìm lại xem.

@KSTC: hiện tại mình đang bận, lúc nào rỗi sẽ bổ sung lisp theo yc của bạn

  • 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 KangCung và bạn Nhoclangbat. Mình theo dõi topic và thấy hai bạn rất nhiệt tình giúp đỡ anh em. Tuy Lisp tạo Viewport từ khung chọn bên Model là của bạn Tùng yêu cầu nhờ viết nhưng lại được rất nhiều anh em quan tâm vì được ứng dụng nhiều trong dân kỹ thuật anh em mình.

Mình thấy Lisp ở #67 tạo các khung ViewPort sang Layout là hình chữ nhật (mặc dù bên Modul khung ko phải hình chữ nhật). Ở #69 thì Khung bên Modul thế nào sang Layout khung hình y nguyên thế đó.

Vậy hai bạn cho mình ké cửa nhờ sửa lại đôi chút theo ý mình như sau:

1.Vieweport bên Layout giống hệt khung bên Modul (cái này lisp #69 Oki rồi).

2.Xuất ra các Viewport có tỷ lệ Khác nhau. Ví dụ trong 1 bản vẽ mình vẽ 2 cấu kiện cùng vẽ tỷ lệ 1/1 nhưng sang Layout một cái tỷ lệ 1/1 một cái tỷ lệ 1/2.

Hướng lisp có thể phát triển kiểu cho tạo nhiều lần xuất sang Layout, mỗi lần xuất một tỷ lệ khác nhau, lần xuất sau không xóa Viewport của lần xuất trước và vào cùng 1 Layout là giải quyết được vấn đề trên. (Hiện nay các lisp ở các bài trước cứ tạo lại Viewport là nó xóa cái đã tạo trước đó.

Đây là file bản vẽ mô tả kèm theo: https://www.dropbox.com/s/zwjww9rx65zkzc7/Tru%20cau.dwg

Cảm ơ các 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

File đính kèm là bản vẽ + khung tên + Lisp để cho bác nào có nhu cầu thì dùng thử rồi cho ý kiến để hoàn thiện Lisp nhé. Đang viết dở nên chưa post code lên. Khi nào hoàn thành bản cuối cùng sẽ chia sẻ cho các bác. Đây chỉ là bản Demo thôi. Bản vẽ dùng để Test là của bạn Khaosatheco. 

Sơ qua về Lisp tí:

1. Lệnh TLO để chạy. Hộp thoại hiện ra như sau:

71162_tlo.jpg

2. Sau đó chọn máy in, khổ giấy, Style

3. Chọn Khung View và tim tuyến bên Model

4. Có thể lựa chọn khung tên Xref hoặc Block

5. Có thể in ngay ra máy in nhưng chương trình sẽ dừng lại ở phần tạo ra các layout để người sử dụng kiểm soát lỗi trước khi in ấn.

6. Sau khi chạy Lisp sẽ điền Lý trình đầu cuối và Lý trình đoạn tuyến vào khung tên, đồng thời tự động đánh số bản vẽ. 

7. Khi chọn khung view bên Model cho dù có chọn xuôi hay ngược thì khi sắp xếp Layout, bản vẽ có lý trình nhỏ sẽ xếp trước sau đó tăng dần đến lý trình lớn nhất.

Xin chào anh KangKung.

Anh cho em hỏi lisp TLO chạy trên nền cad nào vậy anh.

Em load và chạy TLO nhưng ko được anh ơi. Không biết nó bị lỗi gì nữa. Bấm TLO->Enter nhưng dòng command ko hiển thị gì hết

Mong anh xem lại giúp em thử. Hay là do cad em bị thiếu gì ko nữa. Em dùng cad 2005 và cad2007 đều ko được

Mong anh hoàn thiện lisp này và có thể chia sẻ cho mọi người.

Cái lisp này như anh giới thiệu sẽ rất hữu ích cho anh em làm giao thông khi vào bình đồ dạng tuyến để in ấn.

Chân thành cảm ơn anh.

Chúc anh và mọi người sức khỏe và thành công

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 bổ sung thêm chức năng tự rải khung view ( là khung dc chọn trong quá trình thực hiện lisp) theo tim tuyến luôn đi 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

Chào bạn KangCung và bạn Nhoclangbat. Mình theo dõi topic và thấy hai bạn rất nhiệt tình giúp đỡ anh em. Tuy Lisp tạo Viewport từ khung chọn bên Model là của bạn Tùng yêu cầu nhờ viết nhưng lại được rất nhiều anh em quan tâm vì được ứng dụng nhiều trong dân kỹ thuật anh em mình.

Mình thấy Lisp ở #67 tạo các khung ViewPort sang Layout là hình chữ nhật (mặc dù bên Modul khung ko phải hình chữ nhật). Ở #69 thì Khung bên Modul thế nào sang Layout khung hình y nguyên thế đó.

Vậy hai bạn cho mình ké cửa nhờ sửa lại đôi chút theo ý mình như sau:

1.Vieweport bên Layout giống hệt khung bên Modul (cái này lisp #69 Oki rồi).

2.Xuất ra các Viewport có tỷ lệ Khác nhau. Ví dụ trong 1 bản vẽ mình vẽ 2 cấu kiện cùng vẽ tỷ lệ 1/1 nhưng sang Layout một cái tỷ lệ 1/1 một cái tỷ lệ 1/2.

Hướng lisp có thể phát triển kiểu cho tạo nhiều lần xuất sang Layout, mỗi lần xuất một tỷ lệ khác nhau, lần xuất sau không xóa Viewport của lần xuất trước và vào cùng 1 Layout là giải quyết được vấn đề trên. (Hiện nay các lisp ở các bài trước cứ tạo lại Viewport là nó xóa cái đã tạo trước đó.

Đây là file bản vẽ mô tả kèm theo: https://www.dropbox.com/s/zwjww9rx65zkzc7/Tru%20cau.dwg

Cảm ơ các bạn.

Các bác giúp tiếp em vấn đề trên 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

ah nhoc quên là bên model tất cả đều là tỉ lệ 1:1  nha anh, chỉ khi chọn khung đó rùi qua layout mới mang các tỉ lệ kia ^^

104473_22222222_2.jpg

 

@Nhoclangbat, Nhóc đã tự xử được vụ này chưa? :)

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 Conghoa ^^, nhoc đã chỉnh đc phần thô, chọn khung bên model rùi tạo viewport bên layout tương ứng với khu đã chọn và tỉ lệ do mình nhập như hình nhoc đăng, nhoc chỉnh theo ý tưởng lúc đầu của nhoc giống hình đó là mình có sẵn các khung bên model , gọi lệnh sẽ hỏi chọn khung sau đó nhập tỉ lệ cho khung đó, nhập xong sẽ tự chuyển qua layout cho mình chọn điểm đặt khung chọn xong quay trở về lại model cho mình chọn khung tiếp theo, cứ tiếp tục vậy khi nào xong thì phải chuột kết thúc lệnh, bạn test trước xem nhé ^^

(defun Makepline (listpoint closed Layer Linetype LTScale xdata / Lst)
	(setq Lst (list '(0 . "LWPOLYLINE")'(100 . "AcDbEntity")
	(cons 8 (if Layer Layer (getvar "Clayer")))
	(cons 6 (if Linetype Linetype "bylayer"))
	(cons 48 (if LTScale LTScale 1))
	'(100 . "AcDbPolyline")
	(cons 90 (length listpoint))
	(cons 70 (if closed 1 0))))
	(foreach PP listpoint	(setq Lst (append Lst (list (cons 10 PP)))))
	(if xdata (setq Lst (append lst (list (cons -3 (list xdata))))))
	(entmakex Lst))
	;end;=================================
;;;;;;;;;;;
(defun _layer2 ( name colour )
    (if (null (tblsearch "LAYER" name))
        (entmake
            (list
               '(0 . "LAYER")
               '(100 . "AcDbSymbolTableRecord")
               '(100 . "AcDbLayerTableRecord")
               '(70 . 0)
                (cons 2 name)
                (cons 62 colour)
            )
        )
    )
)
; ham luu gia tri
(defun getvalue ( a giatri dongnhac / astr) 
(or a (setq a giatri))
(cond
	((= (type a) 'INT) (setq a (cond ((getint (strcat "\n" dongnhac "(" (itoa a) ") :")))(a))))
	((= (type a) 'REAL) (setq a (cond ((getreal (strcat "\n" dongnhac "(" (rtos a 2 0) ") :")))(a))))
	((= (type a) 'STR) (setq a (cond ((= "" (setq astr (getstring 1 (strcat "\n" dongnhac " (" a "): ")))) a) (astr))))
))
;;;;
;============================================================
;========LISP TAO VIEWPORT TREN LAYOUT BANG CACH CHON O MODEL========
;=========================REV4ii=====================================
(defun C:mtll( / os lst khung X_min Y_min X_max Y_max X index taphop pt1)
(vl-load-com)
(if (null (tblsearch "LAYER" "khung")) (_layer2 "Khung" 3))
  (command "UNDO" "BE")
  (setq os(getvar "OSMODE"))
  (setvar "OSMODE" 0)
  (while (/= (setq taphop (ssget "+.:E:S" '((0 . "LWPOLYLINE")))) nil)
  (progn
   (setq tyleVT (getvalue tyleVT 1000.0 "Nhap ty le ban do: "))
  (command "LAYOUT" "S" "Layout1")
  (setq pt1 (getpoint "\nchon diem dat khung"))
  (command "ZOOM" "E")
    (setq khung (ssname taphop 0))
    (setq lst (cdr (acet-geom-vertex-list khung)))
    (setq X_min 1000000000
      Y_min 1000000000
      X_max -1000000000
      Y_max -1000000000)
    (foreach a lst
      (if (< (car a) X_min) (setq X_min (car a)))
      (if (< (cadr a) Y_min) (setq Y_min (cadr a)))
      (if (> (car a) X_max) (setq X_max (car a)))
      (if (> (cadr a) Y_max) (setq Y_max (cadr a)))
      )
    (command "LAYOUT" "S" "Layout1")
    (command "ZOOM" "W" (list X_min Y_min) (list X_max Y_max))
    (makepline lst 1 "Khung" nil nil nil)
    (command "MOVE" (entlast) "" (list X_min Y_min) (list (car pt1) 0))
    (command "ZOOM" "W" (list 0 0) (list (+ (car pt1) 100) 0))
    (command "SCALE" (entlast) "" (list (car pt1) 0) (/ 1000 tyleVT))
    (command "MVIEW" "O" (entlast))
    (command "MSPACE")
    (command "ZOOM" (list X_min Y_min) (list X_max Y_max))
    (command "PSPACE")
	(command "MVIEW" "L" "on" (entlast) "")
    (command "ZOOM" "W" (list 0 0) (list (+ (car pt1) 100) 0))
    (command "MODEL")
    ) ;ene progn while
	) ; end while
  (command "MODEL")
  (command "UNDO" "END")
  (setvar "OSMODE" os)
  (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

Thanks Nhoclangbat vì đã hỗ trợ mình tiếp chủ đề này. Có một số ý kiến sau khi dùng thử như sau:

- Bạn có thể đơn giản hóa việc đặt tỉ lệ được không, ví dụ: muốn vẽ tỉ lệ 1:25 thì chỉ cần nhập 25 là được.

- Layout1 là layout mặc định bạn đang để khi "Chọn điểm đặt khung": Có thể hiện 1 bảng có các layout có sẵn trong bản vẽ, muốn đặt khung viewport vào đâu thì chọn layout đó được không?

- Điều cuối cùng để lisp được hoàn thiện là:

B1. Chạy lisp

B2. Lisp yêu cầu chọn khung

B3. Lisp yêu cầu nhập tỉ lệ

Trong phần này có thêm mục như sau: "Nhập tỉ lệ bản vẽ (K/XXX):" trong đó mặc định nếu chọn K thì kết thúc chương trình, nếu chọn số thì sẽ lưu vào XXX

B3. Người dùng chọn khung và tỉ lệ

B4. Lisp lại tiếp tục yêu cầu như B2

B5. Người dùng kết thúc vòng lặp chọn bằng cách chọn K

B6. Lisp yêu câu chọn layout cân chèn các khung viewport

B7. Người dùng chọn layout cần chèn, chèn xong lísp tự động quay lại Model và lặp lại B2.

 

Mình có vài điểm như trên, Nhoclangbat thấy ổn thì giúp mình tiếp nhé.

Thanks!

B1. Chạy lisp
B2. Lisp yêu cầu chọn khung và tỉ lệ trên model
B3. Người dùng chọn khung và tỉ lệ
B4. Lisp lại tiếp tục yêu cầu như B2
Kết thúc vòng lặp yêu cầu chọn bằng ký tự nào đó
B5. Lisp Hiện ra một bảng thống kê các layout có trong bản vẽ để người dùng chọn Layout để chèn khung viewport
B6. Lisp chèn khung xong, trở lại trang Model và tiếp tục lặp lại B2.
Kết thúc lệnh bằng Esc.
 
Có một số ý tưởng như thế không biết Nhoclangbat thấy thế nào :)
B1. Chạy lisp
B2. Lisp yêu cầu chọn khung và tỉ lệ trên model
B3. Người dùng chọn khung và tỉ lệ
B4. Lisp lại tiếp tục yêu cầu như B2
Kết thúc vòng lặp yêu cầu chọn bằng ký tự nào đó
B5. Lisp Hiện ra một bảng thống kê các layout có trong bản vẽ để người dùng chọn Layout để chèn khung viewport
B6. Lisp chèn khung xong, trở lại trang Model và tiếp tục lặp lại B2.
Kết thúc lệnh bằng Esc.
 
Có một số ý tưởng như thế không biết Nhoclangbat thấy thế nào :)
B1. Chạy lisp
B2. Lisp yêu cầu chọn khung và tỉ lệ trên model
B3. Người dùng chọn khung và tỉ lệ
B4. Lisp lại tiếp tục yêu cầu như B2
Kết thúc vòng lặp yêu cầu chọn bằng ký tự nào đó
B5. Lisp Hiện ra một bảng thống kê các layout có trong bản vẽ để người dùng chọn Layout để chèn khung viewport
B6. Lisp chèn khung xong, trở lại trang Model và tiếp tục lặp lại B2.
Kết thúc lệnh bằng Esc.
 
 

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 vì mình làm bên địa chính nên cách quy ước tỷ lệ có thể khác bên cơ khí hay xây dựng

- mình chưa hiểu chỗ (k/xxx), k ở đây là gì, và xxx nữa

- còn phần chọn layout để chèn, nhoc sẽ thử nghiên cứu ^^ 

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

Như trong lisp cũ của Nhoclangbat thì XXX tương ứng với tỉ lệ nhập vào được lưu lại, còn K ở đấy là biến để thoát khỏi vòng lặp chọn khung viewport. Nếu ko có biến K đó thì Nhoclangbat có cách nào để thoát khỏi vòng lặp chọn khung viewport ko :). Bạn đọc kỹ lại các bước mình viết thì sẽ biết K để làm gì :).

 

ps: ý của các bước mình ghi là có thể chọn 1 loạt khung viewport với tỉ lệ khác nhau trên model sau đó mới chèn sang layout, chứ không phải làm từng cái 1 như lisp của Nhoclangbat đã viết

 

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

- hi ^^ hiểu rùi, sr Conghoa hen chắc phải chờ mấy anh ra tay tượng trợ vậy ^^

- số lượng khung chọn bên nhoc ko nhiều vậy và chỉ cần chèn trong 1 layout duy nhất, nên lsp nó đơn giản hơn ^^

- Conghoa thì mún nó mở rộng hơn, nó hơi vượt sức nhoc  :P

- 1:  việc chọn 1 lúc nhiều khung bên model rùi set tỉ lệ cho từng khung, nhoc chưa pit cách nào để nó lưu khung chọn với tỉ lệ gán vào khung đó rùi chọn khung khác, lúc đầu nhoc cũng nghĩ vậy tiện hơn mà ko pit nên đành cái nào dứt điểm cái đó ^^

- 2 : việc chọn layout nãy giờ nhoc cũng đang mò, nhoc chỉ có cách cho người dùng nhập số thứ tự các layout trong bản vẽ để set, chưa mò ra cách trực quan như bạn nói là hiện danh sách các layout hiện có để chọn ^^

- 3: nhoc thấy ko cần biến K, chỉ cần enter or phải chuột để thoát chọn rùi chạy đến thằng tiếp theo là chọn layout để chèn.

- 4: tới lượt thằng pick chèn mỗi lần sẽ lặp lại 2 bước chọn layout, chọn điểm pick, đến khi chọn layout = nil, thì nhảy về model chọn khung tiếp ^^

-P/s: sr hiện tại nhoc chưa giúp đc bạn thông cảm, dạo này nhoc cũng bị hồ sơ dí quá ^^, khi nào rãnh nhoc sẽ thử nghiên cứu, giờ up up mong các anh ghé ngang tâm trạng vui vẻ giúp đc bạn

  • 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

lisLisp rất hay ạ.nhưng nếu khung bản vẽ bên model có cái xoay ngang, cái xoay dọc mà mình muốn khi sang bên layout nó xoay ngang.mong bạn nhok sửa nđược không.Vì bình đồ tuyến đường rất ngoằn ngoèo.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

 

Lisp mới tạo viewport cho tất cả hình chữ nhật có cạnh nằm ngang, đứng, ... ngồi biggrin.png hoặc nghiêng. Sơ qua về các đặc điểm của Lisp này:

1. Tạo viewport cho tất cả các khung hình chữ nhật

2. Thêm lựa chọn Xref khung tên bản vẽ

3. Các viewport được sắp xếp theo phương đứng thay vì phương ngang như các Lisp trước

Bác nào có nhu cầu thì down về rồi test thử và cho ý kiến nhé.

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

P/S: Lisp này sẽ giảm rất nhiều thao tác và thời gian cho những ai biên tập bản đồ khu vực rộng đặc biệt là bản đồ dạng tuyến. 

Bạn KangKung có thể chỉnh lại tỉ lệ khi xuất qua layout giúp mình với

Ví dụ: bên model có các khung (A3) có kích thước lần lượt là: (4200, 2970), (6300, 4455), (8400, 5940), ... gõ lệnh mtl->chọn đối tượng->nhập tỉ lệ->có muốn chèn khung tên hay không. 

Ngay chỗ chọn tỉ lệ bạn chỉnh lại sao cho:

1/ nếu ta chọn khung (4200, 2970) trước và nhập tỉ lệ là 10 thì khi xuất qua layout tất cả các khung view đều có kích là(420, 297)-> các khung view có cùng 1 chủng loại kích thước thì dễ quan sát.

2/ còn nếu ta chọn khung (6300, 4455) trước và nhập tỉ lệ là 10 thì khi xuất qua layout tất cả các khung view đều có kích là(630, 445.5)-> các khung view có cùng 1 chủng loại kích thước thì dễ quan sát.

-> Nói chung là các khung view xuất hiện bên layout đều cùng 1 chủng loại kích thước(lấy theo kích thước mà ta chọn lần đầu tiên bên model theo tỉ lệ ta nhập vào)

Thaks bạn! Chúc bạn cuối tuần vui vẻ. 

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

 

Lisp mới tạo viewport cho tất cả hình chữ nhật có cạnh nằm ngang, đứng, ... ngồi biggrin.png hoặc nghiêng. Sơ qua về các đặc điểm của Lisp này:

1. Tạo viewport cho tất cả các khung hình chữ nhật

2. Thêm lựa chọn Xref khung tên bản vẽ

3. Các viewport được sắp xếp theo phương đứng thay vì phương ngang như các Lisp trước

Bác nào có nhu cầu thì down về rồi test thử và cho ý kiến nhé.

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

P/S: Lisp này sẽ giảm rất nhiều thao tác và thời gian cho những ai biên tập bản đồ khu vực rộng đặc biệt là bản đồ dạng tuyến. 

@Nhoclangbat: Sẽ post Lisp theo yêu cầu của nhoc sau nhé.lí

Mình thấy lisp này rất hay rồi nhưng mình dùng sheetshet nên nhờ 2 pro là KangKun va Nhoclangbat giúp mình sửa líp #63-rev5 này thành mỗi layout là 1 viewport thì thất tuyệt vời, tôi 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
Chảo các anh. Nhờ các anh chỉnh sửa giúp lisp rev 2 này giúp mình với. Lisp này hiện tại đang đảo ngược thứ tự layout. Vd ở model sắp theo chiều ngang có 1 bản vẽ, từ trái qua phải. Thì layout tạo ra đầu tiên lại theo thứ tự từ phải sang trái. Thêm nữa, là chỉ chọn được trong model các hình chữ nhật nằm theo hàng ngang. Không chọn thêm một hàng khác được. Vậy nếu được nhờ cao nhân sửa lại giúp mình như sau:

 

1. Có thể chọn sẵn khung bên model (có thẻ là xref, rectangel...)

2. Có thể chọn nhiều khung cả theo phương ngang và dọc.

3. Từ các khung đã chọn bên model, tao layout theo thứ tự: Từ trái qua phải, từ trên xuống dưới.

 

Cảm ơn các anh nhiều.

P/s: các rev sau của lisp chuyển tất cả các khung trong model thành viewport của 1 layout. Nhưng mình cần mỗi khung là 1 layout. Do đó chỉ dùng được rev 2 này.

 

 

 

 


;========LISP TAO VIEWPORT TREN LAYOUT BANG CACH CHON O MODEL========

;===============REV2=====================
(defun C:mtl()
(command "UNDO" "BE")
(setvar "OSMODE" 0)
(setq taphop(ssget))
(if (= TenLayout nil)
(setq TenLayout1 "Layout")
(setq TenLayout1 TenLayout))
(setq TenLayout (getstring (strcat "\n Ten lay out: <" TenLayout1 "> ")))
(if (= TenLayout nil)
(setq TenLayout TenLayout1))
(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 size(getstring "\n Kho giay in A0/A1/A2/A3/A4?: "))
(setq soluong (sslength taphop))
(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 TenLayout (rtos i 2 0)))
(command "LAYOUT" "S" (strcat TenLayout (rtos i 2 0)))
(command "ERASE" "ALL" "")
(command "PASTECLIP" "0,0")
(command "SCALE" (entlast) "" "0,0" (/ 1 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)))) tyle) (/ (abs(- (cadr (nth 2 lst)) (cadr (nth 0 lst)))) tyle)) "1" "C" "Y" "acad" "Y" "N" "N" "N" "N" "Y" "N")
(command "MODEL")
(setq index (+ index 1))
)
(command "UNDO" "END")
(setvar "OSMODE" 15359)
(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
Chảo các anh. Nhờ các anh chỉnh sửa giúp lisp rev 2 này giúp mình với. Lisp này hiện tại đang đảo ngược thứ tự layout. Vd ở model sắp theo chiều ngang có 1 bản vẽ, từ trái qua phải. Thì layout tạo ra đầu tiên lại theo thứ tự từ phải sang trái. Thêm nữa, là chỉ chọn được trong model các hình chữ nhật nằm theo hàng ngang. Không chọn thêm một hàng khác được. Vậy nếu được nhờ cao nhân sửa lại giúp mình như sau:

 

1. Có thể chọn sẵn khung bên model (có thẻ là xref, rectangel...)

2. Có thể chọn nhiều khung cả theo phương ngang và dọc.

3. Từ các khung đã chọn bên model, tao layout theo thứ tự: Từ trái qua phải, từ trên xuống dưới.

 

Cảm ơn các anh nhiều.

P/s: các rev sau của lisp chuyển tất cả các khung trong model thành viewport của 1 layout. Nhưng mình cần mỗi khung là 1 layout. Do đó chỉ dùng được rev 2 này.

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 các anh. Nhờ các anh chỉnh sửa giúp lisp rev 2 này giúp mình với. Lisp này hiện tại đang đảo ngược thứ tự layout. Vd ở model sắp theo chiều ngang có 1 bản vẽ, từ trái qua phải. Thì layout tạo ra đầu tiên lại theo thứ tự từ phải sang trái. Thêm nữa, là chỉ chọn được trong model các hình chữ nhật nằm theo hàng ngang. Không chọn thêm một hàng khác được. Vậy nếu được nhờ cao nhân sửa lại giúp mình như sau:

 

1. Có thể chọn sẵn khung bên model (có thẻ là xref, rectangel...)

2. Có thể chọn nhiều khung cả theo phương ngang và dọc.

3. Từ các khung đã chọn bên model, tao layout theo thứ tự: Từ trái qua phải, từ trên xuống dưới.

 

Cảm ơn các anh nhiều.

P/s: các rev sau của lisp chuyển tất cả các khung trong model thành viewport của 1 layout. Nhưng mình cần mỗi khung là 1 layout. Do đó chỉ dùng được rev 2 này.

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 lisp này rất hay rồi nhưng mình dùng sheetshet nên nhờ 2 pro là KangKun va Nhoclangbat giúp mình sửa líp #63-rev5 này thành mỗi layout là 1 viewport thì thất tuyệt vời, tôi xin chân thành cám ơn

mong bác bớt chút thời gian

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ủa bạn đây.

 

71162_clo.jpg

 

Hướng dẫn: 

1. Lệnh CLO

2. Chọn máy in, khổ giấy, style...

3. Đặt tên Layout, tỉ lệ

4. Chọn các khung hình chữ nhật (Polyline) bên Model để tạo Viewport bên Layout. Khi quét chọn thì Lisp sẽ tự động căn các khung theo thứ tự từ trái sang phải.

5. Chọn Block hoặc file xref. Nếu không cần thì khỏi chọn.

6. Bấm OK, Lisp sẽ tạo mỗi bản vẽ trên một Layout.

;LISP TAO LAYOUT HANG LOAT BANG CACH CHON KHUNG VIEW BEN MODEL
(vl-load-com)
(defun Make_dcl	(/ ret)
  (if (= Printer nil) (setq Printer 0))
  (if (= Size nil) (setq Size 0))
  (if (= Style nil) (setq Style 0))
  (if (= Block nil) (setq Block 0))
  (if (= TenLayout nil) (setq TenLayout "Layout"))
  (if (= Tyle nil) (setq Tyle "1000"))
  (setq fl (vl-filename-mktemp "CLO" nil ".dcl"))
  (setq ret (open fl "w"))
  (write-line
    (strcat
      "CLO : dialog { label = \"Create Layout\";
      : column {
      : boxed_column {label = \"Page Setup\";
      : popup_list { key=\"Printer\"; label= \"Printer\";  value = \"" (itoa Printer) "\"; edit_width = 40;}
      : popup_list { key=\"PaperSize\"; label= \"Paper Size   \"; value = \"" (itoa Size) "\"; edit_width = 40;}
      : popup_list { key=\"Style\"; label= \"Style            \"; value = \"" (itoa Style) "\";edit_width = 40;}
      : edit_box {   key = \"LO_name\"; label = \"Layout Name  \"; value = \"" TenLayout "\";edit_width = 20;}
      : edit_box {   key = \"Tyle\"; label = \"Drawing Scale\"; value = \"" Tyle "\";edit_width = 20;}}
      : button { key = \"Chonkhung\"; label = \"Select Frame \"; }
      : boxed_column {
      label = \"\";
      :row {
      : button { key = \"TaoBlock\"; label = \"Create Title Block\"; is_default = false; width=30; fixed_width=true;}
      : popup_list {key=\"Block\"; label= \"Block\"; width=30; fixed_width=true; value = \"" (itoa Block) "\";}}
      : row {
      : button {key = \"Select_Xref\"; label = \"Xref Title Block\"; is_default = false; width=30; fixed_width=true;}
      : button {key = \"Remove\"; label = \"Remove Title Block\"; is_default = false; width=30; fixed_width=true;}}
      : list_box {label =\"\"; key = \"Xref_File\"; height = 3; value = \"0\";}
      }
      : boxed_row {
      : button { key = \"accept\"; label = \" OK \"; width=30; fixed_width=true; is_default = true;}
      : button { key = \"cancel\"; label = \"Cancel\"; is_default = false; is_cancel = true; width=30; fixed_width=true;}}}} "
    )
    ret
  )
  (setq ret (close ret))
)
(defun *error* (msg) (vl-file-delete fl))
(defun Chon ()
  (vl-file-delete fl)
  (setq taphop(ssget '((0 . "POLYLINE,LWPOLYLINE"))))
  (Make_dcl)
  (setq ddiag 3)
)
(defun TaoBlock (/ taphop pt)
  (vl-file-delete fl)
  (alert "Chon doi tuong de tao Block khung ten")
  (if (/= (setq taphop(ssget)) nil)
    (progn
      (setq pt(getpoint "\n Chon Base point cua Block: "))
      (setq ten(lisped "Nhap ten cua Block"))
      (while (/= (tblsearch "Block" ten) nil)
	(setq ten(lisped "Trung ten Block da co. Nhap ten khac cho Block")))
      (command "BLOCK" ten pt taphop "")
      (setq dsblock(cons "" (tablelist "Block")))
      ))
  (Make_dcl)
  (setq ddiag 3)
)
(defun Update ()
  (vla-put-ConfigName (ActLay) (nth (atoi (get_tile "Printer")) dsmayin))
  (setq dsPaper (PaperList))
  (start_list "PaperSize" 3)
  (mapcar 'add_list dsPaper)
  (end_list)
)
(defun Chon_Xref ()
  (if (not Path) (setq Path(getvar "dwgprefix")))
  (setq File(getfiled "Chon File khung ten" Path "dwg" 2))
  (if (/= File nil) (setq Path File dsFile (list File)))
  (start_list "Xref_File" 3)
  (mapcar 'add_list dsFile)
  (end_list)
  )
(defun Remove_Xref ()
  (setq File "" dsFile (list File))
  (start_list "Xref_File" 3)
  (mapcar 'add_list dsFile)
  (end_list)
  )
(defun ActLay () (vla-get-ActiveLayout(vla-get-activedocument(vlax-get-acad-object))))
(defun PlotDeviceNamesList ()
  (vla-RefreshPlotDeviceInfo (ActLay))
  (vlax-safearray->list(vlax-variant-value(vla-GetPlotDeviceNames (ActLay)))))
(defun PaperList (/ PLObj PSL)
  (setq PLObj (vla-GetCanonicalMediaNames (ActLay)))
  (foreach i (vlax-safearray->list (vlax-variant-value PLObj))
    (setq PSL (append PSL (list (vla-GetLocaleMediaName (ActLay) i))))))
(defun PlotStyleTableNamesList ()
  (vla-RefreshPlotDeviceInfo (ActLay))
  (vlax-safearray->list(vlax-variant-value(vla-GetPlotStyleTableNames(ActLay)))))
(defun tablelist (s / d r)
  (while (setq d (tblnext s (null d)))
    (setq r (cons (cdr (assoc 2 d)) r))))
(defun DeleteLayouts (/ layouts layout i)
  (vl-load-com)
  (setq	layouts	(vla-get-Layouts(vla-get-activedocument (vlax-get-acad-object))))
  (if (> (vla-get-count layouts) 2)
    (vlax-for layout layouts
      (if (= (vla-get-ModelType layout) :vlax-false)
	(if (< (vla-get-count (vla-get-block layout)) 2)
	  (vla-delete layout))))))
(setq dsmayin (PlotDeviceNamesList))
(setq dsStyle (PlotStyleTableNamesList))
(setq dsblock(cons "" (tablelist "Block")))
(defun hopthoai	()
  (setq dcl_id (load_dialog fl))
  (if (not (new_dialog "CLO" dcl_id)) (exit))
  (start_list "Printer" 3)
  (mapcar 'add_list dsmayin)
  (end_list)
  (Update)
  (action_tile "Printer" "(Update)")
  (action_tile "Chonkhung" "(setq ddiag 5)(saveVars)(done_dialog)")
  (action_tile "TaoBlock" "(setq ddiag 9)(saveVars)(done_dialog)")
  (start_list "Style" 3)
  (mapcar 'add_list dsStyle)
  (end_list)
  (start_list "Block" 3)
  (mapcar 'add_list dsBlock)
  (end_list)
  (start_list "Xref_File" 3)
  (mapcar 'add_list dsFile)
  (end_list)
  (action_tile "Select_Xref" "(Chon_Xref)")
  (action_tile "Xref_File" "(Chon_Xref)")
  (action_tile "Remove" "(Remove_Xref)")
  
  (action_tile "cancel" "(setq ddiag 1)(done_dialog)")
  (action_tile "accept" "(setq ddiag 2)(setq tieptuc 1)(saveVars)(done_dialog)" )
  (start_dialog)
  (unload_dialog dcl_id)
)
(defun saveVars	()
  (setq Printer (atoi (get_tile "Printer")))
  (setq Size (atoi (get_tile "PaperSize")))
  (setq Style (atoi (get_tile "Style")))
  (setq Tyle (get_tile "Tyle"))
  (setq Block (atoi (get_tile "Block")))
  
  (setq Printer1 (nth Printer dsmayin))
  (setq Size1 (nth Size (PaperList)))
  (setq Style1 (nth Style dsStyle))
  (setq TenLayout (get_tile "LO_name"))
  
  (setq Tyle1 (/ (atof (get_tile "Tyle")) 1000))
  (setq Block1 (nth Block dsBlock))
)
(defun C:CLO (/ os)
  (setvar "CMDECHO" 0)
  (command "UNDO" "BE")
  (setq os(getvar "OSMODE"))
  (setvar "OSMODE" 0)
  (setvar "TILEMODE" 1)
  (setq dsblock(cons "" (tablelist "Block")))
  (if (= File nil) (setq dsFile (list "")))
  (setq tieptuc 0)
  (Make_dcl)
  (setq ddiag 3)
  (while (= ddiag 3)
    (hopthoai)
    (if	(= ddiag 5) (Chon))
    (if	(= ddiag 9) (TaoBlock))
  )
  (vl-file-delete fl)
  (if (= tieptuc 1)
    (progn
      (Sapxepkhung)
      (Make_Layout)
      (DeleteLayouts)
      )
    )
  (setvar "OSMODE" os)
  (command "UNDO" "END")
  (princ)
  )
(defun Sapxepkhung(/ index khung S1 S2 D1 D2)
  (setq index 0)
  (setq lst_Khung(list))
  (setq S1 0 S2 0)
  (while (< index (sslength taphop))
    (setq khung (ssname taphop index))
    (setq lst_Khung(append lst_Khung (list(list khung S1 S2))))
    (setq index (1+ index))
    )
  (setq lst_Khung(vl-sort lst_Khung '(lambda (e1 e2) (< (cadr(assoc 10 (entget(car e1)))) (cadr(assoc 10 (entget(car e2))))))))
  )
(defun Make_Layout (/ disp index khung lst pt0 pt1 pt2 pt3 P1 P2)
  (setq disp(getenv "CreateViewports"))
  (setenv "CreateViewports" "0")
  (setq index 1)
  (foreach khung1 lst_Khung
    (setq khung (car khung1))
    (setq lst (acet-geom-vertex-list khung))
    (setq lst (vl-sort lst '(lambda(e1 e2) (if (/= (car e1) (car e2)) (< (car e1) (car e2)) (< (cadr e1) (cadr e2))))))
    (setq pt0 (nth 0 lst) pt3 (nth 3 lst))
    (if	(> (cadr (nth 1 lst)) (cadr (nth 2 lst)))
      (setq pt1	(nth 1 lst) pt2	(nth 2 lst))
      (setq pt1	(nth 2 lst) pt2	(nth 1 lst)))
    (command "LAYOUT" "N" (strcat TenLayout (itoa (+ 0 index))))
    (command "LAYOUT" "S" (strcat TenLayout (itoa (+ 0 index))))
    (command "ERASE" "ALL" "")
    (if (/= File nil) (command "xref" "A" file (list 0 0) "" "" ""))
    (if (/= Block1 "") (command "INSERT" Block1 (list 0 0) "" "" ""))
    (command "ZOOM" "E")
    (if	(> (distance pt2 pt0) (distance pt1 pt0))
      (command "RECTANG"  (list 0 0) (list (/ (distance pt2 pt0) tyle1) (/ (distance pt1 pt0) tyle1)))
      (command "RECTANG"  (list 0 0) (list (/ (distance pt1 pt0) tyle1) (/ (distance pt2 pt0) tyle1)))
      )
    (command "MVIEW" "O" (entlast))
    (command "MSPACE")
    (if	(> (distance pt2 pt0) (distance pt1 pt0))
      (command "DVIEW" khung "" "TW" (- 90 (* (/ (angle pt0 pt1) pi) 180)) "")
      (command "DVIEW" khung "" "TW" (- 0 (* (/ (angle pt0 pt1) pi) 180)) ""))
    (command "ZOOM" "W" pt0 pt3)
    (command "PSPACE")
    (command "ZOOM" "E")
    (Setq P1 (Getvar "EXTMIN") P2 (Getvar "EXTMAX"))
    (command "PLOT" "Y" "" printer1 size1 "M" "L" "N" "W" P1 P2 "1" "C" "Y" Style1 "Y" "N" "N" "N" "N" "Y" "N")
    (command "MODEL")
    (setq index (+ index 1))
  )
  (setenv "CreateViewports" disp)
  (princ)
)
(princ "\n           Type CLO to run program\n")

  • Vote tăng 4

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

@KangKung bác giúp em cái này được không? Nội dung có post trong bài dưới

 

http://www.cadviet.com/forum/topic/164120-yeu-cau-tach-nhieu-mview-trong-1-layout-thanh-cach-layout-rieng-biet/

 

Em xin trích lại nội dung:

"Chào các bạn, 

Hiện tại mình có khá nhiều bản vẽ mà trong layout lại có nhiều khung Mview. Mình có tìm trên diễn đàn mà chưa có cách nào để tách nhanh khung mview thành các Layout riêng biệt mà vẫn giữ nguyên các thiết lập freeze của mview đó.
Các bạn giúp mình viết một lisp sau nhé:

1. Chạy lisp
2. Lisp yêu cầu người dùng chọn các khung mview cần tách
3. Người dùng chọn các khung mview
4. Lisp yêu cầu điền tên layout mới được tạo (ví dụ đặt tên là KH, thì các layout được tạo sẽ là KH1, KH2... đến khi hết khung Mview thì thôi)
5. Kết thúc lisp, lisp sẽ tách theo yêu cầu

Ghi chú: các layout mới được tạo từ các khung mview vẫn giữ nguyên các thiết lập về việc freeze layer của mview gốc.

Cảm ơn các bạn nhiều!


File ví dụ của mình:
- Trong file có layout Test có nhiều khung Mview, và các layout KH_1 ..v.v. là layout mong muốn khi thực hiện lisp
http://www.cadviet.com/upfiles/6/1969_drawing1.dwg "

Cảm ơn bác trước nhé!

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

Hình như mình đã từng làm cái #123 rồi.

 

 

@Quocmanh04tt mình có xem phần lớn các lisp bạn post và cái mà bạn bảo hình như đó lại là tách nhiều bản vẽ trong layout ra làm thành các file riêng thì phải.

 

Cái mình post bên trên là trong 1 layout có nhiều viewport, lisp sẽ tách các viewport đó (đã thiết lập việc freeze layer) ra thành các layout riêng vẫn giữ nguyên các thiết lập của viewport đó.

 

Các bác giúp em nhé!

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

×