Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Đăng nhập để thực hiện theo  
nhimret

[Nhờ chỉnh sửa] lisp thay đổi thuộc tính associative của hatch

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

ở dưới là lisp của bác Tuệ... tôi muốn chỉnh lisp có thể chọn nhiều đối tượng Hatch cùng 1 lúc (lisp hiện giờ chỉ thực hiện đối với từng đối tượng, muốn tiếp tục phải làm lại lệnh)

 

nếu có thể thì các bác có thể thêm chức năng chọn tất cả các đối tượng, nhưng lisp chỉ tác động đến các đối tượng hatch (tương tự như lệnh DDA bỏ thuộc tính assoc của dim ý)

 

cám ơn các bác nhiều

 

;; free lisp from cadviet.com
(defun c:hma ()
(setvar "hpassoc" 1)
(setvar "osmode" 512)
(setq ddd (entsel "\nChuyen Hatch : Non-associative -> associative"))
(while
(null ddd)
(princ "\nDoi tuong khong phai la Hatch! Chon lai")
(setq ddd (entsel "\nChon Hatch mau :"))
)
(setq ename ddd
elist (entget (car ename))
etyp (cdr (assoc 0 elist))
old (getvar "clayer")
);setq
(if (/= etyp "HATCH")
(prompt "\nKHONG PHAI DOI TUONG HATCH! HAY THU LAI!")
(progn
(setq layn (cdr (assoc 8 elist)))
(setvar "HPNAME" (cdr (assoc 2 elist)))
))
(if (= (setvar "HPNAME" (cdr (assoc 2 elist))) "SOLID")
(Progn
(setq pt1 (cadr ddd))
(setvar "clayer" layn)
(entdel (car ename))
(command "bhatch" pt1 "")
(setvar "clayer" old)
))
(if (/= (setvar "HPNAME" (cdr (assoc 2 elist))) "SOLID")
(Progn
;(setq pt1 (getpoint "\nCHON MOT DIEM TRONG VUNG SE HATCH: "))
(setq pt1 (cadr ddd))
(setvar "clayer" layn)
(entdel (car ename))
(command "bhatch" pt1 "")
(setvar "clayer" old)
);progn
);if
(princ)
);defun
;;;;;;;;;;;;;
(defun c:hmna ()
(setvar "hpassoc" 0)
(setvar "osmode" 512)
(setq ddd (entsel "\nChuyen Hatch : associative -> Non-associative"))
(while
(null ddd)
(princ "\nDoi tuong khong phai la Hatch! Chon lai")
(setq ddd (entsel "\nChon Hatch mau :"))
)
(setq ename ddd
elist (entget (car ename))
etyp (cdr (assoc 0 elist))
old (getvar "clayer")
);setq
(if (/= etyp "HATCH")
(prompt "\nKHONG PHAI DOI TUONG HATCH! HAY THU LAI!")
(progn
(setq layn (cdr (assoc 8 elist)))
(setvar "HPNAME" (cdr (assoc 2 elist)))
))
(if (= (setvar "HPNAME" (cdr (assoc 2 elist))) "SOLID")
(Progn
(setq pt1 (cadr ddd))
(setvar "clayer" layn)
(entdel (car ename))
(command "bhatch" pt1 "")
(setvar "clayer" old)
))
(if (/= (setvar "HPNAME" (cdr (assoc 2 elist))) "SOLID")
(Progn
;(setq pt1 (getpoint "\nCHON MOT DIEM TRONG VUNG SE HATCH: "))
(setq pt1 (cadr ddd))
(setvar "clayer" layn)
(entdel (car ename))
(command "bhatch" pt1 "")
(setvar "clayer" old)
);progn
);if
(princ)
);defun

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ưới là lisp của bác Tuệ... tôi muốn chỉnh lisp có thể chọn nhiều đối tượng Hatch cùng 1 lúc (lisp hiện giờ chỉ thực hiện đối với từng đối tượng, muốn tiếp tục phải làm lại lệnh)

nếu có thể thì các bác có thể thêm chức năng chọn tất cả các đối tượng, nhưng lisp chỉ tác động đến các đối tượng hatch (tương tự như lệnh DDA bỏ thuộc tính assoc của dim ý)

cám ơn các bác nhiều

Tôi chỉ giúp bạn được 50%, nghĩa là chuyển 1 tập hợp chọn các hatch có kiểu nguyên thuỷ là associative sang not associative, nhưng nếu kiểu nguyên thuỷ là not associative thì chưa nghĩ ra, mà phải làm từng cái một như lisp của bác Tue_NV.

Khi kiểu nguyên thuỷ đã là associative thì dùng lệnh này có thể chuyển qua lại giữa 2 kiểu.

;Doan Van Ha - CADViet.com - Ngay 07/01/2011
;Chuyen Hatch nguyen thuy la associative, qua lai giua 2 kieu.
;Khong the chuyen Hatch nguyen thuy la not associative.
(defun C:HA( / ss i ed)
(setq ss (ssget '((0 . "HATCH"))))
(setq i 0)
(repeat (sslength ss)
 (setq ed (entget (ssname ss i)))
 (if (= (cdr (assoc 71 ed)) 1)
  (setq ed (subst (cons 71 0) (assoc 71 ed) ed ))
  (setq ed (subst (cons 71 1) (assoc 71 ed) ed )))
 (entmod ed)
 (setq i (1+ i)))
(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ôi chỉ giúp bạn được 50%, nghĩa là chuyển 1 tập hợp chọn các hatch có kiểu nguyên thuỷ là associative sang not associative, nhưng nếu kiểu nguyên thuỷ là not associative thì chưa nghĩ ra, mà phải làm từng cái một như lisp của bác Tue_NV.

Khi kiểu nguyên thuỷ đã là associative thì dùng lệnh này có thể chuyển qua lại giữa 2 kiểu.

...

Làm ngược lại có lẽ là bất khả thi.

 

Bởi vì Hatch sau khi đã bỏ associate thì không còn mối liên hệ giữa hatch và các đối tượng tạo ra nó. Trừ phi, chúng ta create lại các đối tượng này (lúc đó sẽ bị trùng với các đối tượng gốc ban đầ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

Làm ngược lại có lẽ là bất khả thi.

 

Bởi vì Hatch sau khi đã bỏ associate thì không còn mối liên hệ giữa hatch và các đối tượng tạo ra nó. Trừ phi, chúng ta create lại các đối tượng này (lúc đó sẽ bị trùng với các đối tượng gốc ban đầu).

Cám ơn bác Hoành! Lâu lắm mới gặp bác. Tôi cũng đã nghĩ như vậy nhưng sợ mình tài mọn nên còn chờ lão làng lên tiếng chứ không dám kết luận. Phương án tạo đối tượng trùng thì giải quyết được, nhưng hatch xong thì nó dư boundary hiện hữu mà ta vẫn chưa biết 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

cám ơn bác Hà... mấy hôm đi công tác hôm nay mới vào được cadviet... mừng quá được bác giúp đỡ...

 

được lisp như bác hướng dẫn là tốt quá rồi, ko cần từ assoc --> non assoc lắm, vì cad 2012 cũng có co kéo hatch...

 

nhiều lúc đối tác đưa bản vẽ có hatch để chế độ assoc, move 1 cái là hatch tràn ra hết bản vẽ, ko để ý in ra là hy sinh luôn...

 

cám ơn bác phát nữa :*

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  

×