Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
12 replies to this topic

#1 tkd247

tkd247

    biết zoom

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

Đã gửi 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
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 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

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#3 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 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

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#4 tkd247

tkd247

    biết zoom

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

Đã gửi 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
  • 5685 Bài viết
Điểm đánh giá: 2606 (tuyệt vời)

Đã gửi 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

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#6 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 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

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#7 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 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)
)

  • 4

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#8 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 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.
  • 2

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#9 tkd247

tkd247

    biết zoom

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

Đã gửi 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

#10 just4onlyyou

just4onlyyou

    biết pan

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

Đã gửi 30 July 2015 - 11:23 PM

Em cảm ơn các anh đã hỗ trợ code.
Em có nhu cầu tương tự là chọn các block cùng tên, mở rộng thêm:
Đánh lệnh
Chọn block mẫu 1
Chọn block mẫu 2
.....
Chọn block mẫu 5
Chọn vùng chứa block
Ra kết quả chọn được bao nhiêu block và cho phép hiện grips.

Em cảm ơn các anh ạ
  • 0

#11 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 31 July 2015 - 07:13 AM

Đây bạn!

; Chon tap block theo ten cua tap block mau.
(defun C:HA ( / i str ent)
 (setq i 2 str (cdr (assoc 2 (entget (car (entsel (strcat "\nChon Block mau 1: ")))))))
 (while (setq ent (car (entsel (strcat "\nChon Block mau " (itoa i) ": "))))
  (setq str (strcat str "," (cdr (assoc 2 (entget ent)))))
  (setq i (1+ i)))
 (princ "\nChon cac Block can thong ke...")
 (sssetfirst nil (ssget (list (cons 0 "INSERT") (cons 2 str)))))

  • 2

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#12 hoquangvinh

hoquangvinh

    biết lệnh mirror

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

Đã gửi 31 July 2015 - 10:22 AM

lisp hay + nhiệt tình

thanks bác


  • 0

#13 just4onlyyou

just4onlyyou

    biết pan

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

Đã gửi 01 August 2015 - 08:40 AM

Cảm ơn anh Doan Van Ha, lisp này đã đáp ứng trọn vẹn nhu cầu của em. Anh thật đáng ngưỡng mộ.

Em thường sử dụng FI để chọn nhiều block, nay có thêm lisp này thì giúp tăng thêm hiệu quả công việc, giảm thời gian select đối tượng. :)


  • 0