Chuyển đến nội dung
Diễn đàn CADViet
mr.thanh2610

[NHỜ CHỈNH SỬA LISP ] Về Lisp chọn nhanh đối tượng Block

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

Chào các anh chị em, tình hình mình sưu tầm được một Lisp chọn nhanh các đối tượng Block của bác Doan Van Ha nhưng chắc do topic mở lâu quá nên mình có nhờ chỉnh sửa mà chưa thấy hồi âm.

Nên hôm nay mạn phép nhờ anh em trong diễn đàn chỉnh sửa giúp mình:

Nội dung: lisp chọn được tất cả loại block nhưng chưa cho chọn Dynamic Block, có anh em nào rành về code chỉnh giúp mình với nhé, xin cảm ơn

;; free lisp from cadviet.com
;;; this lisp was downloaded from https://www.cadviet.com/forum/topic/61169-y%C3%AAu-c%E1%BA%A7u-lisp-l%E1%BB%8Dc-c%C3%A1c-block-c%C3%B9ng-t%C3%AAn/
; Chon tap block theo ten cua tap block mau.
(defun C:SB1 ( / 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)))))

 

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 giờ trước, mr.thanh2610 đã nói:

Chào các anh chị em, tình hình mình sưu tầm được một Lisp chọn nhanh các đối tượng Block của bác Doan Van Ha nhưng chắc do topic mở lâu quá nên mình có nhờ chỉnh sửa mà chưa thấy hồi âm.

Nên hôm nay mạn phép nhờ anh em trong diễn đàn chỉnh sửa giúp mình:

Nội dung: lisp chọn được tất cả loại block nhưng chưa cho chọn Dynamic Block, có anh em nào rành về code chỉnh giúp mình với nhé, xin cảm ơn


;; free lisp from cadviet.com
;; this lisp was downloaded from https://www.cadviet.com/forum/topic/61169-y%C3%AAu-c%E1%BA%A7u-lisp-l%E1%BB%8Dc-c%C3%A1c-block-c%C3%B9ng-t%C3%AAn/
; Chon tap block theo ten cua tap block mau.
(defun C:SB1 ( / 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)))))

 

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

Search Diễn đàn có bài này của a Tùng chọn được block Dynamic nè bạn

 

  • 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

Mình cũng lấy Lisp từ bài đó đấy, nhưng cái bài của anh Tùng ko cho chọn từng loại mà chọn block Dynamic cứ chọn theo mấy thứ kia.Nên mình lấy của anh Hà cho chọn từng loại block loại 1,  block loại 2..... nhưng lại không cho chọn block Dynamic.Vấn đề là ở chỗ đó đấy, bạn có thể giúp mình với, cảm ơn

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

Không có máy test. Thử xem:


