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ị

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.com/upfiles/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ó.

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

Oái! FD viết cái này được gàn 10 năm rồi cơ à? Nhanh thật!

Mà sao trong code lisp còn có cả SMILE là sao hả bác

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 qua định test con này nhưng vì cái SMILE đó mà lười. :lol: Bác ơi. Con này làm cho con LockDWG vô hiệ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
AutoCAD không cho chỉnh sửa block anonymous (là block có tên đầu bằng *, vd *U123).

 

 

Mà làm sao tạo được block anonymous bác chỉ giúp luôn đi. Mà con lockdwg bac pót chổ nào em tìm không thấy. Bác chỉ lại giúp em cám ơn nhì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

Lisp này em lấy về lâu rồi, bây giờ mới đem ra sử dụng. Tại sao sau khi load lisp, em đánh lệnh UnAnon hoặc UnAnonAll thì cad đều báo lỗi. Bác xem giúp em được khô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 em lấy về lâu rồi, bây giờ mới đem ra sử dụng. Tại sao sau khi load lisp, em đánh lệnh UnAnon hoặc UnAnonAll thì cad đều báo lỗi. Bác xem giúp em được không?

báo lỗi gì bạ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
báo lỗi gì bạn?

Xin lỗi bác! Em nhầm, không phải là báo lỗi mà là không nhận 2 lệnh trên

 

Command: ap APPLOAD convertanyblock.lsp successfully loaded.

convertanyblock.lsp successfully loaded.

 

 

Command:

Copyright =A9 1998, Fabricated Designs, Inc.

Loading UnAnon v1.0 ....; error: malformed list on input

 

Command:

Copyright =A9 1998, Fabricated Designs, Inc.

Loading UnAnon v1.0 ....; error: malformed list on input

 

Command:

Command: UnAnon

Unknown command "UNANON". Press F1 for help.

 

Command: UnAnonall

Unknown command "UNANONALL". Press F1 for help.

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
Xin lỗi bác! Em nhầm, không phải là báo lỗi mà là không nhận 2 lệnh trên

 

Command: ap APPLOAD convertanyblock.lsp successfully loaded.

convertanyblock.lsp successfully loaded.

 

 

Command:

Copyright =A9 1998, Fabricated Designs, Inc.

Loading UnAnon v1.0 ....; error: malformed list on input

 

Command:

Copyright =A9 1998, Fabricated Designs, Inc.

Loading UnAnon v1.0 ....; error: malformed list on input

 

Command:

Command: UnAnon

Unknown command "UNANON". Press F1 for help.

 

Command: UnAnonall

Unknown command "UNANONALL". Press F1 for help.

 

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.

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 Hoành ơi ! Dù em đã copy thật là kỹ nhưng chẳng hiểu sao cad cứ báo lỗi là :

 

 

Command: ap

APPLOAD convertanyblock.lsp successfully loaded.

 

 

Command:

Copyright © 1998, Fabricated Designs, Inc.

Loading UnAnon v1.0 .....; error: malformed string on input

 

Command: UnAnon

Unknown command "UNANON". Press F1 for help.

 

Command: UnAnonall

Unknown command "UNANONALL". Press F1 for help.

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 Hoành ơi ! Dù em đã copy thật là kỹ nhưng chẳng hiểu sao cad cứ báo lỗi là :

 

Command: ap

APPLOAD convertanyblock.lsp successfully loaded.

 

Bạn download file này về rồi appload vào acad và dùng xem sao?

http://www.cadviet.com/upfiles/cab2nb.vlx

  • 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
Bạn download file này về rồi appload vào acad và dùng xem sao?

http://www.cadviet.com/upfiles/cab2nb.vlx

Các bác cho em hoi cái này xíu:

- Em có nhận được một file địa hình đã chuyển thành *.dwg, nhưng các số cao độ trong đó nhỏ quá nên in ra không thấy gì cả.

Em không biết cách nào để đổi chiều cao đồng loạt của tất cả các cao đọ trong bản vẽ cả.

E có dung bedit dể sửa nhưng không được.

E chỉ có cách là scale từng con sô thôi.

Các Bác có cách nào để đổi Block đó chỉ giups em với.

Thanks!

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ác bác cho em hoi cái này xíu:

