Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
united

[Yêu cầu] Lisp chọn số chẵn hoặc lẻ

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

Cảm ơn các anh vì đã quan tâm ạ!

Như tiêu đề, em muốn nhờ các anh viết giúp em 1 lisp chọn số với lựa chọn chẵn hoặc lẻ, rồi chuyển số chọn được sang màu 5.

Các số được chọn chỉ là số tự nhiên (1, 2, 3...) và nếu được với số nguyên (-1, -2, -3,..., 1, 2, 3...) thì tốt ạ.

Em cảm ơn nhiều ạ!

  • Vote giảm 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

Quan tâm thì cũng nên trình bày vấn đề này bạn định làm cái gì? Xem có thiết thực để mọi người cất công viết vài dòng code hay không. 

Viết thì viết được đấy, nhưng không thiết thực thì không đáng để viết.

  • Like 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

Dạ em sợ trình bày dài dòng các anh ngại đọc thôi ạ.

Cụ thể là thế này, em hay phải làm việc với bản đồ địa hình với các đường đồng mức có ghi giá trị cao độ trên nó.

Do bản đồ em nhận được thường là tỷ lệ 1:1000, em muốn giảm tỷ lệ bản đồ xuống 1:2000 thì phải xóa bớt các đường đồng mức đi.

Sau khi xóa các đường đồng mức thì còn lại các text thừa với giá trị cao độ chẵn hoặc lẻ. Với rất nhiều text mà thao tác bằng FIND hoặc QSELECT thì sẽ mất nhiều thời gian.

Tương tự với các mặt cắt có ghi cao độ từ thấp đến cao và cũng muốn xóa bớt text...

Dạ vấn đề là như thế ạ.

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

Dạ em sợ trình bày dài dòng các anh ngại đọc thôi ạ.

Cụ thể là thế này, em hay phải làm việc với bản đồ địa hình với các đường đồng mức có ghi giá trị cao độ trên nó.

Do bản đồ em nhận được thường là tỷ lệ 1:1000, em muốn giảm tỷ lệ bản đồ xuống 1:2000 thì phải xóa bớt các đường đồng mức đi.

Sau khi xóa các đường đồng mức thì còn lại các text thừa với giá trị cao độ chẵn hoặc lẻ. Với rất nhiều text mà thao tác bằng FIND hoặc QSELECT thì sẽ mất nhiều thời gian.

Tương tự với các mặt cắt có ghi cao độ từ thấp đến cao và cũng muốn xóa bớt text...

Dạ vấn đề là như thế ạ.

Bạn thử quăng bản vẽ lên hay Screenshot lại text đó xem

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

Theo y/c của Bạn, số chẵn màu 5, số lẽ màu 3

