Jump to content


Change Photo
181 Phiếu
- - - - -

[Yêu cầu] Lisp lọc các block cùng tên


  • Please log in to reply
8 replies to this topic

#1 tkd247

tkd247

    biết zoom

  • Members
  • Pip
  • 18 posts
Danh tiếng: 1 (bình thường)

Gửi vào 13 December 2011 - 03:05 PM

Gửi các bạn trong diễn đàn Cad Việt,
Mình hay phải sử dụng lệnh filter để lọc các block cùng tên nhưng lệnh này sử dụng hộp thoại phải thao tác nhiều rất mất thời gian. Vì vậy nhờ các bạn viết hộ lisp có nội dung như sau: Chọn 1 block từ bản vẽ, chọn vùng lọc, sau đó lọc các block có cùng tên với block chọn.
Mình gửi kèm hình minh họa để các bạn tham khảo.
http://www.cadviet.com/upfiles/3/101944_minh_hoa_lisp_loc_block_cung_ten.dwg
Rất mong được giúp đỡ,
Tkd247
  • 0

#2 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 3,220 posts
Danh tiếng: 1502 (rất tốt)

Gửi vào 13 December 2011 - 03:26 PM

Gửi các bạn trong diễn đàn Cad Việt,
Mình hay phải sử dụng lệnh filter để lọc các block cùng tên nhưng lệnh này sử dụng hộp thoại phải thao tác nhiều rất mất thời gian. Vì vậy nhờ các bạn viết hộ lisp có nội dung như sau: Chọn 1 block từ bản vẽ, chọn vùng lọc, sau đó lọc các block có cùng tên với block chọn.
Mình gửi kèm hình minh họa để các bạn tham khảo.
http://www.cadviet.c...ck_cung_ten.dwg
Rất mong được giúp đỡ,
Tkd247


Đây bạn! Hình như bạn đã là lần thứ 3 post y/c thì phải, và 2 lần đầu bị xoá vì sai quy định. Lần này thì tương đối đúng.
(defun C:HA ( / ten)
(setq ten (assoc 2 (entget (car (entsel "\nChon Block mau: ")))))
(princ "\nChon cac Block...")
(setq ss (ssget (list (cons 0 "INSERT") ten))))

  • 1

#3 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 4,575 posts
Danh tiếng: 2110 (tuyệt vời)

Gửi vào 13 December 2011 - 03:39 PM

Vấn đề "cùng tên" thì OP phải chỉ rõ Như thế nào là cùng tên ? Nhất là trong trường hợp Dynamic Block đã thay đổi action
  • 0

#4 tkd247

tkd247

    biết zoom

  • Members
  • Pip
  • 18 posts
Danh tiếng: 1 (bình thường)

Gửi vào 13 December 2011 - 04:05 PM

Gửi bạn Doan Van Ha,
Cám ơn bạn đã giúp đỡ. Mình đã test và về cơ bản là ok. Bạn có thể chỉnh sửa thêm để cho các đối tượng được chọn được bôi đen trên màn hình (giống như lệnh filter) để có thể copy sang bản vẽ khác được ko?
Gửi bạn ketxu,
Đối với Dynamic Block thì khi dùng lệnh copy thì đối tượng mới mang 1 tên khác nên không dùng lệnh filter được mà phải dùng qseclect mới chọn được các block cùng tên gốc. Chính vì vậy nên mình rất ít dùng Dynamic Block mặc dù nó khá tiện lợi. Nếu bạn có thể mở rộng code để sử dụng với Dynamic Block thì tốt quá (tên block được định nghĩa bởi Edit block definition).
P/S: Trước khi gửi bài mình đã đọc nội qui hướng dẫn post bài như đường link dưới đây tại Cad Việt:
http://www.cadviet.c...php?showtopic=4
thì không thấy update các nội dung chi tiết như bài ở đường link dưới đây:
http://www.cadviet.c...showtopic=44534
Vì vậy đề nghị ban quản trị diễn đàn update lại thong tin để cho những thành viên mới biết khi post bài
Tkd247
  • 0

#5 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 4,575 posts
Danh tiếng: 2110 (tuyệt vời)

Gửi vào 13 December 2011 - 04:40 PM

Tất cả yêu cầu của bạn ở trên đều .. "Dư sức qua cầu" với bác Hạ , hãy chịu khó chờ nhé :)
  • 0

#6 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 3,220 posts
Danh tiếng: 1502 (rất tốt)

Gửi vào 13 December 2011 - 05:13 PM

Tất cả yêu cầu của bạn ở trên đều .. "Dư sức qua cầu" với bác Hạ , hãy chịu khó chờ nhé :)


Leo cầu bê tông quen rồi, cái này là cầu khỉ, chưa gặp và chưa leo nên sợ bị té, Ket leo quen thì chơi luôn giùm bạn ấy đi mà. Nhờ thật đấy!
  • 0

#7 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 4,575 posts
Danh tiếng: 2110 (tuyệt vời)

Gửi vào 13 December 2011 - 07:23 PM


Leo cầu bê tông quen rồi, cái này là cầu khỉ, chưa gặp và chưa leo nên sợ bị té, Ket leo quen thì chơi luôn giùm bạn ấy đi mà. Nhờ thật đấy!

^^
Theo như ý của bạn OP thì nó là effectivename, không phải xử lý trường hợp DB đã thực thi action

P/s : code :
(defun c:test(/ rn ssblk blkName)(vl-load-com)
(prompt "\nChon Block mau :")
(setq   rn (lambda(x)(vla-get-EffectiveName (vlax-ename->vla-object x)))
  blkName (rn (ssname (ssget ":S" (list (cons 0 "INSERT"))) 0)))
(prompt "\nChon khu vuc chua Block :")
(setq ssBlk (ssget (list (cons 0 "INSERT")(cons 2 (strcat "`*U*," blkName)))))
(mapcar '(lambda(x)(if (not (eq (rn x) blkName))(ssdel x ssblk)))
(mapcar 'cadr (vl-remove-if '(lambda(x)(listp (cadr x))) (ssnamex ssBlk)))) ;hoac thay bang acet neu thich nhe ^^
(sssetfirst nil ssBlk)
)

  • 2

#8 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 3,220 posts
Danh tiếng: 1502 (rất tốt)

Gửi vào 13 December 2011 - 08:31 PM

Gửi bạn Doan Van Ha,
Cám ơn bạn đã giúp đỡ. Mình đã test và về cơ bản là ok. Bạn có thể chỉnh sửa thêm để cho các đối tượng được chọn được bôi đen trên màn hình (giống như lệnh filter) để có thể copy sang bản vẽ khác được ko?


Có phải bạn muốn như thế này không?
(defun C:HA ( / ten)
(setq ten (assoc 2 (entget (car (entsel "\nChon Block mau: ")))))
(princ "\nChon cac Block...")
(setq ss (ssget (list (cons 0 "INSERT") ten)))
(sssetfirst nil ss))	;hien Grips.
@Ketxu: thank Ketxu, nhưng tôi chưa hề dùng Dyn_Block nên hơi bị... lạc hậu chuyện này.
  • 1

#9 tkd247

tkd247

    biết zoom

  • Members
  • Pip
  • 18 posts
Danh tiếng: 1 (bình thường)

Gửi vào 14 December 2011 - 10:01 AM

Gửi bạn Doan Van Ha, ketxu
Cám ơn 2 bạn nhiều. Lisp chạy chuẩn và đúng ý mình rồi.
Tkd247
  • 0