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

[ yêu cầu] lisp đổi tên blog được chọn

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

Do nhu cầu công việc, em rất cần một lisp đổi tên block cục bộ chứ ko phải giống lệnh rename trong cad, cụ thể em xin diễn đạt như sau:

Giả sử có 100 đối tượng block, tên của block là CADVIET nếu ta dùng rename của CAD thì 100 đối tượng block đó đều bị đổi tên, nhưng ở đây em chỉ muốn đổi tên 10 block trong số 100 block đó thôi. Như thế sẽ có 10 đối tượng thuộc block có tên mới là LISP chẳng hạn.

Command: Doiten

select object: Chọn vào 10 block muốn đổi tên

new name: LISP

=> kết quả là 10 đối tượng block được chọn đó được đổi tên từ CADVIET Sang LISP.

Rất mong các anh trên diễn đàn quan tâm giúp đỡ. Em xin chân thành cảm ơ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

Do nhu cầu công việc, em rất cần một lisp đổi tên block cục bộ chứ ko phải giống lệnh rename trong cad, cụ thể em xin diễn đạt như sau:

Giả sử có 100 đối tượng block, tên của block là CADVIET nếu ta dùng rename của CAD thì 100 đối tượng block đó đều bị đổi tên, nhưng ở đây em chỉ muốn đổi tên 10 block trong số 100 block đó thôi. Như thế sẽ có 10 đối tượng thuộc block có tên mới là LISP chẳng hạn.

Command: Doiten

select object: Chọn vào 10 block muốn đổi tên

new name: LISP

=> kết quả là 10 đối tượng block được chọn đó được đổi tên từ CADVIET Sang LISP.

Rất mong các anh trên diễn đàn quan tâm giúp đỡ. Em xin chân thành cảm ơn !

Hề hề hề,

Theo mình hiểu thì trong Cad, không cho phép tồn tại hai block giống hệt nhau mà khác tên bạn ạ.

Vậy nên có nhẽ bạn không thể chỉ chuyển tên block được mà phải tạo một block mới rồi chèn trở lại vào vị trí của block cũ mà thôi.

nếu bạn đồng ý cách làm này thì mình có thể viết lisp giùm bạn nhưng nên nhớ rằng hai block lúc này có hình thức giống nhau nhưng cấu trúc của block là hoàn toàn khác và khi sử dụng chúng bạn cần hết sức lưu tâm kẻo nhầm lẫn là nguy đó.

Hề hề hề,...

  • 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

Do nhu cầu công việc, em rất cần một lisp đổi tên block cục bộ chứ ko phải giống lệnh rename trong cad, cụ thể em xin diễn đạt như sau:

Giả sử có 100 đối tượng block, tên của block là CADVIET nếu ta dùng rename của CAD thì 100 đối tượng block đó đều bị đổi tên, nhưng ở đây em chỉ muốn đổi tên 10 block trong số 100 block đó thôi. Như thế sẽ có 10 đối tượng thuộc block có tên mới là LISP chẳng hạn.

Command: Doiten

select object: Chọn vào 10 block muốn đổi tên

new name: LISP

=> kết quả là 10 đối tượng block được chọn đó được đổi tên từ CADVIET Sang LISP.

Rất mong các anh trên diễn đàn quan tâm giúp đỡ. Em xin chân thành cảm ơn !

Mình đã viết 1 cái rồi nhưng chưa nhớ link, post lại cho bạn. Có thể dùng cho cả Anon Block

