Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
23 replies to this topic

#1 phantuhuong

phantuhuong

    biết dimstyle

  • Moderator
  • PipPipPipPipPip
  • 383 Bài viết
Điểm đánh giá: 200 (khá)

Đã gửi 16 March 2008 - 04:07 PM

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?
  • 0
Bồi dưỡng Excel & VBA cho các đơn vị ở Hà Nội và khu vực lân cận

Từng bước loại đồ Tàu ra khỏi cuộc sống!


#2 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4105 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 16 March 2008 - 04:23 PM

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?
  • 0

#3 phantuhuong

phantuhuong

    biết dimstyle

  • Moderator
  • PipPipPipPipPip
  • 383 Bài viết
Điểm đánh giá: 200 (khá)

Đã gửi 17 March 2008 - 11:06 AM

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

Hình đã gửi
  • 0
Bồi dưỡng Excel & VBA cho các đơn vị ở Hà Nội và khu vực lân cận

Từng bước loại đồ Tàu ra khỏi cuộc sống!


#4 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4105 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 17 March 2008 - 02:18 PM

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)
)

  • 5

#5 giaptk3

giaptk3

    biết vẽ pline

  • Members
  • PipPip
  • 64 Bài viết
Điểm đánh giá: 13 (tàm tạm)

Đã gửi 17 March 2008 - 02:27 PM

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

#6 phantuhuong

phantuhuong

    biết dimstyle

  • Moderator
  • PipPipPipPipPip
  • 383 Bài viết
Điểm đánh giá: 200 (khá)

Đã gửi 17 March 2008 - 04:13 PM

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é!
  • 0
Bồi dưỡng Excel & VBA cho các đơn vị ở Hà Nội và khu vực lân cận

Từng bước loại đồ Tàu ra khỏi cuộc sống!


#7 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4105 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 17 March 2008 - 04:28 PM

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

#8 phantuhuong

phantuhuong

    biết dimstyle

  • Moderator
  • PipPipPipPipPip
  • 383 Bài viết
Điểm đánh giá: 200 (khá)

Đã gửi 17 March 2008 - 04:53 PM

Cám ơn bác, do em tạo rectange ở bên ngoài nên không được :cheers: . lisp của bác chạy ngon! <_<
  • 0
Bồi dưỡng Excel & VBA cho các đơn vị ở Hà Nội và khu vực lân cận

Từng bước loại đồ Tàu ra khỏi cuộc sống!


#9 Bommak

Bommak

    biết vẽ line

  • Members
  • PipPip
  • 25 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 21 March 2008 - 01:27 AM

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

#10 phantuhuong

phantuhuong

    biết dimstyle

  • Moderator
  • PipPipPipPipPip
  • 383 Bài viết
Điểm đánh giá: 200 (khá)

Đã gửi 22 March 2008 - 02:56 PM

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?
  • 0
Bồi dưỡng Excel & VBA cho các đơn vị ở Hà Nội và khu vực lân cận

Từng bước loại đồ Tàu ra khỏi cuộc sống!


#11 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4105 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 22 March 2008 - 03:08 PM

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

#12 phantuhuong

phantuhuong

    biết dimstyle

  • Moderator
  • PipPipPipPipPip
  • 383 Bài viết
Điểm đánh giá: 200 (khá)

Đã gửi 02 November 2009 - 11:17 AM

Đượ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?
  • 0
Bồi dưỡng Excel & VBA cho các đơn vị ở Hà Nội và khu vực lân cận

Từng bước loại đồ Tàu ra khỏi cuộc sống!


#13 proconeng86

proconeng86

    biết lệnh break

  • Members
  • PipPipPipPip
  • 221 Bài viết
Điểm đánh giá: -9 (bình thường)

Đã gửi 19 November 2014 - 08:38 PM

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


  • 0

#14 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 19 November 2014 - 10:30 PM

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.c...4/4652_ccup.zip


  • 1

#15 proconeng86

proconeng86

    biết lệnh break

  • Members
  • PipPipPipPip
  • 221 Bài viết
Điểm đánh giá: -9 (bình thường)

Đã gửi 19 November 2014 - 11:55 PM

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


  • 0

#16 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 20 November 2014 - 05:51 AM

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

  • 1

#17 proconeng86

proconeng86

    biết lệnh break

  • Members
  • PipPipPipPip
  • 221 Bài viết
Điểm đánh giá: -9 (bình thường)

Đã gửi 20 November 2014 - 08:50 AM

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


  • 0

#18 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 20 November 2014 - 09:12 AM

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


  • 1

#19 proconeng86

proconeng86

    biết lệnh break

  • Members
  • PipPipPipPip
  • 221 Bài viết
Điểm đánh giá: -9 (bình thường)

Đã gửi 20 November 2014 - 12:14 PM

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


  • 0

#20 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 20 November 2014 - 01:50 PM

   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.c.../4652_ccup2.zip


  • 2