- Em có nhận được một file địa hình đã chuyển thành *.dwg, nhưng các số cao độ trong đó nhỏ quá nên in ra không thấy gì cả.

Em không biết cách nào để đổi chiều cao đồng loạt của tất cả các cao đọ trong bản vẽ cả.

E có dung bedit dể sửa nhưng không được.

E chỉ có cách là scale từng con sô thôi.

Các Bác có cách nào để đổi Block đó chỉ giups em với.

Thanks!

 

Block của bác có thể là attribute nên chữ nhỏ, Bác explode nó ra rồi xem kiểu của nó là gì, sau đó thay đổi lại chiều cao của kiểu đó. Nếu mà block này trong chương trình người ta set cao chữ cho nó chỉ có cách viết tiện ích thay đổi cao chữ của nó mà thôi. Chúc may 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
Block của bác có thể là attribute nên chữ nhỏ, Bác explode nó ra rồi xem kiểu của nó là gì, sau đó thay đổi lại chiều cao của kiểu đó. Nếu mà block này trong chương trình người ta set cao chữ cho nó chỉ có cách viết tiện ích thay đổi cao chữ của nó mà thôi. Chúc may mắn.

E upload file lên các Bác xem thử nha:

Nếu được các Bác chỉ gíp em cách đổi với .

thanks!

http://www.cadviet.com/upfiles/tong_dh_kho_ngoai_quan.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
E upload file lên các Bác xem thử nha:

Nếu được các Bác chỉ gíp em cách đổi với .

thanks!

http://www.cadviet.com/upfiles/tong_dh_kho_ngoai_quan.dwg

 

Em xem rồi, nó là block attribute có set độ cao của từng chữ. Cái này thì chỉ có cách viết tool thôi, bác search thử trong thư viện cadviet xem có chưa, nếu chưa có thì chỉ còn cách viết cái tool khác. Bác cần thì alo em, để thay đổi và sắp xếp lại các phần trong block điểm này thì cũng hơi mất công đấy.

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
Em xem rồi, nó là block attribute có set độ cao của từng chữ. Cái này thì chỉ có cách viết tool thôi, bác search thử trong thư viện cadviet xem có chưa, nếu chưa có thì chỉ còn cách viết cái tool khác. Bác cần thì alo em, để thay đổi và sắp xếp lại các phần trong block điểm này thì cũng hơi mất công đấy.

Không cần tool hay lisp gì đâu, chỉ cần dùng lệnh CAD là đủ rồi.

Bạn dùng lệnh BEDIT để scale tất cả (hoặc chỉ thay đổi chiều cao của Text (thực chất là Attribute))

Sau đó dùng lệnh BATTMAN để update lại block đó sẽ được như ý.

Bạn có thể tìm hiểu thêm về cách tạo và hiệu chỉnh Block attribute trên diễn đàn.

 

@Flex : Bạn sẽ ko thể trở thành một nhà kinh doanh giỏi đâ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
Bạn download file này về rồi appload vào acad và dùng xem sao?

http://www.cadviet.com/upfiles/cab2nb.vlx

 

Anh Hoanh ơi. Em load về rồi nhưng nó báo như thế này.

 

Command: unanon

Regenerating layout.

Microsoft Windows NT Version 5.1 (x86) Release (e - Convert To Anonymous Blocks

....

 

Select objects: 1 found

 

Select objects: 1 found, 1 removed, 0 total

 

Select objects: Specify opposite corner: 0 found

Select objects: Specify opposite corner: 1 found, 1 total

 

Select objects:

*** Not An Anonomymous Block *** Regenerating layout.

 

Bác xem dùm.Em cũng đang cầ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
Anh Hoanh ơi. Em load về rồi nhưng nó báo như thế này.

 

Command: unanon

Regenerating layout.

Microsoft Windows NT Version 5.1 (x86) Release (e - Convert To Anonymous Blocks

....

 

Select objects: 1 found

 

Select objects: 1 found, 1 removed, 0 total

 

Select objects: Specify opposite corner: 0 found

Select objects: Specify opposite corner: 1 found, 1 total

 

Select objects:

*** Not An Anonomymous Block *** Regenerating layout.

 

Bác xem dùm.Em cũng đang cần.

Mình cũng bị như vậy không hiểu sao 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

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

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

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

  • 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

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 smile.png 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.

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

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

×