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

convert anonymous block to normal block

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

Lisp này đã làm được điều bạn muốn (chỉ có điều phải chú ý khi chọn Block) :) Khi change block xong, có thể cái block chạy xa quá, bạn zoom all để thấy nó. Nếu muôn chỉnh lại điểm đặt của Block, bạn lại tiếp tục tìm 1 lisp chỉnh điểm đặt của bác Duy trên diễn đàn đó ^^

P/s : đề nghị bạn cho đoạn mã vào thẻ Code

  • 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

Lisp này đã làm được điều bạn muốn (chỉ có điều phải chú ý khi chọn Block) :) Khi change block xong, có thể cái block chạy xa quá, bạn zoom all để thấy nó. Nếu muôn chỉnh lại điểm đặt của Block, bạn lại tiếp tục tìm 1 lisp chỉnh điểm đặt của bác Duy trên diễn đàn đó ^^

P/s : đề nghị bạn cho đoạn mã vào thẻ Code

http://www.cadviet.c.../doiblockok.lsp

Em đã tìm thấy lisp dời điểm chèn block của bác Duy và em áp dụng cả 2 lisp nhưng kết quả lại không được như em mong muốn đó là em cần sau khi thay block xong thi các block vẫn ở nguyên vị trí cũ mà không bị di chuyển.Chứ trong bản vẽ có hàng trăm di chuyển rất lâu.

Em đã thử 2 cách là:

1. Áp dụng lisp thay block trước xong đến lisp dời điểm chèn.(Block không đúng vị trí).

2. Áp dụng lisp dời điểm chèn trước xong đến lisp thay block.(không thể dời được điểm chèn của Block không tên).

Anh Ket Xem họ em với.

Em hư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

....

P/s : đề nghị bạn cho đoạn mã vào thẻ Code

Vấn đề của bạn có thể xử lý bằng lisp này cũng được :

http://www.cadviet.com/forum/index.php?showtopic=53341&st=0&p=166931&&do=findComment&comment=166931

