Chuyển đến nội dung
Diễn đàn CADViet
thienha.haui

đếm block tuy chọn

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

chào các bạn.mình đã tìm hiểu trên diễn đàn về lisp đếm block nhưng chưa có lisp nào như ý mong các bạn giúp đỡ.

mình muốn có 1 lisp như sau.

- gõ lệnh

-chọn block muốn đếm

-chọn vùng cần đếm

-chọn vị trí đặt text

 

Mong các bạn giúp đỡ/

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

lệnh đó đếm tất cả block anh ạ .bởi vì bản vẽ rất nhiều block nên khi dùng lệnh đó tìm tới block mình cần rất mất thời gian.

nên e muốn có lisp chỉ chọn block mình cần đếm thôi ạ 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

Của bạn đây.

 


(defun c:test(/ ten soluong diem)
  (setq ten (cdr (assoc 2 (entget (car (entsel "\nChon Block:")))))
soluong (sslength (ssget (list '(0 . "INSERT") (cons 2 ten))))
diem (getpoint "\nDiem dat text:"))
  (entmakex (list (cons 0  "TEXT") (cons 10 diem) (cons 11 diem)
 (cons 40 1) (cons 1 (itoa soluong))))
  (princ)  
)

(defun c:test()
  (defun dxf (id v) (cdr (assoc id (entget v))))
  (setq ten (dxf 2 (car (entsel "\nChon Block:")))
soluong (length (vl-remove nil (mapcar '(lambda(x) (if (= ten (dxf 2 x)) x nil))
      (acet-ss-to-list (ssget '((0 . "INSERT")))))))
diem (getpoint "\nDiem dat text:"))
  (entmakex (list (cons 0  "TEXT") (cons 10 diem) (cons 11 diem)
 (cons 40 1) (cons 1 (itoa soluong))))
  (princ)  
)
  • 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

-chưa được anh ạ.a sửa cho e là có thể chọn nhiều block trong cùng 1 lần đếm nhé.bởi vì lisp này cho chọn có 1 block 1 lần.

-trong phần chọn block ấy.khi mình kích vào block thì ta chưa biết rằng đã kích chọn được block hay chưa.nên e muốn a sửa là :nếu đã chọn được rồi thì trong dòng comment nó hiển thị là:1 block(3block) đã được chọn chẳng hạn.

-Cái nữa là chiều cao text quá nhỏ nếu bản vẽ lớn.nên trước phần vị trí đặt text a sửa giúp e là chọn text mẫu nữa ạ

 

mong a giúp đỡ

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

Thử cái này, text mẫu chỉ hỏi 1 lần thôi, lần sau không hỏi nữa.


(defun c:test(/ lten lsoluong ss diem diem1 n cao)
  (defun dxf(id v) (cdr (assoc id (entget v))))
  
  (princ "\nChon Block:")
  (setq lten nil)  
  (mapcar '(lambda(x) (if (not (member (setq tm (dxf 2 x)) lten)) (setq lten (cons  tm lten))))
 (acet-ss-to-list (ssget (list '(0 . "INSERT")))))
 
  (princ "\nTrong cac doi tuong:")
  (setq ss (acet-ss-to-list (ssget (list '(0 . "INSERT"))))
lsoluong (mapcar '(lambda(y) (length (vl-remove nil (mapcar '(lambda(x) (if (= y (dxf 2 x)) x nil)) ss)))) lten))
 
  (if (not textmau) (setq textmau (car (entsel "Chon Text mau:"))))
 
  (setq diem (getpoint "\nDiem dat text so luong:")
n -1
cao (dxf 40 textmau))
  (foreach v lten
    (entmakex (list (cons 0  "TEXT") (cons 10 (setq diem1 (polar diem (* -0.5 pi) (* 2 cao (setq n (1+ n))))))
   (cons 11 diem1) (cons 40 cao) (cons 7 (dxf 7 textmau)) (cons 71 (dxf 71 textmau)) (cons 72 (dxf 72 textmau))
   (cons 1 (strcat (nth n lten) " : " (itoa (nth n lsoluong))))))
  )
  (princ)  
)
 

@anh tuan : bạn có file nào có anonymous block cần đếm thì đưa lên tôi test cho.

  • 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

không biết có phải là anonymous không, nhưng những block có thể cho mình xoay tròn các mặt ấy, ví dụ block cái ghế, mình có thể "xoay" để thấy mặt trước, sau, trên, dưới, trái, phải..... thì lisp này không nhận ra.

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

Có phải cái này không?

 

(defun c:test(/ lten lsoluong ss diem diem1 n cao)
  (defun dxf(id v) (cdr (assoc id (entget v))))
  
  (princ "\nChon Block:")
  (setq lten nil)  
  (mapcar '(lambda(x) (if (not (member (setq tm (vla-get-Effectivename (vlax-ename->vla-object x))) lten))
      (setq lten (cons tm lten))))
 (acet-ss-to-list (ssget (list '(0 . "INSERT")))))
 
  (princ "\nTrong cac doi tuong:")
  (setq ss (acet-ss-to-list (ssget (list '(0 . "INSERT"))))
lsoluong (mapcar '(lambda(y)
  (length (vl-remove nil (mapcar '(lambda(x)
(if (= y (vla-get-Effectivename (vlax-ename->vla-object x))) x nil)) ss)))) lten))
 
  (if (not textmau) (setq textmau (car (entsel "Chon Text mau:"))))
 
  (setq diem (getpoint "\nDiem dat text so luong:")
n -1
cao (dxf 40 textmau))
  (foreach v lten
    (entmakex (list (cons 0  "TEXT") (cons 10 (setq diem1 (polar diem (* -0.5 pi) (* 2 cao (setq n (1+ n))))))
   (cons 11 diem1) (cons 40 cao) (cons 7 (dxf 7 textmau)) (cons 71 (dxf 71 textmau)) (cons 72 (dxf 72 textmau))
   (cons 1 (strcat (nth n lten) " : " (itoa (nth n lsoluong))))))
  )
  (princ)  
)

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 gặp lỗi này là sao vậy các bạn:

 

Command: test

Chon Block:
Select objects: 1 found

Select objects: 1 found, 2 total

Select objects:
Trong cac doi tuong:
Select objects: 0 found

Select objects:
Diem dat text so luong:; error: bad argument type: numberp: nil

Command:

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 gặp lỗi này là sao vậy các bạn:

 

Command: test

 

Chon Block:

Select objects: 1 found

 

Select objects: 1 found, 2 total

 

Select objects:

Trong cac doi tuong:

Select objects: 0 found

 

Select objects:

Diem dat text so luong:; error: bad argument type: numberp: nil

 

Command:

Bạn up file của bạn để test.

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


×