Đến nội dung


Hình ảnh
- - - - -

[yêu cầu] Lisp xoá khung tên bên layout!


  • Chủ đề bị khóa Chủ đề bị khóa
5 replies to this topic

#1 cangua172

cangua172

    biết vẽ line

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

Đã gửi 06 March 2013 - 11:13 AM

Vì số lượng Layout trong bản vẽ của em rất nhiều, ngồi xoá từng cái khung tên bên layout, mất rất nhiều thời gian. Vì vậy, em mong các anh giúp em xoá nhanh cái khung tên này trên tất cả các Layout. Chân thành cảm ơn!. 


  • 0

#2 cangua172

cangua172

    biết vẽ line

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

Đã gửi 06 March 2013 - 11:13 AM

http://www.cadviet.c...a_khung_ten.dwg


  • 0

#3 Chiron

Chiron

    biết dimradius

  • Members
  • PipPipPipPipPip
  • 310 Bài viết
Điểm đánh giá: 90 (tàm tạm)

Đã gửi 06 March 2013 - 02:37 PM

Vì số lượng Layout trong bản vẽ của em rất nhiều, ngồi xoá từng cái khung tên bên layout, mất rất nhiều thời gian. Vì vậy, em mong các anh giúp em xoá nhanh cái khung tên này trên tất cả các Layout. Chân thành cảm ơn!. 

 

Vậy thì xóa hết layout 1 lúc vậy?


  • 0

#4 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 06 March 2013 - 03:24 PM

http://www.cadviet.c...a_khung_ten.dwg

Hề hề hề,

Thử dùng cái ni xem sao nhé.

Tại sao bạn không làm khung ten thành một block chứa thuộc tính cho tiện sử dụng mà lại làm khung tên rời rạc như vậy. 

Cái lisp này chỉ xóa được các khung tên có cùng kích thước và vị trí như bản vẽ bạn đã post, nếu sử dụng khung tên khác thì việc xóa sẽ không đảm bảo sạch đâu nhé, thậm chí nó có thể xóa cả những thứ bạn không muốn xóa đó.

 

(defun c:xktl ( / llst ss)
(setq cmdold (getvar "cmdecho"))
(setvar "cmdecho" 0)
(setq llst (layoutlist))
(command "undo" "be")
(foreach la llst
     (command ".layout" "s" la "")
     (setq ss (ssget "w" (list 19 25 0) (list 410 3 0) ))
     (command "erase" ss "")
)
(command "model")
(command "undo" "e")
(setvar "cmdecho" cmdold)
(princ)
)
Nếu có gì chưa ưng ý thì cứ mạnh dạn mà tố nghen.

  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#5 cangua172

cangua172

    biết vẽ line

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

Đã gửi 06 March 2013 - 04:30 PM

Hề hề hề,

Thử dùng cái ni xem sao nhé.

Tại sao bạn không làm khung ten thành một block chứa thuộc tính cho tiện sử dụng mà lại làm khung tên rời rạc như vậy. 

Cái lisp này chỉ xóa được các khung tên có cùng kích thước và vị trí như bản vẽ bạn đã post, nếu sử dụng khung tên khác thì việc xóa sẽ không đảm bảo sạch đâu nhé, thậm chí nó có thể xóa cả những thứ bạn không muốn xóa đó.

 

(defun c:xktl ( / llst ss)
(setq cmdold (getvar "cmdecho"))
(setvar "cmdecho" 0)
(setq llst (layoutlist))
(command "undo" "be")
(foreach la llst
     (command ".layout" "s" la "")
     (setq ss (ssget "w" (list 19 25 0) (list 410 3 0) ))
     (command "erase" ss "")
)
(command "model")
(command "undo" "e")
(setvar "cmdecho" cmdold)
(princ)
)
Nếu có gì chưa ưng ý thì cứ mạnh dạn mà tố nghen.

Trước hết, em cảm ơn Anh Bình đã giúp đỡ em.... nhưng em chạy Lisp thì có một số Layout không xoá hết (nó chỉ xoá một phần của khung tên thôi).   Anh xem lại giúp em! Đoạn code  "  (setq ss (ssget "w" (list 19 25 0) (list 410 3 0) ))" có cách nào linh động hơn không? pick điểm để lấy giá trị đầu vào chẳng hạng (em không rành về Lisp lắm), để Lisp linh động hơn trong các bảng vẽ khác cần xoá nhưng toạ độ của các Layout nằm ở một vị trí khác. smile.png


  • 0

#6 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 13 March 2013 - 10:39 AM

Trước hết, em cảm ơn Anh Bình đã giúp đỡ em.... nhưng em chạy Lisp thì có một số Layout không xoá hết (nó chỉ xoá một phần của khung tên thôi).   Anh xem lại giúp em! Đoạn code  "  (setq ss (ssget "w" (list 19 25 0) (list 410 3 0) ))" có cách nào linh động hơn không? pick điểm để lấy giá trị đầu vào chẳng hạng (em không rành về Lisp lắm), để Lisp linh động hơn trong các bảng vẽ khác cần xoá nhưng toạ độ của các Layout nằm ở một vị trí khác. smile.png

Hề hề hề.

1/- Như đã báo trước, nếu bạn sử dụng các layout có khung tên khác nhau thì sẽ khó đảm bảo xóa sạch. Lisp này chỉ là một gợi ý cho bạn mà thôi. Trong trường hợp các layout có chứa các khung tên khác nhau bạn sẽ rất khó để tiến hành việc xóa tự động cho tất cả các layout mà bạn sẽ phải xóa lần lượt cho từng layout bằng cách thay thế đoạn code (list 19 25 0) (list 410 3 0) bằng đoạn code chọn điểm sau: (getpoint "\n Nhap diem phia tren ben trai cua khung ten" ) ( getpoint "\n Nhap diem phia duoi ben phai cua khung ten")

2/- Bạn nên học cách tổ chức bản vẽ lại cho nó khoa học hơn thì sẽ dễ dàng và thuận lợi hơn cho việc chỉnh sửa và xuất bản vẽ về sau. Tỷ như các khung tên nên làm bằng các block thuộc tính với tên "Kten-????" hoặc tất cả các kung ten được đưa về cùng một layer "Kten" chẳng hạn.......

Khi đó việc chọn đối tượng để xóa sẽ thuận lợi hơn nhiều và bạn dễ dàng tự động hóa việc này bằng cách sủ dụng các bộ lọc đối tượng cho hàm ssget.

3/- Nếu bạn muốn sử dụng lisp thì nên bỏ công sức tìm hiểu những điều cơ bản về lisp để có thể hiểu được các lisp của người khác viết và vận dụng nó cho phù hợp với yêu cầu của bạn.

 

Chúc bạn thành công


  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.