Đến nội dung


Hình ảnh
- - - - -

[Đã xong] - Lệnh Bật/Tắt wipeout thay cho lệnh của cad


  • Please log in to reply
2 replies to this topic

#1 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 25 March 2012 - 01:15 AM

Bức xúc với việc fải lòng vòng để bật tắt wipeout bằng lệnh wipeout của cad và việc nó cứ tự động thêm 1 bước regen bản vẽ khi thực hiện thao tác bật hoặc tắt, bản vẽ nhẹ thì không sao chứ bản vẽ nặng thì cứ việc ngồi chờ dài cổ. Thế nên mình viết lại lệnh này cho dễ dùng hơn. Tặng các bạn dùng chơi.

;;; Copyright 2012 Thaistreetz from Cadviet.com
(defun c:wr (/ entmod-en ss->list en)
(defun entmod-en (code value en / elist) (entmod (subst (cons code value) (assoc code (setq elist (entget en '("*")))) elist)))
(defun ss->list (ss / i lst) (if ss (repeat (setq i (sslength ss)) (setq lst (cons (ssname ss (setq i (1- i))) lst)))))
(if (not (setq en (dictsearch (namedobjdict) "ACAD_WIPEOUT_VARS")))
(prompt "<< Khong co doi tuong Wipeout nao trong ban ve >>")
(progn
(if (= (cdr (assoc 70 en)) 0)
(progn (entmod-en 70 1 (cdr (assoc -1 en))) (prompt ": << Bat Wipeout >>"))
(progn (entmod-en 70 0 (cdr (assoc -1 en))) (prompt ": << Tat Wipeout >>")))
(foreach en (ss->list (ssget "x" '((0 . "WIPEOUT,INSERT")))) (entupd en))))
(princ))

Bật và tắt đều dùng 1 lệnh duy nhất WR. không phải regen bản vẽ nên em nó nuột hơn hàng của Cad nhiều :D
  • 5

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#2 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 21 April 2012 - 08:54 AM

Trong các bản cad2013+ thì wipeout đã được tích hợp vào cad như 1 đối tượng chính thức của cad chứ không fải được tải vào thông qua 1 arx ngoài nữa. đối tượng wipeout cũng được thêm 1 trạng thái chỉ hiện chứ không in ra: "Display but not plot" so với các bản cad trước chỉ có 2 trạng thái OnOff

Việc điều khiển trạng thái của đối tương wipeout từ fiên bản này được chuyển cho 1 biến hệ thống là WIPEOUTFRAME chứ không dùng từ điển đối tượng nữa. các giá trị tương ứng:
- Off <0>
- On <1>
- Display but not plot <2>

Lisp trên được viết lại để tương thích cho cả các bản cad 2013+ như sau:

(defun c:wr (/ en)
(if (< (atof (getvar "acadver")) 19)
(if (not (setq en (dictsearch (namedobjdict) "ACAD_WIPEOUT_VARS")))
(prompt "<< Khong co doi tuong wipeout nao trong ban ve>>")
(progn
(if (= (cdr (assoc 70 en)) 0)
(progn (entmod-en 70 1 (cdr (assoc -1 en))) (prompt ": << Bat Wipeout >>"))
(progn (entmod-en 70 0 (cdr (assoc -1 en))) (prompt ": << Tat Wipeout >>")))
(foreach en (ss->list (ssget "x" '((0 . "WIPEOUT,INSERT")))) (entupd en))))
(if (= (getvar "wipeoutframe") 0)
(progn (setvar "wipeoutframe" 1) (prompt ": << Bat Wipeout >>"))
(progn (setvar "wipeoutframe" 0) (prompt ": << Tat Wipeout >>"))))
(princ))

  • 2

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#3 camlkdvk

camlkdvk

    biết pan

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

Đã gửi 16 June 2016 - 03:40 PM

Bức xúc với việc fải lòng vòng để bật tắt wipeout bằng lệnh wipeout của cad và việc nó cứ tự động thêm 1 bước regen bản vẽ khi thực hiện thao tác bật hoặc tắt, bản vẽ nhẹ thì không sao chứ bản vẽ nặng thì cứ việc ngồi chờ dài cổ. Thế nên mình viết lại lệnh này cho dễ dùng hơn. Tặng các bạn dùng chơi.



;;; Copyright 2012 Thaistreetz from Cadviet.com

(defun c:wr (/ entmod-en ss->list en)

(defun entmod-en (code value en / elist) (entmod (subst (cons code value) (assoc code (setq elist (entget en '("*")))) elist)))

(defun ss->list (ss / i lst) (if ss (repeat (setq i (sslength ss)) (setq lst (cons (ssname ss (setq i (1- i))) lst)))))

(if (not (setq en (dictsearch (namedobjdict) "ACAD_WIPEOUT_VARS")))

 (prompt "<< Khong co doi tuong Wipeout nao trong ban ve >>")

 (progn

  (if (= (cdr (assoc 70 en)) 0)

   (progn (entmod-en 70 1 (cdr (assoc -1 en))) (prompt ": << Bat Wipeout >>"))

   (progn (entmod-en 70 0 (cdr (assoc -1 en))) (prompt ": << Tat Wipeout >>")))

  (foreach en (ss->list (ssget "x" '((0 . "WIPEOUT,INSERT")))) (entupd en))))

(princ))


Bật và tắt đều dùng 1 lệnh duy nhất WR. không phải regen bản vẽ nên em nó nuột hơn hàng của Cad nhiều :D

 

lisp hay lắm thanks chủ thớt!


  • 0