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

Xin lisp tách và ghép bản vẽ

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

Tôi hay làm việc với công trình dạng tuyến (giao thông). Khi vẽ mặt cắt Địa chất công trình dọc tuyến thường phải chia nhỏ ra từng bản vẽ theo ý muốn. Tôi thấy trong Nova có đoạn lisp thực hiện được công việc đó.

Không hiểu có bác nào có đoạn lisp đó không vậ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
Tôi hay làm việc với công trình dạng tuyến (giao thông). Khi vẽ mặt cắt Địa chất công trình dọc tuyến thường phải chia nhỏ ra từng bản vẽ theo ý muốn. Tôi thấy trong Nova có đoạn lisp thực hiện được công việc đó.

Không hiểu có bác nào có đoạn lisp đó không vậy?

Bạn có thể upload 1 file mẫu lên diễn đàn được không? Cho chúng tôi có hình dung.

 

Chỉ cần là 2 hoặc 3 khung tên thôi.

File DWG gồm 2 phần, phần 1 là trước khi tách, phần 2 là sau khi tách.

 

Có thể làm theo cách: block bản vẽ lại, sau đó xclip từng phần của bản vẽ vào từng khung tên 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

Như hình dưới đây bác ơi. Ban đầu có bản vẽ dài (đủ cả các dạng đối tượng trong autocad), em tạo 3 khung và tách ra 3 bản vẽ riêng biệt (như hình phía dưới).

 

Tachbanve.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

Lệnh MX (MultiXclip) dưới đây có thể sẽ giúp bạn.

 

Lệnh này yêu cầu bạn pick vào 1 block, sau đó yêu cầu bạn nhập các rectangle khung. Lệnh sẽ tạo ra các block bị cắt cúp trong các khung rectangle vừa bạn vừa nhập. Nếu công trình dạng tuyến của bạn chưa phải là block, bạn phải block nó trước khi dùng lệnh này.

 

