Chuyển đến nội dung
Diễn đàn CADViet
friendship293a

Xin lisp lọc chọn các số trong khoảng AB

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

Em cần Lisp lọc chọn các số trong khoảng ab ví dụ từ 1 - 4.5

1. nhập a

2. nhập b

3. trọn vùng cần lọc

4. kết quả là những số nằm trong khoảng AB được chọn. Thanks pro

file số liệu

 

http://www.cadviet.com/upfiles/3/1030_loc_doi_tuong.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

Viết cho các bạn đây.

(defun c:TD(/ SSchon Lts_so a b LtsInAB )
(setq ssChon  (ssget (list (cons 0 "TEXT"))))
(setq ss_So  (ChonTextSo ssChon))
(setq Lts_so (acet-ss-to-list ss_So))
(setq a (getreal "\nNhap so nho: "))
(setq b (getreal "\nNhap so lon: "))
(setq LtsInAB (vl-remove nil (mapcar '(lambda(x) (if (and ( > (atof (cdr (assoc 1 (entget x)))) a) ( < (atof (cdr (assoc 1 (entget x)))) b)) x nil)) Lts_so)))
(command "_.PSELECT" (acet-list-to-ss LtsInAB) "")
(princ)
)
(defun ChonTextSo (ss / i ent str ss1) 
    (progn
      (setq i	0
	    ss1	(ssadd)
      )
      (repeat (sslength ss)
	(setq ent (ssname ss i)
	      str (cdr(assoc 1 (entget ent)))
	      i	  (+ 1 i)
	)
	(if (distof str 2)
	  (ssadd ent ss1)
	)
      )
      (if (> (sslength ss1) 0)
	ss1
      )      
    )
)

 

(defun c:TD(/ SSchon Lts_so a b LtsInAB )
(setq ssChon  (ssget))
(setq ss_So  (ChonTextSo ssChon))
(setq Lts_so (acet-ss-to-list ss_So))
(setq a (getreal "\nNhap so nho: "))
(setq b (getreal "\nNhap so lon: "))
(setq LtsInAB (vl-remove nil (mapcar '(lambda(x) (if (and ( > (atof (cdr (assoc 1 (entget x)))) a) ( < (atof (cdr (assoc 1 (entget x)))) B)) x nil)) Lts_so)))
(command "_.PSELECT" (acet-list-to-ss LtsInAB) "")
(princ)
)
(defun ChonTextSo (ss / i ent str ss1) 
    (progn
      (setq i 0
   ss1 (ssadd)
      )
      (repeat (sslength ss)
(setq ent (ssname ss i)
     str (cdr(assoc 1 (entget ent)))
     i  (+ 1 i)
)
(if (distof str 2)
 (ssadd ent ss1)
)
      )
      (if (> (sslength ss1) 0)
ss1
      )      
    )
)
  • Vote tăng 3

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

Lisp có nhiều đoạn có thể rút gọn.

Tôi bổ sung thêm 1 hàm có thể chọn số trong đoạn [a,b]

 

(defun c:s1() (SelRange <))
(defun c:s2() (SelRange <=))

(defun SelRange(f / ss a b)
    (setq ss  (acet-ss-to-list (ssget '((0 . "TEXT")))))
    (setq a (getreal "\nNhap so nho: ") b (getreal "\nNhap so lon: "))
    (command "_.PSELECT" (acet-list-to-ss (vl-remove nil (mapcar '(lambda(x) (if (f a (distof (cdr (assoc 1 (entget x)))) b) x nil)) ss))) "")
    (princ)
)
 
  • Vote tăng 2

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

Sao các bác không phát triển luôn các trường hợp :

- Chọn số nhỏ hơn a

- Chọn số lớn hơn b

cho nó đủ bộ :)

- Chọn số nhỏ hơn a >>>>>>>> Cho số bé --> bé vô cùng, số lớn = a

- Chọn số lớn hơn b >>>>>>>> Cho số lớn --> lớn vô cùng, số bé  = b

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

Bổ sung theo yêu cầu:

 

(defun c:n1() (SelRange1 <))
(defun c:n2() (SelRange1 <=))
(defun c:l1() (SelRange1 >))
(defun c:l2() (SelRange1 >=))

(defun SelRange1(f / ss a)
    (setq ss  (acet-ss-to-list (ssget '((0 . "TEXT")))) a (getreal "\nNhap so: ") )
    (command "_.PSELECT" (acet-list-to-ss (vl-remove nil (mapcar '(lambda(x / v) (if (and (setq v (distof (cdr (assoc 1 (entget x)))))(f v a )) x nil)) ss))) "")
    (princ)
)
  • Vote tăng 2

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ào các bác, em dùng lisp thì bị báo lỗi:

 

Command: td
Select objects: Specify opposite corner: 18 found
Select objects:
Nhap so nho: 1
Nhap so lon: 42
_.PSELECT Unknown command "PSELECT".  Press F1 for help. 

 

em đang dùng cad 2010. bác nào biết lỗi gì chỉ em vớ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

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


×