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

[yeuCau] lisp di chuyển chuột đến chọn (pick) nét vẽ thì nét vẽ nhấp nháy

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

Nhờ các Bác Viết cho lisp di chuyển chuột đến chọn (pick) nét vẽ thì nét vẽ nhấp nháy và sáng lên trên màn hình

Bình thường thì di chuột đến hình vẽ nó đã sáng lên rồi mà?

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

Khi để mọi sự chú ý và nổi bật những chi tiết thì ta cần phải làm nổi bật và sáng hơn nữa và có thêm nhấp nháy nữa 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

Thử cái này xem sao: các đối tượng được chọn sẽ HighLight va nhấp nháy khi di chuột.


;Doan  Van Ha - CadViet.com - ngay 13/5/2014
;Chuc nang: HighLight cac doi tuong duoc chon va nhap nhay khi di chuot.
(vl-load-com)
(defun C:HA( / rad gr code ss ss1 pt px p0 p1 p2 p3)
 (setq rad (/ (* (getvar "Viewsize") (getvar "Pickbox")) (cadr (getvar "Screensize"))) ss (ssadd))
 (princ "\nSelect objects: ")
 (while (and (setq gr (grread 't 15 1) code (car gr) pt (cadr gr)) (/= code 25) (not (equal gr '(2 13))))
  (redraw)
  (Draw_Grvecs pt rad 3)
  (cond
   ((= code 3)
    (setq p0 (polar pt (/ pi -2) rad) p1 (polar p0 0 rad) p2 (polar p1 (/ pi 2) (* 2 rad)) p3 (polar p2 (/ pi -1) (* 2 rad)))
    (setq ss1 (ssget "c" p1 p3))
(if ss1
(foreach ent (#SS->List ss1) (setq ss (ssadd ent ss)))
(progn
 (redraw)
      (setq px (getcorner pt "\nSpecify opposite corner: "))
 (if px (princ "\nSelect objects: "))
 (if (> (car pt) (car px))
       (setq ss1 (ssget "c" pt px))
       (setq ss1 (ssget "w" pt px)))
 (if ss1
  (progn
     (foreach ent (#SS->List ss1) (setq ss (ssadd ent ss)))
   (HighLightObjects (#SS->Objlist ss) T))))))
   ((and (= code 5) ss (> (sslength ss) 0))
    (HighLightObjects (#SS->Objlist ss) (if (or (<= 0 (Second) 0.25) (<= 0.5 (Second) 0.75)) T nil)))))
 (if (and ss (> (sslength ss) 0)) (HighLightObjects (#SS->Objlist ss) nil))
 (redraw) (sssetfirst nil ss) (princ))
(defun Draw_Grvecs(pt rad col / p0 p1 p2 p3 p4)
 (setq p0 (polar pt (/ pi -2) rad) p1 (polar p0 0 rad) p2 (polar p1 (/ pi 2) (* 2 rad)) p3 (polar p2 (/ pi -1) (* 2 rad)) p4 (polar p3 (/ pi -2) (* 2 rad)))
 (grvecs (list col p1 p2 p2 p3 p3 p4 p4 p1)))
(defun Second( / lst)
 (load "julian.lsp")
 (setq lst (jtoc (getvar "date")))
 (- (nth 5 lst) (fix (nth 5 lst))))
(defun *error* (msg)
 (redraw)
 (if (and ss (> (sslength ss) 0)) (HighLightObjects (#SS->Objlist ss) nil))
 (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*") (princ (strcat "\n** Error: " msg " **")))
 (princ))
(defun HighLightObjects (lst h)
 ((lambda (x) (mapcar '(lambda (obj) (vla-highlight obj x)) lst))
  (if h :vlax-true :vlax-false)))
(defun #SS->Objlist (ss / i lst)
 (repeat (setq i (sslength ss))
  (setq lst (cons (vlax-ename->vla-object (ssname ss (setq i (1- i)))) lst))))
(defun #SS->List (ss / i lst)
 (repeat (setq i (sslength ss)) (setq lst (cons (ssname ss (setq i (1- i))) lst))))
 

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ác bạ chỉ mình làm sao đăng bài viết lên đc hè ?

 

Muốn đăng bài lên diễn đàn, anh phải đăng ký làm thành viên của diễn đà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

Chào Bác Hà và các bác trên diễn đàn: Khi đi trình bày hay bảo vệ với chủ đầu tư bằng file cad trên máy chiếu để cho họ nhìn cho rõ nét và nổi bật các chi tiết mình cần nói  và cần thể hiện. Như vậy thì khi pick vào nét nào thì nét đó đậm, nét  và nháy các nét khác thì mờ đi. sau khi kết thúc lệnh thì lại trở về trạng thái như cũ. E cần như vậy Bác Ạ . Em hỏi Bác và các Bác trên diễn đàn có cách nào hay hơn là làm cho nét nhấp nháy không ạ. Em cám ơn các 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

Thử cái này xem sao: các đối tượng được chọn sẽ HighLight va nhấp nháy khi di chuột.


;Doan  Van Ha - CadViet.com - ngay 13/5/2014
;Chuc nang: HighLight cac doi tuong duoc chon va nhap nhay khi di chuot.
(vl-load-com)
(defun C:HA( / rad gr code ss ss1 pt px p0 p1 p2 p3)
 (setq rad (/ (* (getvar "Viewsize") (getvar "Pickbox")) (cadr (getvar "Screensize"))) ss (ssadd))
 (princ "\nSelect objects: ")
 (while (and (setq gr (grread 't 15 1) code (car gr) pt (cadr gr)) (/= code 25) (not (equal gr '(2 13))))
  (redraw)
  (Draw_Grvecs pt rad 3)
  (cond
   ((= code 3)
    (setq p0 (polar pt (/ pi -2) rad) p1 (polar p0 0 rad) p2 (polar p1 (/ pi 2) (* 2 rad)) p3 (polar p2 (/ pi -1) (* 2 rad)))
    (setq ss1 (ssget "c" p1 p3))
(if ss1
(foreach ent (#SS->List ss1) (setq ss (ssadd ent ss)))
(progn
 (redraw)
      (setq px (getcorner pt "\nSpecify opposite corner: "))
 (if px (princ "\nSelect objects: "))
 (if (> (car pt) (car px))
       (setq ss1 (ssget "c" pt px))
       (setq ss1 (ssget "w" pt px)))
 (if ss1
  (progn
     (foreach ent (#SS->List ss1) (setq ss (ssadd ent ss)))
   (HighLightObjects (#SS->Objlist ss) T))))))
   ((and (= code 5) ss (> (sslength ss) 0))
    (HighLightObjects (#SS->Objlist ss) (if (or (<= 0 (Second) 0.25) (<= 0.5 (Second) 0.75)) T nil)))))
 (if (and ss (> (sslength ss) 0)) (HighLightObjects (#SS->Objlist ss) nil))
 (redraw) (sssetfirst nil ss) (princ))
(defun Draw_Grvecs(pt rad col / p0 p1 p2 p3 p4)
 (setq p0 (polar pt (/ pi -2) rad) p1 (polar p0 0 rad) p2 (polar p1 (/ pi 2) (* 2 rad)) p3 (polar p2 (/ pi -1) (* 2 rad)) p4 (polar p3 (/ pi -2) (* 2 rad)))
 (grvecs (list col p1 p2 p2 p3 p3 p4 p4 p1)))
(defun Second( / lst)
 (load "julian.lsp")
 (setq lst (jtoc (getvar "date")))
 (- (nth 5 lst) (fix (nth 5 lst))))
(defun *error* (msg)
 (redraw)
 (if (and ss (> (sslength ss) 0)) (HighLightObjects (#SS->Objlist ss) nil))
 (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*") (princ (strcat "\n** Error: " msg " **")))
 (princ))
(defun HighLightObjects (lst h)
 ((lambda (x) (mapcar '(lambda (obj) (vla-highlight obj x)) lst))
  (if h :vlax-true :vlax-false)))
(defun #SS->Objlist (ss / i lst)
 (repeat (setq i (sslength ss))
  (setq lst (cons (vlax-ename->vla-object (ssname ss (setq i (1- i)))) lst))))
(defun #SS->List (ss / i lst)
 (repeat (setq i (sslength ss)) (setq lst (cons (ssname ss (setq i (1- i))) lst))))
 

Cái này nếu mấy anh viết giúp được thì rất hay. Sẽ rất ấn tượng khi bảo vệ dự án. Vì trong một bản vẽ quy hoạch rất nhiều màu sắc thì việc tạo cho một đối tượng nào đó sáng và nổi bật lênh sẽ giúp cho người xem dễ hình dung hơn.

PS: Theo em thì sử dụng lệnh xong thì đối tượng đó sẽ sáng rực lên và nhấp nháy liên tục đến khi thoát lệnh.

Nhờ anh em diễn đàn xem 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

Sáng rực lên thì không có, chỉ làm cho các thằng khác ít sáng hơn thì được ^^

Với CAD >= 2008 thì Layiso Lock and Fade

Với CAD?-> 14 thì có Transparent cho Layer

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

Sáng rực lên thì không có, chỉ làm cho các thằng khác ít sáng hơn thì được ^^

Với CAD >= 2008 thì Layiso Lock and Fade

Với CAD?-> 14 thì có Transparent cho Layer

 

Em lại có cách hơi ngược với cách của bác là  làm cho sáng rực lên khi di chuột vào:

Chuyển file.dwg thành flie ảnh >>>Tạo các block của vùng cần làm sáng rực  >>> Chèn file ảnh vào AutoCAD >>> Chèn bock của vùng cần làm sáng vào đúng vị trí của nó trong ảnh  >>> Di chuột vào block >>> Nét của block sẽ dầy dặn và sáng sủa >>> Muốn nhấp nháy thì dí chuột vào rồi lại lôi chuột ra liên tụ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

Gởi chung mọi người:

Ban đầu thấy y/c này cứ nghĩ chủ topic chỉ muốn lòe thiên hạ, nhưng bây giờ thấy nó thực sự hữu dụng. Đó là: khi cần trình chiếu trên cad thì việc làm sáng lên, hoặc tô đậm, hoặc cho nhấp nháy đối tượng được chọn là rất cần thiết. Highlight thì nét mãnh nhìn không rõ. Di chuột đến từng đối tượng thì nét đậm và nhìn rõ nhưng mỗi lần chỉ nhìn được 1 đối tượng (đơn hoặc phức). Ước gì khi chọn đối tượng thì nó cũng làm đậm như khi di chuột thì hay biết mấy.

@Hoằn: giải pháp của em chỉ phù hợp nếu các nhóm đối tượng muốn tô đậm đã được xác định từ trước, đồng thời mỗi lần di chuột chỉ làm đậm được 1 nhóm. Trong trường hợp tổng quát, khi trình chiếu trên file cad thì các đối tượng muốn tô đậm là chưa được xác định trước mà thường phụ thuộc vào hội nghị >> ít khả thi.

@Ketxu: để suy nghĩ xem liệu có giải thuật gì biến cái không có của cad thành cái có thể của lisp chăng?

  • 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

Cuối cùng cũng tìm ra được 1 giải thuật để giải quyết yêu cầu của chủ topic.

Lisp dưới đây có các chức năng sau:

- Làm đậm các đối tượng được chọn (tương tự như khi di chuột vào từng đối tượng).

- Highlight các đối tượng được chọn (tương tự như khi di chuột vào từng đối tượng).

- Làm nhấp nháy các đối tượng được chọn khi di chuột (cái này hình như Cad nguyên thủy chưa thấy có?).


;Doan  Van Ha - CadViet.com - ngay 13/5/2014. Edit: 17/5/2014.
;Chuc nang: To dam va Highlight cac doi tuong duoc chon, dong thoi lam nhap nhay chung khi di chuot.
(vl-load-com)
(defun Draw_Grvecs(pt rad col / p0 p1 p2 p3 p4)
 (setq p0 (polar pt (/ pi -2) rad) p1 (polar p0 0 rad) p2 (polar p1 (/ pi 2) (* 2 rad)) p3 (polar p2 (/ pi -1) (* 2 rad)) p4 (polar p3 (/ pi -2) (* 2 rad)))
 (grvecs (list col p1 p2 p2 p3 p3 p4 p4 p1)))
(defun Second( / lst)
 (if (and (vl-position "acetutil.arx" (arx)) (not (vl-catch-all-error-p (vl-catch-all-apply (function (lambda nil (acet-sys-shift-down)))))))
  (progn
   (load "julian.lsp")
   (setq lst (jtoc (getvar "date")))
   (- (nth 5 lst) (fix (nth 5 lst))))
  (progn (alert "Chuong trinh yeu cau Ban phai cai dat Tool Express.") (exit))))
(defun *error* (msg)
 (redraw)
 (if (and ss (> (sslength ss) 0)) (HighLightObjects (#SS->Objlist ss) nil))
 (if (and ss2 (> (sslength ss2) 0)) (mapcar 'vla-Delete (#SS->Objlist ss2)))
 (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*") (princ (strcat "\n** Error: " msg " **")))
 (princ))
(defun HighLightObjects (lst h)
 ((lambda (x) (mapcar '(lambda (obj) (vla-highlight obj x)) lst))
  (if h :vlax-true :vlax-false)))
(defun #SS->Objlist (ss / i lst)
 (repeat (setq i (sslength ss))
  (setq lst (cons (vlax-ename->vla-object (ssname ss (setq i (1- i)))) lst))))
(defun #SS->List (ss / i lst)
 (repeat (setq i (sslength ss)) (setq lst (cons (ssname ss (setq i (1- i))) lst))))
(defun COPYG(ss / lst ss2 obj1)
 (setq lst (#SS->Objlist ss) ss2 (ssadd))
 (foreach obj lst
  (vla-copy obj) (setq obj1 (vlax-ename->vla-object (entlast)))
  (vla-move obj1 (vlax-3d-point '(0 0)) (vlax-3d-point (list 0 (/ rad 5)))) (setq ss2 (ssadd (entlast) ss2))
  (vla-copy obj) (setq obj1 (vlax-ename->vla-object (entlast)))
  (vla-move obj1 (vlax-3d-point '(0 0)) (vlax-3d-point (list 0 (/ rad -5)))) (setq ss2 (ssadd (entlast) ss2))
  (vla-copy obj) (setq obj1 (vlax-ename->vla-object (entlast)))
  (vla-move obj1 (vlax-3d-point '(0 0)) (vlax-3d-point (list (/ rad 5) 0))) (setq ss2 (ssadd (entlast) ss2))
  (vla-copy obj) (setq obj1 (vlax-ename->vla-object (entlast)))
  (vla-move obj1 (vlax-3d-point '(0 0)) (vlax-3d-point (list (/ rad -5) 0))) (setq ss2 (ssadd (entlast) ss2)))
 ss2)
(defun C:HA( / rad gr code ss ss1 ss2 pt px p0 p1 p2 p3)
 (setq rad (/ (* (getvar "Viewsize") (getvar "Pickbox")) (cadr (getvar "Screensize"))) ss (ssadd))
 (princ "\nSelect objects: ")
 (while (and (setq gr (grread 't 15 1) code (car gr) pt (cadr gr)) (/= code 25) (not (equal gr '(2 13))))
  (redraw)
  (Draw_Grvecs pt rad 3)
  (cond
   ((= code 3)
    (setq p0 (polar pt (/ pi -2) rad) p1 (polar p0 0 rad) p2 (polar p1 (/ pi 2) (* 2 rad)) p3 (polar p2 (/ pi -1) (* 2 rad)))
    (setq ss1 (ssget "c" p1 p3))
(if ss1
(foreach ent (#SS->List ss1) (setq ss (ssadd ent ss)))
(progn
 (redraw)
      (setq px (getcorner pt "\nSpecify opposite corner: "))
 (if px (princ "\nSelect objects: "))
 (if (> (car pt) (car px))
       (setq ss1 (ssget "c" pt px))
       (setq ss1 (ssget "w" pt px)))
 (if ss1
  (progn
     (foreach ent (#SS->List ss1) (setq ss (ssadd ent ss)))
   (HighLightObjects (#SS->Objlist ss) T))))))
   ((and (= code 5) ss (> (sslength ss) 0))
    (if (and ss2 (> (sslength ss2) 0)) (mapcar 'vla-Delete (#SS->Objlist ss2)))
    (setq ss2 (copyg ss))
    (HighLightObjects (#SS->Objlist ss) (if (or (<= 0 (Second) 0.25) (<= 0.5 (Second) 0.75)) T nil)))))
 (if (and ss (> (sslength ss) 0)) (VisibleObjects (#SS->Objlist ss) T))
 (if (and ss2 (> (sslength ss2) 0)) (mapcar 'vla-Delete (#SS->Objlist ss2)))
 (redraw)
 (princ))
(princ "\nLenh su dung: HA")
(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

Gởi chung mọi người:

Ban đầu thấy y/c này cứ nghĩ chủ topic chỉ muốn lòe thiên hạ, nhưng bây giờ thấy nó thực sự hữu dụng. Đó là: khi cần trình chiếu trên cad thì việc làm sáng lên, hoặc tô đậm, hoặc cho nhấp nháy đối tượng được chọn là rất cần thiết. Highlight thì nét mãnh nhìn không rõ. Di chuột đến từng đối tượng thì nét đậm và nhìn rõ nhưng mỗi lần chỉ nhìn được 1 đối tượng (đơn hoặc phức). Ước gì khi chọn đối tượng thì nó cũng làm đậm như khi di chuột thì hay biết mấy.

@Hoằn: giải pháp của em chỉ phù hợp nếu các nhóm đối tượng muốn tô đậm đã được xác định từ trước, đồng thời mỗi lần di chuột chỉ làm đậm được 1 nhóm. Trong trường hợp tổng quát, khi trình chiếu trên file cad thì các đối tượng muốn tô đậm là chưa được xác định trước mà thường phụ thuộc vào hội nghị >> ít khả thi.

@Ketxu: để suy nghĩ xem liệu có giải thuật gì biến cái không có của cad thành cái có thể của lisp chăng?

 

Đúng là cách của em hơi bị củ chuối

Sau hội nghị sẽ LÓT TAY  cho mỗi vị đại biểu một lọ thuốc bổ mắt TOBICOM :) :) :)

Dưới đây là mặt bằng bố trí thiết bị công nghệ trong nhà xưởng, có thể di chuyển vị trí bock tùy ý của chủ đầu tư:

 

33333ooo_zps8858eeb1.gif

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áu chưa test, nhưng nếu mức yêu cầu như thế thì có thể sử dụng Group, kích hoạt Select Preview, thiết đặt Visual Effect Setting thành Thicken hoặc Both (tất cả trong Option -> Select) ^^

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áu chưa test, nhưng nếu mức yêu cầu như thế thì có thể sử dụng Group, kích hoạt Select Preview, thiết đặt Visual Effect Setting thành Thicken hoặc Both (tất cả trong Option -> Select) ^^

Ket cũng hiểu chưa hết ý như Hoằn. Giả sử có 1 bản cad cần trình chiếu cho chủ đầu tư. Trên bản vẽ có rất nhiều đối tượng, người ta có thể ngẩu hứng y/c làm nổi bật 1 hoặc 1 số đối tượng rời rạc nào đó thì lisp này làm ngon. Còn group hay block thì mất thời gian, chỉ phù hợp với các đối tượng được chỉ định trước mà 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

Đúng đấy Các Bác ạ .Trên thực tế bản vẽ có rất nhiều đối tượng,như Bác Hà nói. Chủ đầu tư người ta có thể ngẩu hứng  có thể y/c làm nổi bật 1 hoặc nhiều đối tượng rời rạc mà mình phải trình bày. Cái này khi trình chiếu em bị hỏi và gặp nhiều các 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

Vâng lisp # 15 của Bác dùng rất tốt. Trong bản vẽ có rất nhiều nét giá như Bác bổ sung thêm được các nét không được chọn sẽ mờ đi Screening = 50 thì quả thật tuyệt vời. Cám ơn Bác 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

Ý bạn ấy là làm mờ đối tượng không được chọn.

Screening = 50% có lẽ là đang nói tới độ mờ của nét vẽ giảm 50% 

Nó kiểu như lệnh Layiso (với tham số Lock and fade = 50)

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

Nhờ mọi người giải thích giùm mấy từ "Screening" và "Lock" and "Face" trong lệnh Layiso. Tôi không thấy nó đâu cả? 

Giải thích :

Command: LAYISO

Current setting: Lock layers, Fade=50

 

Select objects on the layer(s) to be isolated or [settings]: S

 

Enter setting for layers not isolated [Off/Lock and fade] <Lock and fade>: L

Enter fade value (0-90) <50>: 50

....

 Còn Screening 50% ở image sau: (Khi in muốn làm mờ đối tượng xuống 50%)

4652_screening50.jpg

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

×