(defun c:mx (/ ent ssr lstr tt)
 (setq
   ent	(car (entsel "\nHay pick vao block: "))
   tt	(entget ent)
   tt	(vl-remove '(102 . "{ACAD_XDICTIONARY") tt)
   tt	(vl-remove (assoc 360 tt) tt)
   tt	(vl-remove '(102 . "}") tt)
 )

 (redraw ent 3)
 (while (= (length lstr) 0)
   (princ "\nHay chon cac Polyline: ")
   (setq
     ssr  (ssget '((0 . "LWPOLYLINE") (90 . 4)))
     lstr (ss2ent ssr)
   )
 )
 (redraw ent 4)

 (foreach entr	lstr
   (redraw entr 3)
   (entmake tt)
   (command ".xclip" (entlast) "" "n" "s" entr)
   (redraw entr 4)
 )
 (command ".erase" ent "")
)

(defun ss2ent (ss / sodt index lstent ent)
 (setq
   sodt  (if ss
    (sslength ss)
    0
  )
   index 0
 )
 (repeat sodt
   (setq ent	 (ssname ss index)
  index	 (1+ index)
  lstent (cons ent lstent)
   )
 )
 (reverse lstent)
)

  • Vote tăng 5

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
Lệnh MX (MultiXclip) dưới đây có thể sẽ giúp bạn.

 

Lệnh này yêu cầu bạn pick vào 1 block, sau đó yêu cầu bạn nhập các rectangle khung. Lệnh sẽ tạo ra các block bị cắt cúp trong các khung rectangle vừa bạn vừa nhập. Nếu công trình dạng tuyến của bạn chưa phải là block, bạn phải block nó trước khi dùng lệnh này.

 

(defun c:mx (/ ent ssr lstr tt)
 (setq
   ent	(car (entsel "\nHay pick vao block: "))
   tt	(entget ent)
   tt	(vl-remove '(102 . "{ACAD_XDICTIONARY") tt)
   tt	(vl-remove (assoc 360 tt) tt)
   tt	(vl-remove '(102 . "}") tt)
 )

 (redraw ent 3)
 (while (= (length lstr) 0)
   (princ "\nHay chon cac Polyline: ")
   (setq
     ssr  (ssget '((0 . "LWPOLYLINE") (90 . 4)))
     lstr (ss2ent ssr)
   )
 )
 (redraw ent 4)

 (foreach entr	lstr
   (redraw entr 3)
   (entmake tt)
   (command ".xclip" (entlast) "" "n" "s" entr)
   (redraw entr 4)
 )
 (command ".erase" ent "")
)

(defun ss2ent (ss / sodt index lstent ent)
 (setq
   sodt  (if ss
    (sslength ss)
    0
  )
   index 0
 )
 (repeat sodt
   (setq ent	 (ssname ss index)
  index	 (1+ index)
  lstent (cons ent lstent)
   )
 )
 (reverse lstent)
)

bác Hoành đúng là siêu thật

mọi hôm em phải tách cả trăm bản hnay e mới thấy đựơc có lênh đó sẽ bớt thề nào

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ác Nguyen Hoanh đã quan tâm.

Hình như cái này vẫn lỗi (không copy và xoá cả block), nhờ bác xem lại nhé!

Tôi test chạy ổn truớc khi post bài rồi mà! Bạn hãy thử dùng lại.

 

Bạn nhớ là các rectangle phải liên tiếp, có cạnh chập nhau và phủ đầy hình block.

 

Đây là file ví dụ bạn thử dùng lệnh xem sao:

http://www.cadviet.com/upfiles/mx_example.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

Em xin đóng góp 1 tẹo ý kiến ạ, theo em để giải quyết bài toán này mình dùng layout sẽ rất tiện. Cụ thể cách dùng thế nào thì các bác đã hướng dẫn rất tỷ mỷ rồi.

Nhưng dù sao đoạn lisp của bác Hoành cũng rất có giá trị (chẳng hạn khi mình muốn gửi đi chỉ phần bản vẽ cần thiết, còn muốn dấu những phần còn lại). Rất cảm ơn bá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

Còn trường hợp muốn khôi phục như ban đầu được không anh Nguyen Hoanh, tức là ghép các bản thành 1 bock, sau đó bung ra trả về các đối tượng gắn kết như ban đầ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
Còn trường hợp muốn khôi phục như ban đầu được không anh Nguyen Hoanh, tức là ghép các bản thành 1 bock, sau đó bung ra trả về các đối tượng gắn kết như ban đầu?

Được,

 

Chỉ đơn giản là xóa hết tất cả các block đi chỉ giữ một block bất kỳ. Sau đó dùng lệnh XCLIP tham số D (delete) với block được giữ lạ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,

 

Chỉ đơn giản là xóa hết tất cả các block đi chỉ giữ một block bất kỳ. Sau đó dùng lệnh XCLIP tham số D (delete) với block được giữ lại.

 

Cách tách bản vẽ của anh Hoành là để ẩn, khi explode thì lại hiện ra toàn bộ bản vẽ. Vậy có cách nào tách hẳn ra 1 cách độc lập không phụ thuộc bản cũ không vậ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

 

Lệnh MX (MultiXclip) dưới đây có thể sẽ giúp bạn.

 

Lệnh này yêu cầu bạn pick vào 1 block, sau đó yêu cầu bạn nhập các rectangle khung. Lệnh sẽ tạo ra các block bị cắt cúp trong các khung rectangle vừa bạn vừa nhập. Nếu công trình dạng tuyến của bạn chưa phải là block, bạn phải block nó trước khi dùng lệnh này.

 

(defun c:mx (/ ent ssr lstr tt)  (setq    ent	(car (entsel "\nHay pick vao block: "))    tt	(entget ent)    tt	(vl-remove '(102 . "{ACAD_XDICTIONARY") tt)    tt	(vl-remove (assoc 360 tt) tt)    tt	(vl-remove '(102 . "}") tt)  )  (redraw ent 3)  (while (= (length lstr) 0)    (princ "\nHay chon cac Polyline: ")    (setq      ssr  (ssget '((0 . "LWPOLYLINE") (90 . 4)))      lstr (ss2ent ssr)    )  )  (redraw ent 4)  (foreach entr	lstr    (redraw entr 3)    (entmake tt)    (command ".xclip" (entlast) "" "n" "s" entr)    (redraw entr 4)  )  (command ".erase" ent ""))(defun ss2ent (ss / sodt index lstent ent)  (setq    sodt  (if ss	    (sslength ss)	    0	  )    index 0  )  (repeat sodt    (setq ent	 (ssname ss index)	  index	 (1+ index)	  lstent (cons ent lstent)    )  )  (reverse lstent))

 

Lisp này rất hay tuy nhiên có 1 hạn chế đó là nó chỉ làm việc với khung hình chữ nhật thôi, chứ với polyline hình dạng bất kì thì chịu thua, thậm chí polyline hình dạng hình chữ nhật cũng không được. Bạn Nguyen Hoanh có thể sửa lại để nó có thể sử dụng với polyline hình dạng bất kì được không

Mình cám ơn nhiề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

Lisp này rất hay tuy nhiên có 1 hạn chế đó là nó chỉ làm việc với khung hình chữ nhật thôi, chứ với polyline hình dạng bất kì thì chịu thua, thậm chí polyline hình dạng hình chữ nhật cũng không được. Bạn Nguyen Hoanh có thể sửa lại để nó có thể sử dụng với polyline hình dạng bất kì được không

Mình cám ơn nhiều

 

Bạn thử Lisp này xem. Lisp có thể áp dụng với Pline, Spline, Circle, ellipse, ARC

Lệnh CCUP

Chú ý : máy phải cài Express

Download: http://www.cadviet.com/upfiles/4/4652_ccup.zip

  • 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

Bạn thử Lisp này xem. Lisp có thể áp dụng với Pline, Spline, Circle, ellipse, ARC

Lệnh CCUP

Chú ý : máy phải cài Express

Download: http://www.cadviet.com/upfiles/4/4652_ccup.zip

 

Lisp này cũng hay nhưng có 1 điều nhỏ là nó tạo thành như kiểu block động ý nhỉ, sau muốn xóa cái viền đi thì ko xóa được, bạn có thể sửa lại giống lisp của bạn Nguyen Hoanh là nó xclip xong thì viền nó vẫn là polyline như cũ để có thể xóa viền đi được

Mình cám ơn nhiề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

Lisp này cũng hay nhưng có 1 điều nhỏ là nó tạo thành như kiểu block động ý nhỉ, sau muốn xóa cái viền đi thì ko xóa được, bạn có thể sửa lại giống lisp của bạn Nguyen Hoanh là nó xclip xong thì viền nó vẫn là polyline như cũ để có thể xóa viền đi được

Mình cám ơn nhiều

 

Gõ XCLIPFRAME -> gõ 0 -> Rồi thích thì xóa cái viền đi 

 

Command: XCLIPFRAME

Enter new value for XCLIPFRAME <1>: 0

 
Command: XCLIPFRAME
 
Enter new value for XCLIPFRAME <1>: 0
  • 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

 

Gõ XCLIPFRAME -> gõ 0 -> Rồi thích thì xóa cái viền đi 

 

Command: XCLIPFRAME

Enter new value for XCLIPFRAME <1>: 0

 
Command: XCLIPFRAME
 
Enter new value for XCLIPFRAME <1>: 0

 

thế thì hơi phức tạp nhỉ. bạn ghép lệnh cái này vào lisp của bạn được không.

Mình cám ơn nhiề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

thế thì hơi phức tạp nhỉ. bạn ghép lệnh cái này vào lisp của bạn được không.

Mình cám ơn nhiều

 

Bạn chỉ set XCLIPFRAME có 1 lần -> Các lần sau sử dụng Lisp thì các khung viền đã tự tách ra rồ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

Bạn chỉ set XCLIPFRAME có 1 lần -> Các lần sau sử dụng Lisp thì các khung viền đã tự tách ra rồi

 

   OK, mình tạo 1 lệnh cho XCLIPFRAME rồi, ko vấn đề tuy nhiên jo để ý kĩ mới thấy hình như lisp vẫn có lỗi j đó, vẫn xclip được theo các polyline đã chọn tuy nhiên khi xong trên dòng lệnh vẫn báo lỗi j đó, mình đã chụp ảnh rồi, bạn xem nhé.

   Ngoài ra trong các xcip đã cắt ra lúc nào cũng có 2 cái bị trùng nhau. ví dụ mình xclip theo 4 polyline nhưng kết quả là sẽ còn lại 5 xclip, 2 cái sẽ bị trùng nhau. có thể đó là lỗi mà nó báo trên dòng lệnh chăng. bạn Tue NV xem lại hộ mình nhé

mình cám ơn nhiều

9928_loi_nhieu_xclip.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

   OK, mình tạo 1 lệnh cho XCLIPFRAME rồi, ko vấn đề tuy nhiên jo để ý kĩ mới thấy hình như lisp vẫn có lỗi j đó, vẫn xclip được theo các polyline đã chọn tuy nhiên khi xong trên dòng lệnh vẫn báo lỗi j đó, mình đã chụp ảnh rồi, bạn xem nhé.

   Ngoài ra trong các xcip đã cắt ra lúc nào cũng có 2 cái bị trùng nhau. ví dụ mình xclip theo 4 polyline nhưng kết quả là sẽ còn lại 5 xclip, 2 cái sẽ bị trùng nhau. có thể đó là lỗi mà nó báo trên dòng lệnh chăng. bạn Tue NV xem lại hộ mình nhé

mình cám ơn nhiều

 

1./ Mình chạy không lỗi gì

2./ Fix lỗi 2 cái trùng nhau 

DownLoad http://www.cadviet.com/upfiles/4/4652_ccup2.zip

  • 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

@Tue_NV sao bác không tư vấn proconeng86 dùng Lisp tạo viewport từ khung chọn bên model để đỡ nặng nhỉ, vì với những bản vẽ lớn nhiều vị trí cần tách mà dùng Xclip thì sẽ nặng lắm.

 

Nhân tiện chủ đề này mình muốn nhờ Tue xử lý nốt vụ này để hoàn thiện lisp trên.

http://www.cadviet.com/forum/topic/68723-yeu-cau-lisp-tao-viewport-tu-khung-chon-ben-model/page-6?do=findComment&comment=318865

 

Thanks nhiề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

@Tue_NV sao bác không tư vấn proconeng86 dùng Lisp tạo viewport từ khung chọn bên model để đỡ nặng nhỉ, vì với những bản vẽ lớn nhiều vị trí cần tách mà dùng Xclip thì sẽ nặng lắm.

 

Nhân tiện chủ đề này mình muốn nhờ Tue xử lý nốt vụ này để hoàn thiện lisp trên.

http://www.cadviet.com/forum/topic/68723-yeu-cau-lisp-tao-viewport-tu-khung-chon-ben-model/page-6?do=findComment&comment=318865

 

Thanks nhiều!

 

Nói thiệt là mình không biết cách sử dụng Layout!

Mà nghe nói dùng Layout có nhược điểm là với nhiều Viewport thì sẽ nặng má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

@Tue_NV sao bác không tư vấn proconeng86 dùng Lisp tạo viewport từ khung chọn bên model để đỡ nặng nhỉ, vì với những bản vẽ lớn nhiều vị trí cần tách mà dùng Xclip thì sẽ nặng lắm.

 

Nhân tiện chủ đề này mình muốn nhờ Tue xử lý nốt vụ này để hoàn thiện lisp trên.

http://www.cadviet.com/forum/topic/68723-yeu-cau-lisp-tao-viewport-tu-khung-chon-ben-model/page-6?do=findComment&comment=318865

 

Thanks nhiều!

 

 Layout mình cũng dùng nhưng mình quen dùng để sắp xếp bản vẽ, tạo viewport để chỉnh tỉ lệ, còn toàn bộ mình vẽ hết bên model, đối với những cái cần tách từ mặt bằng thì dùng xclip theo mình tốt hơn vì sau đó mình sẽ trên model luôn, sau này có chỉnh sửa thì sửa trên model sẽ dễ hơn bên layout 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

1./ Mình chạy không lỗi gì

2./ Fix lỗi 2 cái trùng nhau 

DownLoad http://www.cadviet.com/upfiles/4/4652_ccup2.zip

 

Lisp này là ok rồi, lỗi nó báo lúc trước chắc là lỗi có 2 cái trùng nhau đó, mình đoán vậy vì mù về lisp mà :D

Cám ơn bạn nhiều 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

Câu hỏi này quá hay mà ko ai trả lời vậy. HIC

Đúng vấn đề mình đang tìm. 10 năm trước đã có người gặp rồi. :-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

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

×