Đến nội dung


Hình ảnh
- - - - -

convert anonymous block to normal block


  • Please log in to reply
38 replies to this topic

#21 nguyen tuan hung

nguyen tuan hung

    biết vẽ arc

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

Đã gửi 24 September 2011 - 10:57 AM

Bạn copy thiếu dấu ngoặc.
Bạn hãy thử lại copy một cách cẩn thận đoạn code trên rồi paste vào file lisp.

http://www.cadviet.com/upfiles/3/help_me.dwg
Em có File này áp dụng lisp của bác hoành mà không được.
Bản vẽ của em thường có rất nhiều block không tên như thế,em toàn phải X nó ra để chỉnh sửa.
Các bác có cách nào hay thì chỉ cho em với.
Em Hưng
  • 0

#22 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5678 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 24 September 2011 - 02:03 PM

Rất tiếc đây không phải block anon mà lisp đề cập tới ^^ (*U) Vẫn còn may là bạn có thể Xplode nó ra để sửa :) Nếu có nhiều block giống nhau, bạn tạo lại 1 block thường rồi dùng các lisp thay thế Block trên 4r
  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#23 nguyen tuan hung

nguyen tuan hung

    biết vẽ arc

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

Đã gửi 24 September 2011 - 03:22 PM

Rất tiếc đây không phải block anon mà lisp đề cập tới ^^ (*U) Vẫn còn may là bạn có thể Xplode nó ra để sửa Hình đã gửi Nếu có nhiều block giống nhau, bạn tạo lại 1 block thường rồi dùng các lisp thay thế Block trên 4r

Em tìm thấy lisp rồi, và cũng đã tạo ra block như bác hướng dẫn như bác hướng dẫn nhưng không replace đc vi block không có tên.
Bác xem hộ em với nha.
Em Hưng.
  • 0

#24 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5678 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 24 September 2011 - 04:40 PM

Lisp bạn lấy được từ đâu, gửi link hoặc file lên mình mới sửa được chứ ?
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#25 nguyen tuan hung

nguyen tuan hung

    biết vẽ arc

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

Đã gửi 26 September 2011 - 11:48 AM

Lisp bạn lấy được từ đâu, gửi link hoặc file lên mình mới sửa được chứ ?

File của em thì vẫn giống như file em đã up bên trên.Có 2 block giống nhau nhưng không tên.
Em đã làm theo cách bác nói là phá 1 block đó ra và tao nó thành 1 block giống như thế nhưng có tên.Sau đó em áp dùng lisp này : (nhưng vẫn thấy không được).
Anh Ket xem em bị lỗi ở chỗ nào nha
Em hưng

(defun c:mabt ()

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

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

(setvar "MODEMACRO" "**CHUC BAN LAM VIEC HIEU QUA** PHAM QUOC DUY - BINH SON - QUANG NGAI")
(Princ))
  • 0

#26 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5678 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 26 September 2011 - 01:54 PM

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
  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#27 nguyen tuan hung

nguyen tuan hung

    biết vẽ arc

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

Đã gửi 27 September 2011 - 04:51 PM

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

#28 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5678 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 27 September 2011 - 10:23 PM

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

  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#29 nguyen tuan hung

nguyen tuan hung

    biết vẽ arc

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

Đã gửi 28 September 2011 - 09:29 AM

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

#30 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5678 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 28 September 2011 - 09:56 AM

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

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#31 nguyen tuan hung

nguyen tuan hung

    biết vẽ arc

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

Đã gửi 28 September 2011 - 10:11 AM

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

#32 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5678 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 28 September 2011 - 10:27 AM

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!
  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#33 nguyen tuan hung

nguyen tuan hung

    biết vẽ arc

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

Đã gửi 28 September 2011 - 05:12 PM

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

#34 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5678 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 29 September 2011 - 08:38 AM

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ờ :)
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#35 namtay

namtay

    Chưa sử dụng CAD

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

Đã gửi 26 December 2012 - 03:46 PM

http://www.cadviet.c...n_trinh_l_1.dwgcac pro pha giup em block trong file cad nay voi. thank.
  • 0

#36 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 26 December 2012 - 03:54 PM

no file = pó tay :D
  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#37 namtay

namtay

    Chưa sử dụng CAD

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

Đã gửi 26 December 2012 - 03:55 PM

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 &#169; 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.c...den_trinh_l.dwg
  • 0

#38 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 26 December 2012 - 05:22 PM

trường hợp file của bạn chắc giống topic này , bạn xem thử có giúp đc gì không hen :D
http://www.cadviet.c...showtopic=44573
  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#39 dvcong

dvcong

    Chưa sử dụng CAD

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

Đã gửi 08 October 2014 - 10:30 AM

Bạn download file này về rồi appload vào acad và dùng xem sao?
http://www.cadviet.c...iles/cab2nb.vlx

Sao không load được file cab2nb.vlx bác Hoành ơi. Bác up lại với. Cảm ơn bác nhiều.


  • 0