Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
4 replies to this topic

#1 nhimret

nhimret

    biết zoom

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

Đã gửi 07 January 2012 - 11:52 AM

ở 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

  • 0

#2 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 07 January 2012 - 05:16 PM

ở 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))

  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#3 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4105 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 07 January 2012 - 10:56 PM

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).
  • 0

#4 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 07 January 2012 - 11:04 PM

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ó.
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#5 nhimret

nhimret

    biết zoom

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

Đã gửi 11 January 2012 - 11:02 AM

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 :*

  • 0