Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
vothanhdn

Lisp Bind Xref các bản vẽ đang mở

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

Chào mọi người

 

Mình có vấn đề nhờ mọi người giúp. Mình muốn Bind tất cả các bản vẽ có các Xref trong đó. Nghĩa là trong tất cả các file mình đang mở, file nào có chứa Xref đều Bind ra bản vẽ hiện hành hết. Vấn đề này hơi khó, nhờ mọi người giúp mình với 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 mọi người Mình có vấn đề nhờ mọi người giúp. Mình muốn Bind tất cả các bản vẽ có các Xref trong đó. Nghĩa là trong tất cả các file mình đang mở, file nào có chứa Xref đều Bind ra bản vẽ hiện hành hết. Vấn đề này hơi khó, nhờ mọi người giúp mình với nhé. Cám ơn.

Hề hề hề,

Không hiểu ý của bạn bởi vì lisp chỉ làm việc với file bản vẽ hiện hành có load lisp, còn các bản vẽ khác cho dù đang mở hay đóng nó đâu có thèm quan tâm nhể????

  • 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

Hề hề hề,

Không hiểu ý của bạn bởi vì lisp chỉ làm việc với file bản vẽ hiện hành có load lisp, còn các bản vẽ khác cho dù đang mở hay đóng nó đâu có thèm quan tâm nhể????

 

Thanks a. Vì e cần Bind số lượng lớn các bản vẽ ra. Nếu lisp không xử lý được tất cả bản vẽ thì có cách nào khác không a. Hay là lisp xử lý Bind trên 1 bản vẽ thì cũng nhanh hơ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

1). Bạn post bài nhiều rồi mà vẫn post sai quy định của box autolisp nên rất dễ bị mod xóa. Chú ý lần sau nhé!

2). Thử cái này xem, dùng để bind các xref trong modelspace của bản vẽ hiện hành.


 

(defun C:BX(/ tmp)
 (vl-load-com)
 (vlax-for objs (vla-get-ModelSpace (vla-get-activedocument (vlax-get-acad-object)))
  (if
   (and
    (= (vla-get-ObjectName objs) "AcDbBlockReference")
    (vlax-property-available-p objs 'Path)
    (setq tmp (vla-Item  (vla-get-Blocks (vla-get-ActiveDocument (vlax-get-Acad-Object))) (vla-get-Name objs)))
    (not (assoc 71 (entget (tblobjname "block" (vla-get-Name objs))))))
   (vla-Bind tmp :vlax-true)))
 (princ))
  • Vote tăng 3

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

 

1). Bạn post bài nhiều rồi mà vẫn post sai quy định của box autolisp nên rất dễ bị mod xóa. Chú ý lần sau nhé!

2). Thử cái này xem, dùng để bind các xref trong modelspace của bản vẽ hiện hành.


 