;| Change Anonymous Block to normal with new Name
@ Ketxu 27 - 9 - 2011
|;
(defun c:nb( / blkObj blkName blkNew_Name fn pt)
(vl-load-com)
(defun ST:SS->List-Vla (ss / n e l)
 (setq n (sslength ss))
 (while (setq e (ssname ss (setq n (1- n))))
(setq l (cons (vlax-ename->vla-object e) l))
 )
)
(defun change_block(old new)
(foreach blkObj (setq ss (ST:SS->List-Vla (ssget (list (cons 0 "INSERT")(cons 2 old)))))
(vla-put-name blkObj new);;change the name
(vla-update blkObj)
)
)
(grtext -1 "Free Lisp From Cadviet @Ketxu")
(setvar "cmdecho" 0)
(setq
blkObj (vlax-ename->vla-object (car(entsel "\nBlock Source :")))
blkName (vlax-get-property blkObj
(if (vlax-property-available-p blkObj 'EffectiveName) 'EffectiveName 'Name)
 ) 
blkNew_Name (getstring "\n New Name :")
 fn (strcat (getenv "TEMP") "\\" blkNew_Name ".dwg")
)
(command ".-wblock" fn "_Y" blkName "") 
(command "._insert" (strcat blkNew_Name "=" fn) nil )
(if (wcmatch "`*" (substr blkName 1 1))(setq blkName (strcat "`*" (substr blkName 2))))
(change_block blkName blkNew_Name)
(vl-file-delete  fn)
)

  • 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

Mình đã viết 1 cái rồi nhưng chưa nhớ link, post lại cho bạn. Có thể dùng cho cả Anon Block

;| Change Anonymous Block to normal with new Name
@ Ketxu 27 - 9 - 2011
|;
(defun c:nb( / blkObj blkName blkNew_Name fn pt)
(vl-load-com)
(defun ST:SS->List-Vla (ss / n e l)
 (setq n (sslength ss))
 (while (setq e (ssname ss (setq n (1- n))))
(setq l (cons (vlax-ename->vla-object e) l))
 )
)
(defun change_block(old new)
(foreach blkObj (setq ss (ST:SS->List-Vla (ssget (list (cons 0 "INSERT")(cons 2 old)))))
(vla-put-name blkObj new);;change the name
(vla-update blkObj)
)
)
(grtext -1 "Free Lisp From Cadviet @Ketxu")
(setvar "cmdecho" 0)
(setq
blkObj (vlax-ename->vla-object (car(entsel "\nBlock Source :")))
blkName (vlax-get-property blkObj
(if (vlax-property-available-p blkObj 'EffectiveName) 'EffectiveName 'Name)
 )
blkNew_Name (getstring "\n New Name :")
 fn (strcat (getenv "TEMP") "\\" blkNew_Name ".dwg")
)
(command ".-wblock" fn "_Y" blkName "")
(command "._insert" (strcat blkNew_Name "=" fn) nil )
(if (wcmatch "`*" (substr blkName 1 1))(setq blkName (strcat "`*" (substr blkName 2))))
(change_block blkName blkNew_Name)
(vl-file-delete  fn)
)

Hề hề. Thick cái điệu cười của cái anh có cái nick xấu như con gấu KETXU này. Nhưng mà lisp a viết a chưa chạy thử rùi ?

Chẳng may chạy lisp 100 lần thì mới có lần nó đổi được tên. Và cái thứ 2 là em cần chọn 1 lúc nhiều đối tượng để đổi tên ý. Như thế cho nhanh ạ ? E đã post rõ trong yêu cầu rùi ạ. anh kiểm tra lại giúp em nhé. hí hí. CAD ko làm được mà lisp làm được thì thật là cao siêu.hè hè

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

Hề hề. Thick cái điệu cười của cái anh có cái nick xấu như con gấu KETXU này. Nhưng mà lisp a viết a chưa chạy thử rùi ?

Chẳng may chạy lisp 100 lần thì mới có lần nó đổi được tên. Và cái thứ 2 là em cần chọn 1 lúc nhiều đối tượng để đổi tên ý. Như thế cho nhanh ạ ? E đã post rõ trong yêu cầu rùi ạ. anh kiểm tra lại giúp em nhé. hí hí. CAD ko làm được mà lisp làm được thì thật là cao siêu.hè hè

Ai nói với bạn là CAD không làm được vậy hè?

Hãy để Lisp giải quyết công việc này

Nếu Lisp làm không được -> Đến lúc đó CAD mới ra tay.

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

Do nhu cầu công việc, em rất cần một lisp đổi tên block cục bộ chứ ko phải giống lệnh rename trong cad, cụ thể em xin diễn đạt như sau:

Giả sử có 100 đối tượng block, tên của block là CADVIET nếu ta dùng rename của CAD thì 100 đối tượng block đó đều bị đổi tên, nhưng ở đây em chỉ muốn đổi tên 10 block trong số 100 block đó thôi. Như thế sẽ có 10 đối tượng thuộc block có tên mới là LISP chẳng hạn.

Command: Doiten

select object: Chọn vào 10 block muốn đổi tên

new name: LISP

=> kết quả là 10 đối tượng block được chọn đó được đổi tên từ CADVIET Sang LISP.

Rất mong các anh trên diễn đàn quan tâm giúp đỡ. Em xin chân thành cảm ơn !

-Trường hợp trong 10 cái block bạn chọn nó bao gồm 1 mớ block khác nhau thì làm nào.

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

-Trường hợp trong 10 cái block bạn chọn nó bao gồm 1 mớ block khác nhau thì làm nào.

úi úi.Chỉ xảy ra trường hợp 10 cái em chọn có cùng tên tuổi và năm sinh thôi. Không xảy ra trường hợp khác nhau đó đâu. Mà nếu khác thì thoát lệnh thui ạ !

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ạn Nó kìa.

Mình nào có bao giờ dám đưa lisp lên mà chưa test, mà xui cái là thao tác lần nào được lần ấy, nên nghĩ cũng nản.

Phản hồi của bạn quá ít thông tin, không ai biết thế nào mà bắt bệnh, nên chắc là mình khó mà sửa được. CAD đời nào, block thế nào, thông báo lỗi ra sao ...

Bạn nói chạy thử 100 lần thì may ra có lần dùng được. Nếu con số này đúng, thì cái lần may ra ấy thật là kỳ diệu. Vì vậy mong bạn chém nhẹ tay :)

Bạn xem clip, chú ý mục tên của Block!

Thao tác : CHọn 1 Block mẫu => GHi tên Block mới => Chọn các Block sẽ áp dụng tên mới này . Bạn thấy khó hiểu không ? :)

Untitled4.gif

  • 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

Do nhu cầu công việc, em rất cần một lisp đổi tên block cục bộ chứ ko phải giống lệnh rename trong cad, cụ thể em xin diễn đạt như sau:

Giả sử có 100 đối tượng block, tên của block là CADVIET nếu ta dùng rename của CAD thì 100 đối tượng block đó đều bị đổi tên, nhưng ở đây em chỉ muốn đổi tên 10 block trong số 100 block đó thôi. Như thế sẽ có 10 đối tượng thuộc block có tên mới là LISP chẳng hạn.

Command: Doiten

select object: Chọn vào 10 block muốn đổi tên

new name: LISP

=> kết quả là 10 đối tượng block được chọn đó được đổi tên từ CADVIET Sang LISP.

Rất mong các anh trên diễn đàn quan tâm giúp đỡ. Em xin chân thành cảm ơn !

Mình có cái này nhưng chỉ cho chọn 1 BLOCK để đổi thôi.

-Lệnh là: DTB

 


(defun c:ctb ( )
(command "undo" "be")
(setq ddd (entsel "\nChon BBLOCK muon doi ten"))
(while
(or
  (null ddd)
  (/= "INSERT" (cdr (assoc 0 (entget (car ddd)))))
)
(princ "\nDoi tuong khong phai la Block! Chon lai")
(setq ddd (entsel "\nChon BLOCK muon doi ten"))
)
  (setq DT (car ddd))
  (setq DTM (entget DT))
  (setq TENKHOI (cdr (assoc 2 DTM)))
 (setq TENBLOCKMOIDAT (getstring 5"\nNhap ten BLOCK moi:"))
(command "_BEDIT" TENKHOI "" "_BSAVEAS" TENBLOCKMOIDAT "_BCLOSE")
  		(setq DTM (subst (cons 2 TENBLOCKMOIDAT) (assoc 2 DTM) DTM))
  		(entmod DTM)
(command "undo" "end")
(Princ))

 

Sau đó dùng lisp sau để MA tên BLOK đối tượng vừa đổi sang các BLOCK khác.

-Tên lệnh: MABT

 

(defun c:mabt ()
(command "undo" "be")
(setq donvi (/ (getvar "viewsize") 40))
(setq ddd (entsel "\nChon Block mau"))
(while
(or
  (null ddd)
  (/= "INSERT" (cdr (assoc 0 (entget (car ddd)))))
)
(princ "\nDoi tuong khong phai la Block! Chon lai")
(setq ddd (entsel "\nChon Block mau"))
)
  (setq DT (car ddd))
  (setq DTM (entget DT))
  (setq TENKHOI (cdr (assoc 2 DTM)))
  (setq DIEMCHENMAU (cdr (assoc 10 DTM)))
(setq diemvt1 (polar DIEMCHENMAU pi donvi))
(setq diemvt2 (polar DIEMCHENMAU (* 2 pi) donvi))
(setq diemvt3 (polar DIEMCHENMAU (/ pi 2) donvi))
(setq diemvt4 (polar DIEMCHENMAU (- 0 (/ pi 2)) donvi))
       	(grdraw diemvt1 diemvt2 3)
       	(grdraw diemvt3 diemvt4 3)

(Princ "\nChon BLOCK muon chinh :")
(setq xx (ssget '((0 . "insert"))))
(setq L 0)
(setq M (sslength XX))
(while (< L M)
      	(setq DTs (ssname XX L))
      	(setq DTMs (entget DTs))
      	(setq TENKHOIM TENKHOI)
      	(setq DTMs (subst (cons 2 TENKHOIM) (assoc 2 DTMs) DTMs))
      	(entmod DTMs)

  (setq L (1+ L))
)
(command ".pan" DIEMCHENMAU DIEMCHENMAU)
(command "undo" "end")
 	(Princ))

  • Vote tăng 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

úi úi.Chỉ xảy ra trường hợp 10 cái em chọn có cùng tên tuổi và năm sinh thôi. Không xảy ra trường hợp khác nhau đó đâu. Mà nếu khác thì thoát lệnh thui ạ !

Hề hề hề,

Nếu chê cái của bác Ketxu thì có thể dùng thử cái này coi sao, Tuy chả hay được như của bác ket nhưng may ra lại là hay với bạn hỉ????


(defun c:chbl (/ m old pc new sbl p)
(vl-load-com)
(command "undo" "be")
(setq m (car (entsel "\n chon block mau can thay "))
       old (cdr (assoc 2 (entget m)))
       pc (cdr (assoc 10 (entget m)))
       new (getstring t "\n Nhap ten thay the: ")
)
(if (= (tblsearch "block" new) nil)
   (command "block" new pc m "")
)
(command "insert" old pc 1 "" "")
(prompt "\n Chon tap cac block can thay ten ")
(setq sbl (acet-ss-to-list (ssget (list (cons 0 "insert") (cons 2 old)))))
(foreach x sbl
  	(setq p (cdr (assoc 10 (entget x))))
  	(command "erase" x "")
  	(command "insert" new p 1 "" "")
)
(command "undo" "e")
(princ)
)

Hề hề hề,.....

Trúng hay trật xin chớ cười chê....

Nhớ là cái trình tự thao tác không giống như bạn mô tả đâu.

Khi chạy lisp sẽ yêu cầu bạn chọn 1 block bất kỳ cùng tên với các block muốn đổi tên gọi là block mau.

Sau đó yêu cầu nhập cái tên mà bạn muốm đổi thành.

Lisp sẽ tạo một block mới toe mang cái tên mà bạn muốn, có hình hài giống y cái cũ.

Sau đó lisp yêu cầu bạn chọn tập hợp các block cần đổi tên.

Thế là nó sẽ tự đưa các block với tên mới vào thay thế cho các block tên cũ.

Hề hề hề,.

Nhìn thì thấy giống nhưng thật ra nó là hai block có cấu trúc khác nhau đấy. Hãy cẩn thận kẻo mà bé cái nhầm.....

Hy vọng gãi đúng chỗ bạn ngứa.

Hề hề hề,....

  • 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

Hề hề hề,

Nếu chê cái của bác Ketxu thì có thể dùng thử cái này coi sao, Tuy chả hay được như của bác ket nhưng may ra lại là hay với bạn hỉ????


(defun c:chbl (/ m old pc new sbl p)
(vl-load-com)
(command "undo" "be")
(setq m (car (entsel "\n chon block mau can thay "))
       old (cdr (assoc 2 (entget m)))
       pc (cdr (assoc 10 (entget m)))
       new (getstring t "\n Nhap ten thay the: ")
)
(if (= (tblsearch "block" new) nil)
   (command "block" new pc m "")
)
(command "insert" old pc 1 "" "")
(prompt "\n Chon tap cac block can thay ten ")
(setq sbl (acet-ss-to-list (ssget (list (cons 0 "insert") (cons 2 old)))))
(foreach x sbl
  	(setq p (cdr (assoc 10 (entget x))))
  	(command "erase" x "")
  	(command "insert" new p 1 "" "")
)
(command "undo" "e")
(princ)
)

Hề hề hề,.....

Trúng hay trật xin chớ cười chê....

Nhớ là cái trình tự thao tác không giống như bạn mô tả đâu.

Khi chạy lisp sẽ yêu cầu bạn chọn 1 block bất kỳ cùng tên với các block muốn đổi tên gọi là block mau.

Sau đó yêu cầu nhập cái tên mà bạn muốm đổi thành.

Lisp sẽ tạo một block mới toe mang cái tên mà bạn muốn, có hình hài giống y cái cũ.

Sau đó lisp yêu cầu bạn chọn tập hợp các block cần đổi tên.

Thế là nó sẽ tự đưa các block với tên mới vào thay thế cho các block tên cũ.

Hề hề hề,.

Nhìn thì thấy giống nhưng thật ra nó là hai block có cấu trúc khác nhau đấy. Hãy cẩn thận kẻo mà bé cái nhầm.....

Hy vọng gãi đúng chỗ bạn ngứa.

Hề hề hề,....

Hề hề hề... Bệnh nghề nghiệp (tôi đã từng mắc)... Hề hề hề... Dùng (vl-load-com) để mần chi mô? Hề hề hề.

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

Hề hề hề... Bệnh nghề nghiệp (tôi đã từng mắc)... Hề hề hề... Dùng (vl-load-com) để mần chi mô? Hề hề hề.

Hề hề hề,

Dùng (vl-load-com) vì trong lisp có xài tới thằng (acet-ss-to-list .....) bác ạ.

Do chưa hiểu lắm vế mấy thằng acet nên cứ nhét vô cho nó thêm..... lẩm cẩm bác ạ.

Hề hề hề

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

Hề hề hề,

Nếu chê cái của bác Ketxu thì có thể dùng thử cái này coi sao, Tuy chả hay được như của bác ket nhưng may ra lại là hay với bạn hỉ????


(defun c:chbl (/ m old pc new sbl p)
(vl-load-com)
(command "undo" "be")
(setq m (car (entsel "\n chon block mau can thay "))
       old (cdr (assoc 2 (entget m)))
       pc (cdr (assoc 10 (entget m)))
       new (getstring t "\n Nhap ten thay the: ")
)
(if (= (tblsearch "block" new) nil)
   (command "block" new pc m "")
)
(command "insert" old pc 1 "" "")
(prompt "\n Chon tap cac block can thay ten ")
(setq sbl (acet-ss-to-list (ssget (list (cons 0 "insert") (cons 2 old)))))
(foreach x sbl
  	(setq p (cdr (assoc 10 (entget x))))
  	(command "erase" x "")
  	(command "insert" new p 1 "" "")
)
(command "undo" "e")
(princ)
)

Hề hề hề,.....

Trúng hay trật xin chớ cười chê....

Nhớ là cái trình tự thao tác không giống như bạn mô tả đâu.

Khi chạy lisp sẽ yêu cầu bạn chọn 1 block bất kỳ cùng tên với các block muốn đổi tên gọi là block mau.

Sau đó yêu cầu nhập cái tên mà bạn muốm đổi thành.

Lisp sẽ tạo một block mới toe mang cái tên mà bạn muốn, có hình hài giống y cái cũ.

Sau đó lisp yêu cầu bạn chọn tập hợp các block cần đổi tên.

Thế là nó sẽ tự đưa các block với tên mới vào thay thế cho các block tên cũ.

Hề hề hề,.

Nhìn thì thấy giống nhưng thật ra nó là hai block có cấu trúc khác nhau đấy. Hãy cẩn thận kẻo mà bé cái nhầm.....

Hy vọng gãi đúng chỗ bạn ngứa.

Hề hề hề,....

đọc lisp thì thấy bác xoá cái block đi rồi insert cái mới vào như thề hông ổn bác ơi. Còn layer, góc, tỉ lệ và linh tinh cái nửa.

  • 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

Dùng ý Bsaveas của bác Duy có vẻ êm hơn Wblock. Tks bác. Chỉ gặp 1 chút vấn đề với Anonymous Block thôi ^^

  • 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

đọc lisp thì thấy bác xoá cái block đi rồi insert cái mới vào như thề hông ổn bác ơi. Còn layer, góc, tỉ lệ và linh tinh cái nửa.

Hề hề hề,

Vì thế nên mới (command "insert" new p 1 "" "") cho khỏi scale hay xoay xiếc chi nữa. Các cái linh tinh khác thì hậu xét ạ.

Hề hề hề,...

@ bác Doanvanha: Cái thằng osnap này thế mà hay bị quên lắm. Thank bác đã nhắc nhở.....

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

Hề hề hề,

Vì thế nên mới (command "insert" new p 1 "" "") cho khỏi scale hay xoay xiếc chi nữa. Các cái linh tinh khác thì hậu xét ạ.

Hề hề hề,...

@ bác Doanvanha: Cái thằng osnap này thế mà hay bị quên lắm. Thank bác đã nhắc nhở.....

úi chết. Cái lisp của bác KETXU xấu xí kia em ko bit dùng nên kết luận oan. hí hí. Xin lỗi bác nhé.

Cảm ơn các đại ca khác đã tham gia xử vụ rắc rối này. Tiện thể em comment luôn, cái lisp CHBL không đổi tên được, ko bit là e ko bit dùng hay thế nào. Lisp CTB thì đổi ngon lành nhưng mà chỉ được 1 đối tượng, nếu để phát triển lên thì em nghĩ dùng tính năng lưu tên mới vừa nhập thì là ngon. Lisp mabt thì có cái hay riêng. hềhề. Thui hnay 20/10 các bác nghỉ sớm rùi đưa người iu đi nhà nghỉ cho mát. hí hí. cái anh có nick name xấu xí KETXU giải thick rõ và lisp của anh ý viết chuẩn theo yêu cầu rùi. hí hí. Chúc các anh trên diễn đàn mạnh khỏe và có nhìu sáng kiến mới. hí hí. Em có lisp rùi. mang về dùng thui. hề hề

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ác Bình : E thì ghi sổ 1 chữ vàng là "_non", cứ có command yêu cầu nhập điểm ở đâu thì nhét nó vào đó ^^ Ngại lưu rồi lại gán biến os lắm ^^

Cách của e và bác Duy đều là tạo ra 1 Block Def mới trong bản vẽ (ư thì wblock, bác Duy Bsaveas), sau đó đổi tên những thằng được chọn thành tên thằng mới tạo. Như vậy có lợi thế hơn ở việc các thiết đặt không bị thay đổi (có thể bao gồm cả Xdata nữa lắm chứ hén), hoặc giả Block ATT thì lại phải xử lý mấy biến liên quan tới att ^^

  • Vote tăng 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

@bác Bình : E thì ghi sổ 1 chữ vàng là "_non", cứ có command yêu cầu nhập điểm ở đâu thì nhét nó vào đó ^^ Ngại lưu rồi lại gán biến os lắm ^^

Cách của e và bác Duy đều là tạo ra 1 Block Def mới trong bản vẽ (ư thì wblock, bác Duy Bsaveas), sau đó đổi tên những thằng được chọn thành tên thằng mới tạo. Như vậy có lợi thế hơn ở việc các thiết đặt không bị thay đổi (có thể bao gồm cả Xdata nữa lắm chứ hén), hoặc giả Block ATT thì lại phải xử lý mấy biến liên quan tới att ^^

Ớ cái thèn _non dùng như nào ketxu ví dụ cho coi phát đi. thank

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

Tham số "_non" trong dòng command có nghĩa là bỏ qua chế độ Osnap. Sử dụng ngay sau tên lệnh và có thể chèn nhiều lần trong command bác ạ :

Ví dụ vẽ Line từ P1 -> P2 :

(command "._Line" "_non" p1 p2 "")

Hoặc (command "._Line" "_non" p1 "_non" p2 "")

  • Vote tăng 3

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

úi chết. Cái lisp của bác KETXU xấu xí kia em ko bit dùng nên kết luận oan. hí hí. Xin lỗi bác nhé.

. hí hí. cái anh có nick name xấu xí KETXU ...

Cám ơn bạn đã khen :| Không biết từ đâu mà đời ket xuống dốc ghê quá ^^

Hy vọng lần sau bạn test kỹ trước nhé (mặc dù mình cũng chưa test kỹ đc, hề hề)

PS thêm 1 lần nữa Két Xù là nick name của 1 nhân vật hài trong phim Ông Trùm ^^, không phải là Kẹt xu như nhiều bác thương tình tặng Ket :D

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

Tham số "_non" trong dòng command có nghĩa là bỏ qua chế độ Osnap. Sử dụng ngay sau tên lệnh và có thể chèn nhiều lần trong command bác ạ :

Ví dụ vẽ Line từ P1 -> P2 :

(command "._Line" "_non" p1 p2 "")

Hoặc (command "._Line" "_non" p1 "_non" p2 "")

Chuyên phát hiện những điều kỳ quặc chính là kẻ thất tình xấu xí đang ngồi bên bờ sông kia! Hỏi thêm tí: sau (command "line"...) thì dùng "_non" 1 lần hay bắt buộc bao nhiêu pt là bấy nhiêu non cao biển rộ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

Chuyên phát hiện những điều kỳ quặc chính là kẻ thất tình xấu xí đang ngồi bên bờ sông kia! Hỏi thêm tí: sau (command "line"...) thì dùng "_non" 1 lần hay bắt buộc bao nhiêu pt là bấy nhiêu non cao biển rộng?

Nó chỉ có tác dụng với 1 điểm kế tiếp ngay sau 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

Mình đã viết 1 cái rồi nhưng chưa nhớ link, post lại cho bạn. Có thể dùng cho cả Anon Block

;| Change Anonymous Block to normal with new Name
@ Ketxu 27 - 9 - 2011
|;
(defun c:nb( / blkObj blkName blkNew_Name fn pt)
(vl-load-com)
(defun ST:SS->List-Vla (ss / n e l)
 (setq n (sslength ss))
 (while (setq e (ssname ss (setq n (1- n))))
(setq l (cons (vlax-ename->vla-object e) l))
 )
)
(defun change_block(old new)
(foreach blkObj (setq ss (ST:SS->List-Vla (ssget (list (cons 0 "INSERT")(cons 2 old)))))
(vla-put-name blkObj new);;change the name
(vla-update blkObj)
)
)
(grtext -1 "Free Lisp From Cadviet @Ketxu")
(setvar "cmdecho" 0)
(setq
blkObj (vlax-ename->vla-object (car(entsel "\nBlock Source :")))
blkName (vlax-get-property blkObj
(if (vlax-property-available-p blkObj 'EffectiveName) 'EffectiveName 'Name)
 )
blkNew_Name (getstring "\n New Name :")
 fn (strcat (getenv "TEMP") "\\" blkNew_Name ".dwg")
)
(command ".-wblock" fn "_Y" blkName "")
(command "._insert" (strcat blkNew_Name "=" fn) nil )
(if (wcmatch "`*" (substr blkName 1 1))(setq blkName (strcat "`*" (substr blkName 2))))
(change_block blkName blkNew_Name)
(vl-file-delete  fn)
)

 

bạn KETXU cho hỏi mình tạo được tên block mới rồi nhưng kg tìm đc nó nhưng xem trong list block thì vẫn có....làm cách nào để tìm đc cái blog tên mới mà mình mới tạo kg....lisp này rất hay nhưng kg biết cách dùng nên cũng chả biết để làm gì >_<

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 KETXU cho hỏi mình tạo được tên block mới rồi nhưng kg tìm đc nó nhưng xem trong list block thì vẫn có....làm cách nào để tìm đc cái blog tên mới mà mình mới tạo kg....lisp này rất hay nhưng kg biết cách dùng nên cũng chả biết để làm gì >_<

 

Xanh: rất có thể bạn đã xóa block đó nhưng tên nó vẫn còn trong danh sách block. Bạn dùng lệnh purge xem nó có còn trên bản vẽ không nhé!

Đỏ: nói gì mà phủ phàng thế: không biết cách dùng mà vẫn biết hay, rồi chả biết để làm gì??? Mỗi lisp được viết ra là để phục vụ người y/c của 1 hoặc nhiều người. Bạn xem lại từ đầu sẽ biết tác dụng của nó.

Thân thương!

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

×