Nó sẽ copy block Anon bạn chọn thành 1 block mới, rồi bạn chèn vào đúng điểm chèn cũ của block đó ( trong ví dụ cảu bạn thì toàn '( 0 0 0).

Từ lisp này cũng có thể biến hóa thành lisp convert block anon -> block thường :

;| 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 "X" (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

Vấn đề của bạn có thể xử lý bằng lisp này cũng được :

http://www.cadviet.c...31

Nó sẽ copy block Anon bạn chọn thành 1 block mới, rồi bạn chèn vào đúng điểm chèn cũ của block đó ( trong ví dụ cảu bạn thì toàn '( 0 0 0).

Từ lisp này cũng có thể biến hóa thành lisp convert block anon -> block thường :

;| 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 "X" (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)
)

Lisp này chạy tốt anh à.

Anh Két có thể sửa 1 chút là khi sử dụng lệnh nb -> chọn 1 đối tượng(block không tên)->đặt tên là "1"(khi kết thúc tất cả các block không tên mà hình dạng giống như block mình vừa chọn ban đầu đều có tên là "1".

Vi dụ có 5 block giống nhau khi thao tác 1 lần xong thì 5 block đều có tên giống nhau.

Em hư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

Lisp này chạy tốt anh à.

Anh Két có thể sửa 1 chút là khi sử dụng lệnh nb -> chọn 1 đối tượng(block không tên)->đặt tên là "1"(khi kết thúc tất cả các block không tên mà hình dạng giống như block mình vừa chọn ban đầu đều có tên là "1".

Vi dụ có 5 block giống nhau khi thao tác 1 lần xong thì 5 block đều có tên giống nhau.

Em hưng

Chỗ này chắc bạn phải nhờ Autodesk hén :) Vì mình có ngồi mò mẫm 20 năm nữa cũng khó ra được cách thức nhận biết 2 Block có tên khác nhau mà hình dạng giống nhau được :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

Chỗ này chắc bạn phải nhờ Autodesk hén :) Vì mình có ngồi mò mẫm 20 năm nữa cũng khó ra được cách thức nhận biết 2 Block có tên khác nhau mà hình dạng giống nhau được :D

Hi,hình như bác chưa hiểu y' của em.

VD: 2 block(không tên) giống nhau như File em up ở trên, Khi dùng lệnh "Lisp-nb" của anh thì cả 2 block đó có cùng tên với nhau có được không ạ ?

Nếu được thi a giúp em với :D

Em hư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
Hình như bạn vẫn chưa đọc mấy dòng PS của mình ở trên ??? Mong bạn sửa lại bài viết bên trên, cho code vào tag CODE.

 

Yêu cầu của bạn lúc rỗi mình sẽ làm, nhưng không thể theo cách tự động dò tìm Block giống hình dạng được!

  • 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
Yêu cầu của bạn lúc rỗi mình sẽ làm, nhưng không thể theo cách tự động dò tìm Block giống hình dạng được!

Vâng lúc nào anh rỗi thì anh giúp em nhá.

Em rất cám ơn vì sự nhiệt tình của anh.

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 cũng rất cám ơn nếu bạn đọc những lời mình nói từ đầu topic đến giờ :)

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ôm nay gặp một bài toán khó, là hiệu chỉnh một block anonymous. Ví dụ trong file này: http://www.cadviet.c.../new_block3.zip

 

AutoCAD không cho chỉnh sửa block anonymous (là block có tên đầu bằng *, vd *U123).

May thay, tìm kiếm được lisp đổi block anonymous sang block bình thường tại trang http://www.draftsperson.net

;=============================================== ;    UnAnon.Lsp                           		Jul 05, 1998 ;====================================== (princ "\nCopyright © 1998, Fabricated Designs, Inc.") (princ "\nLoading UnAnon v1.0 ") (setq uan_ nil lsp_file "UnAnon") ;================== For Automated Calling From Another Program ========= (defun uan_auto (ar1) (UnAnon ar1)) ;================== Macros ============================================= (defun PDot ()(princ ".")) (PDot);++++++++++++ Set Modes & Error ++++++++++++++++++++++++++++++++++ (defun uan_smd ()  (SetUndo)  (setq olderr *error*   	*error* (lambda (e)         		(and (/= e "quit / exit abort")                      (princ (strcat "\nError: *** " e " *** ")))         		(command "_.UNDO" "_END" "_.U")         		(uan_rmd))        uan_var '(   ("CMDECHO"   . 0) ("MENUECHO" . 0) ("MENUCTL"   . 0) ("MACROTRACE" . 0)   ("OSMODE"    . 0) ("SORTENTS" . 119)("MODEMACRO" . ".")   ("BLIPMODE"  . 0) ("EXPERT"   . 0) ("SNAPMODE"  . 1) ("PLINEWID"   . 0.0)   ("ORTHOMODE" . 1) ("GRIDMODE" . 0) ("ELEVATION" . 0) ("THICKNESS"  . 0)   ("FILEDIA"   . 0) ("FILLMODE" . 0) ("SPLFRAME"  . 0) ("UNITMODE"   . 0)   ("TEXTEVAL"  . 0) ("ATTDIA"   . 0) ("AFLAGS"    . 0) ("ATTREQ" 	. 1)   ("ATTMODE"   . 1) ("UCSICON"  . 1) ("HIGHLIGHT" . 1) ("REGENMODE"  . 1)   ("COORDS"    . 2) ("DRAGMODE" . 2) ("DIMZIN"    . 1) ("PDMODE" 	. 0)   ("CECOLOR"   . "BYLAYER") ("CELTYPE" . "BYLAYER")))  (foreach v uan_var   	(setq m_v (cons (getvar (car v)) m_v)     		m_n (cons (car v) m_n))   	(setvar (car v) (cdr v)))  (princ (strcat (getvar "PLATFORM") " Release " (substr (ver) 18 2)    " -  Convert To Anonymous Blocks ....\n"))  (princ)) (PDot);++++++++++++ Return Modes & Error +++++++++++++++++++++++++++++++ (defun uan_rmd ()   (setq *error* olderr)   (mapcar 'setvar m_n m_v)   (command "_.UNDO" "_END")   (prin1)) (PDot);++++++++++++ Set And Start An Undo Group ++++++++++++++++++++++++ (defun SetUndo ()  (and (zerop (getvar "UNDOCTL"))   	(command "_.UNDO" "_ALL"))  (and (= (logand (getvar "UNDOCTL") 2) 2)   	(command "_.UNDO" "_CONTROL" "_ALL"))  (and (= (logand (getvar "UNDOCTL") 8) 8)   	(command "_.UNDO" "_END"))  (command "_.UNDO" "_GROUP")) (PDot);++++++++++++ Get Entity Name ++++++++++++++++++++++++++++++++++++ (defun GetOne (/ st os)  (setq os (getvar "SNAPMODE") s nil)  (setvar "SNAPMODE" 0)  (while (not st) 		(setq st (ssget)))  (while (> (sslength st) 1) 		(setq st nil) 		(princ "\nOnly 1 At A Time Please\n") 		(while (not st)                (setq st (ssget))))  (setvar "SNAPMODE" os)  (setq s (ssname st 0))) (PDot);++++++++++++ Convert An Anonymous Block To Named Block ++++++++++ (defun UnAnon (b / tdef en ed bc bn bd in)          ;Supply ename   (setq bn "TEMP1" bc 1)   (while (tblsearch "BLOCK" bn)          (setq bc (1+ bc) bn (strcat "TEMP" (itoa bc))))   (and (= (type B ) 'ENAME)        (setq bd (entget B )              in (cdr (assoc 2 bd))))   (if (or (not bd)   		(not in)   		(/= "INSERT" (cdr (assoc 0 bd)))   		(/= "*U" (substr in 1 2))   		(= (logand (cdr (assoc 70 (tblsearch "BLOCK" in)))  4)  4)   		(= (logand (cdr (assoc 70 (tblsearch "BLOCK" in))) 16) 16)   		(= (logand (cdr (assoc 70 (tblsearch "BLOCK" in))) 32) 32))        (progn          (princ "*** Not An Anonomymous Block *** ")          (setq bn nil bc nil bd nil in nil b nil)          (exit)))   (setq tdef (tblsearch "BLOCK" in)   		en (cdr (assoc -2 tdef))   		ed (entget en))   (entmake (list (cons 0 "BLOCK")                  (cons 2 bn)                  (cons 70 0)                  (cons 10 (cdr (assoc 10 tdef)))))   (entmake ed)   (while (setq en (entnext en))          (setq ed (entget en))          (entmake ed))   (entmake (list (cons 0 "ENDBLK")))   (setq bd (subst (cons 2 bn) (assoc 2 bd) bd))   (entmod bd)   (entupd B )   (princ (strcat "\n" bn))) (PDot);************ Main Program *************************************** (defun uan_ (/ m_v m_n olderr uan_var s)   (uan_smd)   (GetOne)   (UnAnon s)   (uan_rmd)) (defun c:UnAnonall (/ ss i)  (setq ss (ssget "X" (list (cons 0 "INSERT")(cons 67 (if (= (getvar "TILEMODE") 1) 0 1)))))  (and ss    (setq i (sslength ss))    (while (not (minusp (setq i (1- i))))   		(setq en (ssname ss i))   		(if (= "*U" (substr (cdr (assoc 2 (entget en))) 1 2))       		(UnAnon en))))  (prin1)) (PDot);************ Load Program *************************************** (defun C:UnAnon () (uan_)) (if uan_ (princ "\nUnAnon Loaded\n")) (prin1) ;================== End Program ======================================== 

dùng lệnh UnAnon hoặc UnAnonAll để biến một hoặc tất cả các block anonymous.

 

Và sau đó dùng lệnh bedit hoặc refedit để hiệu chỉnh nó.

anh Hoanh pha giup em block nay voi.thank.

em phá theo cách của anh nó toàn bị vỡ ko sử dụng được http://www.cadviet.com/upfiles/3/116056_4den_trinh_l.dwg

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


×