(defun C:BX(/ tmp)
 (vl-load-com)
 (vlax-for objs (vla-get-ModelSpace (vla-get-activedocument (vlax-get-acad-object)))
  (if
   (and
    (= (vla-get-ObjectName objs) "AcDbBlockReference")
    (vlax-property-available-p objs 'Path)
    (setq tmp (vla-Item  (vla-get-Blocks (vla-get-ActiveDocument (vlax-get-Acad-Object))) (vla-get-Name objs)))
    (not (assoc 71 (entget (tblobjname "block" (vla-get-Name objs))))))
   (vla-Bind tmp :vlax-true)))
 (princ))

Thanks a.

Ah, xin lỗi vì mình quên mất ghi "[Yêu cầu]" vào tên Topic, bây giờ không sửa được tự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

Lisp của bác Hà chỉ bind toàn bộ xref trong model, còn trong layout thì nó ignore (Cái này hình như bác sưu tầm ở đâu đó ^ ^).

Chắc vothanhdn muốn bind toàn bộ để gửi cho người khác? Có thể dùng lệnh etransmit, chọn thêm lựa chọn Bind là xong.

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 của bác Hà chỉ bind toàn bộ xref trong model, còn trong layout thì nó ignore (Cái này hình như bác sưu tầm ở đâu đó ^ ^).

Chắc vothanhdn muốn bind toàn bộ để gửi cho người khác? Có thể dùng lệnh etransmit, chọn thêm lựa chọn Bind là xong.

 

Nghĩa là thế nào hả bạn. mình dùng etransmit không có lựa chọn Bind

Lisp trên muốn sửa lại để chạy với tất cả layout cũng chắc cũng đơn giản 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

Cách đơn giản nhất để Bind tất cả các bản vẽ (kể cả Model lẫn Layout):

(command "XREF" "B" "*")

 

Mình dùng cả Etransmit và dòng lệnh của bạn cũng không có kết quả Bind các bản vẽ trong Windows của CAD.

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ên topic không hợp lệ, nhưng hơn hai tuần rồi topic vẫn còn (không bị xóa) chắc là mod bỏ qua rồi.

gửi bạn Lisp bind xref cho file hiện hành.

Nếu OK thì việc dùng cho các file đang mở chỉ là chuyện nhỏ.

(defun c:XrefBind ()
  (vlax-map-Collection (vla-get-Blocks (vla-get-ActiveDocument (vlax-get-acad-object)))
    '(lambda (b)
       (if (= (vla-get-IsXRef b) :vlax-true)
	 (vl-catch-all-error-p
	   (vl-catch-all-apply 'vla-bind (list b :vlax-true)  ) )  )  )  ))
  • 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

 

Tên topic không hợp lệ, nhưng hơn hai tuần rồi topic vẫn còn (không bị xóa) chắc là mod bỏ qua rồi.

gửi bạn Lisp bind xref cho file hiện hành.

Nếu OK thì việc dùng cho các file đang mở chỉ là chuyện nhỏ.

(defun c:XrefBind ()
  (vlax-map-Collection (vla-get-Blocks (vla-get-ActiveDocument (vlax-get-acad-object)))
    '(lambda (b)
       (if (= (vla-get-IsXRef b) :vlax-true)
	 (vl-catch-all-error-p
	   (vl-catch-all-apply 'vla-bind (list b :vlax-true)  ) )  )  )  ))

 

Mình đã dùng thử lisp và thấy rất hay nhưng lisp có 1 hạn chế. Đó là những layer đã bị đóng băng hay tắt đi rồi nhưng khi dùng lisp để bind ra thì nó lại hiện hết cả ra, làm bản vẽ không đúng như ban đầu nên không dùng được nữa. bạn có thể sửa lỗi đó 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

Mình đã dùng thử lisp và thấy rất hay nhưng lisp có 1 hạn chế. Đó là những layer đã bị đóng băng hay tắt đi rồi nhưng khi dùng lisp để bind ra thì nó lại hiện hết cả ra, làm bản vẽ không đúng như ban đầu nên không dùng được nữa. bạn có thể sửa lỗi đó không?

Nếu dùng lisp của Mr.Ha thì :

Bạn thay dòng : (vla-Bind tmp :vlax-true)

bằng dòng (vla-Bind tmp :vlax-false)

 

dùng lisp của Gia_Bach thì :

Bạn thay dòng : (list b :vlax-true)

bằng dòng (list b :vlax-false)

Chỉnh sửa theo gia_bach
  • 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ái này mình rất yê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

 

Tên topic không hợp lệ, nhưng hơn hai tuần rồi topic vẫn còn (không bị xóa) chắc là mod bỏ qua rồi.

gửi bạn Lisp bind xref cho file hiện hành.

Nếu OK thì việc dùng cho các file đang mở chỉ là chuyện nhỏ.

(defun c:XrefBind ()
  (vlax-map-Collection (vla-get-Blocks (vla-get-ActiveDocument (vlax-get-acad-object)))
    '(lambda (b)
       (if (= (vla-get-IsXRef b) :vlax-true)
	 (vl-catch-all-error-p
	   (vl-catch-all-apply 'vla-bind (list b :vlax-true)  ) )  )  )  ))

 

Lisp này rất là hay tuy nhiên chỉ bind được file đang mở. Mình làm với 1 bên kiến trúc, mỗi mặt bằng họ làm 1 file do đó để bind được hết cũng mất rất nhiều thời gian

Mình thấy Lee Mac có 1 lisp rất hay là copy một số đối tượng vào nhiều file mà không cần mở những file đó ra (lisp đính kèm)

Do đó mình nhờ các bạn cải thiện lisp bind trên theo hướng có thể bind bản vẽ mà không cần mở như của LeeMac thì tuyệt vời

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

P/s: bạn Tot77 đã cải tiến lisp bind trên với 1 lựa chọn là có thể chọn đối tượng để bind hoặc bind tất cả. Các bạn cải tiến lisp của bạn Tot77 theo hướng là không cần mở bản vẽ mà vẫn bind được thì tuyêt nhất

 

http://www.mediafire.com/download/du0mgjnbwqbdb86/Copy2DrawingsV1-2.lsp

http://www.mediafire.com/download/t5soxppm4q3w4dg/bind_xref.lsp

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 này rất là hay tuy nhiên chỉ bind được file đang mở. Mình làm với 1 bên kiến trúc, mỗi mặt bằng họ làm 1 file do đó để bind được hết cũng mất rất nhiều thời gian

Mình thấy Lee Mac có 1 lisp rất hay là copy một số đối tượng vào nhiều file mà không cần mở những file đó ra (lisp đính kèm)

Do đó mình nhờ các bạn cải thiện lisp bind trên theo hướng có thể bind bản vẽ mà không cần mở như của LeeMac thì tuyệt vời

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

P/s: bạn Tot77 đã cải tiến lisp bind trên với 1 lựa chọn là có thể chọn đối tượng để bind hoặc bind tất cả. Các bạn cải tiến lisp của bạn Tot77 theo hướng là không cần mở bản vẽ mà vẫn bind được thì tuyêt nhất

 

http://www.mediafire.com/download/du0mgjnbwqbdb86/Copy2DrawingsV1-2.lsp

http://www.mediafire.com/download/t5soxppm4q3w4dg/bind_xref.lsp

bác cho em xin lại cái link die mất rồi bác cảm ơn bác nhiều nha

 

bác proconeng86 

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


×