(defun c:cle ( / num ss _dxf)
  (defun _dxf (code e) (cdr (assoc code (entget e))))
  (setq ss (ssget '((0 . "*TEXT"))))
  (foreach n (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
    (if(and
	 (setq num (distof (_dxf 1 n)))
	 (= (rem num 1) 0);chon so nguyen
	 )
      (if(= (rem num 2) 0); chon so chan
	(vla-put-color(vlax-ename->vla-object n) 5); so chan mau 5
	(vla-put-color(vlax-ename->vla-object n) 3); so le mau 3
	)
      )
    )
  (princ)
  )

 

  • Like 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
19 phút trước, tien2005 đã nói:

Theo y/c của Bạn, số chẵn màu 5, số lẽ màu 3


(defun c:cle ( / num ss _dxf)
  (defun _dxf (code e) (cdr (assoc code (entget e))))
  (setq ss (ssget '((0 . "*TEXT"))))
  (foreach n (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
    (if(and
	 (setq num (distof (_dxf 1 n)))
	 (= (rem num 1) 0);chon so nguyen
	 )
      (if(= (rem num 2) 0); chon so chan
	(vla-put-color(vlax-ename->vla-object n) 5); so chan mau 5
	(vla-put-color(vlax-ename->vla-object n) 3); so le mau 3
	)
      )
    )
  (princ)
  )

 

Dạ chuẩn luôn ạ. Thank anh!

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 19/3/2019 tại 10:36, tien2005 đã nói:

Theo y/c của Bạn, số chẵn màu 5, số lẽ màu 3


(defun c:cle ( / num ss _dxf)
  (defun _dxf (code e) (cdr (assoc code (entget e))))
  (setq ss (ssget '((0 . "*TEXT"))))
  (foreach n (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
    (if(and
	 (setq num (distof (_dxf 1 n)))
	 (= (rem num 1) 0);chon so nguyen
	 )
      (if(= (rem num 2) 0); chon so chan
	(vla-put-color(vlax-ename->vla-object n) 5); so chan mau 5
	(vla-put-color(vlax-ename->vla-object n) 3); so le mau 3
	)
      )
    )
  (princ)
  )

 

Dạ, nhờ anh chỉnh giúp em lọc chọn (có thể dùng lệnh move di chuyển các đối tượng khi được chọn) lệnh 1 là chọn số lẻ, lệnh 2 là chọn số chẵn, em cảm ơ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
(defun c:1 ( / num ss _dxf ssle i)
  (defun _dxf (code e) (cdr (assoc code (entget e))))
  (setq ss (ssget '((0 . "*TEXT"))))
  (setq ssle (ssadd))
  (setq i 0)
  (repeat (sslength ss)
    (setq n (ssname ss i))
    (if (and
	 (setq num (distof (_dxf 1 n)))
	 (= (rem num 1) 0);chon so nguyen
	 )
      (if(= (rem num 2) 1); chon so le
	(ssadd n ssle)
	;(vla-put-color(vlax-ename->vla-object n) 5); so chan mau 5
	;(vla-put-color(vlax-ename->vla-object n) 3); so le mau 3
	)
      )
    (setq i (1+ i))
    )
  (sssetfirst nil ssle)
  (princ)
  )
;---------------------------------------------------------------------
(defun c:2 ( / num ss _dxf sschan i)
  (defun _dxf (code e) (cdr (assoc code (entget e))))
  (setq ss (ssget '((0 . "*TEXT"))))
  (setq sschan (ssadd))
  (setq i 0)
  (repeat (sslength ss)
    (setq n (ssname ss i))
    (if (and
	 (setq num (distof (_dxf 1 n)))
	 (= (rem num 1) 0);chon so nguyen
	 )
      (if(= (rem num 2) 0); chon so chan
	(ssadd n sschan)
	;(vla-put-color(vlax-ename->vla-object n) 5); so chan mau 5
	;(vla-put-color(vlax-ename->vla-object n) 3); so le mau 3
	)
      )
    (setq i (1+ i))
    )
  (sssetfirst nil sschan)
  (princ)
  )

Sửa lại cho 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
13 giờ trước, GIRLXAYDUNG đã nói:

Dạ, nhờ anh chỉnh giúp em lọc chọn (có thể dùng lệnh move di chuyển các đối tượng khi được chọn) lệnh 1 là chọn số lẻ, lệnh 2 là chọn số chẵn, em cảm ơn ạ

Mình làm lisp  này 2 trong 1.

(defun c:12  (/ ent num scl ss)
  (cond ((and (setq ss (ssget '((0 . "*TEXT") (1 . "~*[~-0-9~~ ]*") (1 . "* # *,~* * *") (1 . "~*# #*"))))
              (not (initget "Chan Le"))
              (setq num (cond ((eq (getkword "\nChon so [Chan/Le] <Le>: ") "Chan") 0)
                              (1))))
         (setq scl (ssadd))
         (while (and (setq ent (ssname ss 0)) (ssdel ent ss))
           (if (eq (rem (atof (cdr (assoc 1 (entget ent)))) 2) num)
             (setq scl (ssadd ent scl))))
         (sssetfirst nil scl)))
  (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

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
Đăng nhập để thực hiện theo  

×