;----- Chon tap hop blocks dynamic theo ten cua tap hop blocks dynamic mau.
(defun C:SB1 ( / 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...")
 (setq ss (ssget (list (cons 0 "INSERT") (cons 2 str))))
 (repeat (setq n (sslength ss))
  (setq n (1- n) ent (ssname ss n))
  (if (eq (vla-get-IsDynamicBlock (vlax-ename->vla-object ent)) :vlax-false)
   (ssdel ent ss)))
 (sssetfirst nil ss))

  • 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
5 giờ trước, Doan Van Ha đã nói:

Không có máy test. Thử xem:

 



;----- Chon tap hop blocks dynamic theo ten cua tap hop blocks dynamic mau.
(defun C:SB1 ( / 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...")
 (setq ss (ssget (list (cons 0 "INSERT") (cons 2 str))))
 (repeat (setq n (sslength ss))
  (setq n (1- n) ent (ssname ss n))
  (if (eq (vla-get-IsDynamicBlock (vlax-ename->vla-object ent)) :vlax-false)
   (ssdel ent ss)))
 (sssetfirst nil ss))

 

hjx, vẫn như cũ bác ạ T_T

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
6 giờ trước, ngokiet đã nói:

(defun c:ss1(/ s1)
  (princ "\nChon cac block mau:")
  (or (Setq s1 (mapcar '(lambda(x) (vla-get-effectivename(vlax-ename->vla-object x)))
		     (acet-ss-to-list (ssget '((0 . "INSERT"))))))
      (exit))
  (princ "\nChon vung blocks:")
  (sssetfirst nil
    (acet-list-to-ss
      (vl-remove-if-not
	'(lambda(x) (member (vla-get-effectivename(vlax-ename->vla-object x)) s1))
	(acet-ss-to-list (ssget '((0 . "INSERT"))))))))

Thử lisp này xem. Chọn ban đầu bao nhiêu block mẫu cùng 1 lúc cũng được.

Cảm ơn bạn. nhưng ý mình là chọn riêng loại block theo ý mình thôi, ví dụ cần chọn block loại 1, block loại 2.... loại 3,4,5.. không cần thì không chọn

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
Vào lúc 21/6/2019 tại 08:11, ngokiet đã nói:

Lisp đâu cấm bạn chọn hay không. tuỳ bạn mả. Bạn chọn bao nhiêu block mẫu tuỳ bạn mà.

cái này chọn 1 lúc hết thảy bạn à, nhờ bác Doan Van Ha chỉnh lại giúp em với, đa tạ 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
12 giờ trước, mr.thanh2610 đã nói:

cái này chọn 1 lúc hết thảy bạn à, nhờ bác Doan Van Ha chỉnh lại giúp em với, đa tạ nhiều

Ý bạn này là chọn như kiểu Bác Hạ là lọc luôn trong hàm ssget chứ ko phải chọn hết rồi lọc như Bác Ngô Kiệt

  • 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

Mê bác Hạ mà không mê bác Kiệt. Ngộ!


;----- Chon tap hop blocks (ke ca block dynamic) theo ten cua tap hop blocks mau.
(defun C:SB2 ( / i str ent)
 (setq i 2 str (vla-get-effectivename(vlax-ename->vla-object (car (entsel (strcat "\nChon Block mau 1: "))))))
 (while (setq ent (car (entsel (strcat "\nChon Block mau " (itoa i) ": "))))
 (setq str (strcat str "," (vla-get-effectivename(vlax-ename->vla-object  ent))))
 (setq i (1+ i)))
 (princ "\nChon cac Block can thong ke...")
 (setq ss (ssget (list (cons 0 "INSERT"))))
 (repeat (setq n (sslength ss))
  (setq n (1- n) ent (ssname ss n))
  (if (not (wcmatch (vla-get-effectivename(vlax-ename->vla-object ent)) str))
   (ssdel ent ss)))
 (sssetfirst nil ss))
(vl-load-com)

  • 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
13 giờ trước, huunhantvxdts đã nói:

Ý bạn này là chọn như kiểu Bác Hạ là lọc luôn trong hàm ssget chứ ko phải chọn hết rồi lọc như Bác Ngô Kiệt

đúng rồi ý em là như thế...!

 

5 giờ trước, Doan Van Ha đã nói:

Mê bác Hạ mà không mê bác Kiệt. Ngộ!

 



;----- Chon tap hop blocks (ke ca block dynamic) theo ten cua tap hop blocks mau.
(defun C:SB2 ( / i str ent)
 (setq i 2 str (vla-get-effectivename(vlax-ename->vla-object (car (entsel (strcat "\nChon Block mau 1: "))))))
 (while (setq ent (car (entsel (strcat "\nChon Block mau " (itoa i) ": "))))
 (setq str (strcat str "," (vla-get-effectivename(vlax-ename->vla-object  ent))))
 (setq i (1+ i)))
 (princ "\nChon cac Block can thong ke...")
 (setq ss (ssget (list (cons 0 "INSERT"))))
 (repeat (setq n (sslength ss))
  (setq n (1- n) ent (ssname ss n))
  (if (not (wcmatch (vla-get-effectivename(vlax-ename->vla-object ent)) str))
   (ssdel ent ss)))
 (sssetfirst nil ss))
(vl-load-com)

 

Mê bác từ bữa giờ, hj ^_^, em sài vẫn chưa được bác ơi, bác test lại giúp em, em xin gửi cái file có block dynamic mấy em kiểm tra giúp.

BAN VE.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

Tôi chọn các block dynamic cửa vô tư.

Đừng bao giờ gởi 1 bản vẽ to như rừng rồi bắt người khác phải tìm cây lim cây sồi.

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 giờ} trướ}c, mr.thanh2610 đã nói:

đúng rồi ý em là như thế...!

 

Thế thì rất tiếc giải pháp của Bác @ngokiet và cái sau của Bác @Doan Van Ha cũng không lọc trong qua trình chọn mà nó lọc sau khi enter thôi.

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
2 giờ trước, mr.thanh2610 đã nói:

 

Mê bác từ bữa giờ, hj ^_^, em sài vẫn chưa được bác ơi, bác test lại giúp em, em xin gửi cái file có block dynamic mấy em kiểm tra giúp.

BAN VE.dwg

Bạn thêm đoạn code này (cons 2 (strcat "`*U*," str)) ngay sau (cons 0 "INSERT") của bác Hạ là lọc được các block thường luôn, còn block dynamic thì bó tay nhé bạn

  • Vote giảm 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
5 phút trước, ngokiet đã nói:

Giải pháp thì có nhưng mất công không cần thiết.

Chủ yếu là kết quả thôi. 

ok, có những điều không biết họ muốn gì?

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 giờ trước, Doan Nguyen Van đã nói:

Bạn thêm đoạn code này (cons 2 (strcat "`*U*," str)) ngay sau (cons 0 "INSERT") của bác Hạ là lọc được các block thường luôn, còn block dynamic thì bó tay nhé bạn

Ủa sao kỳ vậy? Của tui chọn được tất cả các loại block giới tinh bình thường hay pêđê... đều ok hết mà.

Của NgoKiet cũng thế.

Chán với ông chủ topic này lắm rồi.

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 giờ} trướ}c, Doan Van Ha đã nói:

Ủa sao kỳ vậy? Của tui chọn được tất cả các loại block giới tinh bình thường hay pêđê... đều ok hết mà.

Của NgoKiet cũng thế.

Chán với ông chủ topic này lắm rồi.

Ý ông thớt là lọc luôn trong lúc chọn ấy 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

Xin lỗi làm phiền mấy bác quá, ví dụ là 1 bản vẽ em có 10 block thường xí bệt, 10 cái block thường chậu rửa, 10 cái cửa sổ loại block dynamic... giờ em chỉ muốn chọn 10 block thường xí bệt, 10 cái cửa sổ loại block dynamic...  thì em chọn mẫu block 1 là block xí bệt, mẫu block 2 là block cửa sổ....rồi quét vùng cần chọn thì lisp chỉ hỗ trợ chọn được 10 block thường xí bệt.Giờ ý em muốn là nó chọn được 10 cái cửa sổ loại block dynamic kia.Lisp anh Hạ hỗ trợ hết Block thường còn block dynamic kia quét vùng thì không chọn được, mấu chốt là ở đó hjx.Chứ lisp mà quét 1 phát chọn hết tất cả block trong đó có cả luôn block dynamic thì em có rồi.

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
7 giờ trước, Doan Van Ha đã nói:

Lệnh SB2 chọn được tất trên bản vẽ bạn gởi. Mệt quá. Bye.

dạ, để em cài lại autocad thử sao em load và sài không được T_T, thôi ơn bác nhiều, phiền bác quá hj

 

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
11 giờ trước, mr.thanh2610 đã nói:

Xin lỗi làm phiền mấy bác quá, ví dụ là 1 bản vẽ em có 10 block thường xí bệt, 10 cái block thường chậu rửa, 10 cái cửa sổ loại block dynamic... giờ em chỉ muốn chọn 10 block thường xí bệt, 10 cái cửa sổ loại block dynamic...  thì em chọn mẫu block 1 là block xí bệt, mẫu block 2 là block cửa sổ....rồi quét vùng cần chọn thì lisp chỉ hỗ trợ chọn được 10 block thường xí bệt.Giờ ý em muốn là nó chọn được 10 cái cửa sổ loại block dynamic kia.Lisp anh Hạ hỗ trợ hết Block thường còn block dynamic kia quét vùng thì không chọn được, mấu chốt là ở đó hjx.Chứ lisp mà quét 1 phát chọn hết tất cả block trong đó có cả luôn block dynamic thì em có rồi.

Bạn hiểu cách sử dụng ko? Khi quét chọn nó sẽ chọn hết, enter nó mới lọc cho bạn những block bạn.

  • Vote tăng 1
  • Vote giảm 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
2 giờ trước, huunhantvxdts đã nói:

Bạn hiểu cách sử dụng ko? Khi quét chọn nó sẽ chọn hết, enter nó mới lọc cho bạn những block bạn.

à cái đó của bác ngokiet tại theo cái bác Hạ nên hỏi các bác Hạ, mà cái bác Hạ sao mình test không được, giờ chắc lấy theo cái bác Ngokiet sài được rồi, cảm ơn tất cả anh em ^_^

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
7 phút trước, mr.thanh2610 đã nói:

à cái đó của bác ngokiet tại theo cái bác Hạ nên hỏi các bác Hạ, mà cái bác Hạ sao mình test không được, giờ chắc lấy theo cái bác Ngokiet sài được rồi, cảm ơn tất cả anh em ^_^

SB2

Chon block mau 1: pick vào block mẫu thứ 1

Chon block mau 2: pick vào block mẫu thứ 2

Chon block mau 3: nhấn enter nếu không chọn thêm block mẫu

Chon cac block can thong ke... (dòng nhắc để biết thôi)

Select objects: chọn đối tượng theo kiểu chọn gì cũng được

Enter >> Kết quả các block được chọn.

Nó dễ hơn húp doong Quảng Ngữa rứa!

  • 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

Vâng, em biết sài mà, em sài cái lisp cũ của bác lâu rồi nhưng bị vướng cái block dynamic nên em hỏi thôi, nhưng vấn đề nó load rồi nhưng kèm theo thông báo (hình đính kèm), rồi dùng lệnh SB2 nó không nhận lệnh

1111.PNG.80297ab7465f68d20316a79a5fb0b221.PNG

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

×