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

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

;;;CADALYST 01/07 Tip 2169: XMINSERT.lsp Explode Minsert © 2007 Jeffery P. Sanders

;;;--- XMINSERT - Replace a minsert entity with individual blocks arrayed.
;;;
;;;
;;;
;;;--- This program will delete the XMINSERT entity after an array is created.
;;; It will restore the attribute values contained inside the minsert.


(defun C:XMINSERT()



;;;--- Function to change an attributes value

(defun repAttVal(en tagName newVal)

;;;--- Get the DXF group codes of the entity
(setq enlist(entget en))

;;;--- Get the name of the block
(setq blkName(cdr(assoc 2 enlist)))

;;;--- Check to see if the block's attribute flag is there
(if(cdr(assoc 66 enlist))
(progn

;;;--- Get the entity name
(setq en(entnext en))

;;;--- Get the entity dxf group codes
(setq enlist(entget en))

;;;--- Get the type of block
(setq blkType (cdr(assoc 0 enlist)))

;;;--- If group 66 then there are attributes nested inside this block
(setq group66(cdr(assoc 66 enlist)))

;;;--- Loop while the type is an attribute or a nested attribute exist
(while(or (= blkType "ATTRIB")(= group66 1))

;;;--- Get the block type 
(setq blkType (cdr(assoc 0 enlist)))

;;;--- Get the block name 
(setq entName (cdr(assoc 2 enlist)))

;;;--- Check to see if this is the first attribute
(if(= blkType "ATTRIB")
(progn

;;;--- Get the attribute tag
(setq attTag(cdr(assoc 2 enlist)))

;;;--- Get the value of the attribute
(setq attVal(cdr(assoc 1 enlist))) 

;;;--- If this tag matches our search tag name
(if(= (strcase tagName)(strcase attTag))
(progn

;;;--- Replace the attribute's value
(setq enlist(subst (cons 1 newVal)(assoc 1 enlist)enlist))
(entmod enlist)
(entupd en)
)
)
)
)
;;;--- Get the next sub-entity or nested entity as you will
(setq en(entnext en))

;;;--- Get the dxf group codes of the next sub-entity
(setq enlist(entget en))

;;;--- Get the block type of the next sub-entity
(setq blkType (cdr(assoc 0 enlist)))

;;;--- See if the dxf group code 66 exist. if so, there are more nested attributes
(setq group66(cdr(assoc 66 enlist)))

)
)
)
)









;;;--- Function to return a list of tags and values from attributes in a block

(defun getAttData(en / attList attVal enlist blkType group66)

(setq attList(list))

;;;--- Get the DXF group codes of the entity
(setq enlist(entget en))

;;;--- Check to see if the block's attribute flag is there
(if(cdr(assoc 66 enlist))
(progn

;;;--- Get the entity name
(setq en(entnext en))

;;;--- Get the entity dxf group codes
(setq enlist(entget en))

;;;--- Get the type of block
(setq blkType (cdr(assoc 0 enlist)))

;;;--- If group 66 then there are attributes nested inside this block
(setq group66(cdr(assoc 66 enlist)))

;;;--- Loop while the type is an attribute or a nested attribute exist
(while(or (= blkType "ATTRIB")(= group66 1))

;;;--- Get the block type 
(setq blkType (cdr(assoc 0 enlist)))

;;;--- Check to see if this is an attribute
(if(= blkType "ATTRIB")
(progn

;;;--- If this matches your tag name
(setq attTag(cdr(assoc 2 enlist)))

;;;--- Get the value of the attribute
(setq attVal(cdr(assoc 1 enlist))) 

(setq attList(append attList (list (list attTag attVal))))
)
)

;;;--- Get the next sub-entity or nested entity as you will
(setq en(entnext en))

;;;--- Get the dxf group codes of the next sub-entity
(setq enlist(entget en))

;;;--- Get the block type of the next sub-entity
(setq blkType (cdr(assoc 0 enlist)))

;;;--- See if the dxf group code 66 exist. if so, there are more nested attributes
(setq group66(cdr(assoc 66 enlist)))

)
)
)
attList
)






;;;--- Main application

(setvar "cmdecho" 0)

;;;--- If the user selects an object
(if(setq ent(entsel "\nSelect MINSERT: "))
(progn

;;;--- If it is an object selected and not an point
(if(setq en(car ent))
(progn

;;;--- Make a copy of the entity name
(setq origEn en)

;;;--- Get the entities dxf group codes
(setq enlist(entget en))

;;;--- Get the data from the minsert
(setq blkName(cdr(assoc 2 enlist)))
(setq layName(cdr(assoc 8 enlist)))
(setq insPt(cdr(assoc 10 enlist)))
(setq cols(cdr(assoc 70 enlist)))
(setq rows(cdr(assoc 71 enlist)))
(setq colWidth(cdr(assoc 44 enlist)))
(setq rowWidth(cdr(assoc 45 enlist)))
(setq xScale(cdr(assoc 41 enlist)))
(setq yScale(cdr(assoc 42 enlist)))
(setq rAngle(cdr(assoc 50 enlist)))

;;;--- If group code 66 exist [ attributes follow flag ]
(if(assoc 66 enlist)

;;;--- Get the group code 66
(setq group66(cdr(assoc 66 enlist)))
)

;;;--- If it equals 1 then attributes follow..so
(if(= group66 1)
(progn

;;;--- Turn off attribute request during insertion
(setq oldAttReq(getvar "attreq"))
(setvar "attreq" 0)

;;;--- Get the attribute tags and values
(setq attList(getAttData en))
)
)

;;;--- Insert the new block
(command "-insert" blkName insPt xScale yScale (angtos rAngle))

;;;--- If it had attributes ...
(if(= group66 1)

;;;--- Reset the attribute request
(setvar "attreq" oldAttReq)
) 

;;;--- Get the last entity created...
(if(setq en(entlast))
(progn

;;;--- Get the group codes
(setq enlist(entget en))

;;;--- Get the name of the block
(setq blkName2(cdr(assoc 2 enlist)))

;;;--- If this is the block I just created... 
(if(= blkName blkName2)
(progn

;;;--- If it has an attributes flag code...
(if(assoc 66 enlist)
(progn

;;;--- And attributes follow [code 66 = 1] 
(if(= (cdr(assoc 66 enlist)) 1)
(progn

;;;--- Replace the attribute values 
(foreach a attList
(repAttVal en (car a) (cadr a))
)
)
)
)
) 

;;;--- Delete the minsert entity
(entdel origEn)

;;;--- Array the new block to represent the minsert entity
(command "-array" en "" "R" rows cols rowWidth colWidth)

;;;--- Inform the user
(setq str(itoa (* rows cols)))
(alert (strcat "Deleted MINSERT and added (" str ") blocks."))
)
)
)
)
)
)
)
)
(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

nếu để vẽ hình trên thì nhanh nhất cũng cần sử dụng 12 lệnh để được 1 hình hoan chỉnh.

nhưng không biết cách vẽ nào là nhanh nhất 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
bemove đã giải được bài đố vui kỳ này, xin chúc mừng.

 

Ai có câu hỏi gì hay post lên mọi người cùng giải đáp. Nhớ là những phạm vi mà ai cũng biết đấy nhé.

 

 

Nếu tạo 1 block bằng cách đó thì còn sửa được, còn 1 cách không explore được khi tạo block nữa đấy, nó sẽ báo lỗi khi explore

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ẽ một hình như thế này, bạn sẽ làm theo cách nào để nhanh nhất?

http://www.mediafire.com/?3sidnzmtdpe

Hình này thì mình có thể dùng 8 lệnh để hoàn chỉnh...không biết có bạn nào có thủ thuật rút ngắn lệnh hơn nữa không! :cheers:

1- vẽ hình chữ nhật

2- tiếp tục vẽ hình chữ nhật

3- vẽ đường tròn nhỏ

4- vẽ đường tròn lớn ( tâm aray)

5- array (1,2,3)

6- vẽ hình bất kỳ bao hết tất cả lại

7- BOUNDARY

8- xóa rá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ình này thì mình có thể dùng 8 lệnh để hoàn chỉnh...không biết có bạn nào có thủ thuật rút ngắn lệnh hơn nữa không! :blush:

1- vẽ hình chữ nhật

2- tiếp tục vẽ hình chữ nhật

3- vẽ đường tròn nhỏ

4- vẽ đường tròn lớn ( tâm aray)

5- array (1,2,3)

6- vẽ hình bất kỳ bao hết tất cả lại

7- BOUNDARY

8- xóa rác!

 

 

Sau bước 1 và 2 chắc chắn bạn phải có 1 lệnh move thì mới ổn.

Tôi cthì dùng copy hoặc insert là xong . 1 lệnh chớ mấy. :cheers:

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 có file này xin mời các bác thử sức :

- Hiện tại file ko thể copy qua file khác được ...> làm thế nào có thể copy cả mặt bằng để có thể ghép với các file khác

file down đây :

http://www.megaupload.com/?d=UGM5JX3X

nếu chỉ muốn copy sang file khác thì bạn chỉ cần block toàn bộ rồi copy bình thường. sang bản vẽ khác thì bạn explope sau.

còn sâu xa thế nào và cách tạo ra sao thì mình chịu. mong các cao thủ chỉ giáo.

đây là file mình đã copy sang bản khác.

http://www.cadviet.com/upfiles/file_da_sua.rar

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

Tui không copy được bác ơi :cheers: . Nhưng dùng Xref để ghép các mảnh lại thì được và sẽ tiện lợi hơn trong sửa chữa bá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

Ðây là 1 file DWG có chứa 1 block bị ðóng bãng.

Ðố ai sửa ðýợc block này?

 

Thử sức nhé!

 

Mong bác Hoành hãy nói cho các bạn biết cách làm nhý thế nào ðể ðýợc nhý thế. Rất cảm õn 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
Ðây là 1 file DWG có chứa 1 block bị ðóng bãng.

Ðố ai sửa ðýợc block này?

 

Thử sức nhé!

 

Mong bác Hoành hãy nói cho các bạn biết cách làm nhý thế nào ðể ðýợc nhý thế. Rất cảm õn bác!

Trên CADVIỆT có tất cả hơn ba chục bài viết về chủ đề này rồi mất thời gian!

Không explore được block!, mặc dù đã dùng X và XP?!!

http://www.cadviet.com/forum/index.php?sho...Block+dóng+bang

không explore đối tượng block, khi đã bị modify

http://www.cadviet.com/forum/index.php?sho...Block+dóng+bang

Block ko thể explode đuợc!! Giải quyết thế nào đây???, Mặc dù đã cố gắng, nhưng vẫn pó tay

http://www.cadviet.com/forum/index.php?sho...Block+dóng+bang

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
hay nhỉ, đến lệnh REG thì em bó tay ko bit bác chỉ lại cho em

REG là lệnh REG nó làm cho các đối tượng vẽ …liền thành một đối tượng cũng gần dúng lệnh PE và lệnh BO.

Đánh REG rồi chọn đối tượng rồi Enter

Bấm vào dấu thank 1 phát cho oách nào!

  • Vote tăng 3
  • Vote giảm 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
REG là lệnh REG nó làm cho các đối tượng vẽ …liền thành một đối tượng cũng gần dúng lệnh PE và lệnh BO.

Đánh REG rồi chọn đối tượng rồi Enter

Bấm vào dấu thank 1 phát cho oách nào!

 

 

Sai rồi bạn ơi! "Reg" là lệnh biến các đối tượng đơn kín thành 1 miền(Region). Nếu không kín thì không làm đc đâu, ^^.

  • 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

Trên CADVIỆT có tất cả hõn ba chục bài viết về chủ ðề này rồi mất thời gian!

 

Bác này bần cýời quá, em là thành viên mới mà, sao ðã ðọc hết ðýợc.

Mà link bác ðýa em vẫn chýa trả lời câu hỏi của em. Rõ chán với các 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

hi! tui là thành viên mới, thấy topic ày hay nên góp vào một bài toán sau: vẽ hcn, kích thước 60 và 40 phải là số chẵn tuyệt đối.

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

, nhanh tay.

phisan

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

sao mình down file xuống mà ko mở được nó báo lỗi như sau

! C:\Documents and Settings\Le Quy Thanh\Desktop\dovui_2.zip: Unexpected end of archive

mình mới tham gia nên cũng muốn thử mà hic!

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
sao mình down file xuống mà ko mở được nó báo lỗi như sau

! C:\Documents and Settings\Le Quy Thanh\Desktop\dovui_2.zip: Unexpected end of archive

mình mới tham gia nên cũng muốn thử mà hic!

[/fonmit]down bình thường mà, ?? thử lại đi friend

http://www.cadviet.com/upfiles/untitled_59.bmp

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 vẽ đc hình sau chỉ bằng 1 lệnhduy nhất

http://www.cadviet.com/upfiles/Sanh_chinh2_Model_copy.jpg

Chào bác ph168xd,

Hì hì, lâu quá mới gặp bác. Nhưng mà chửa hiểu ý bác ạ. Có phải bác muốn vẽ hai cái hình vuông mà có cả mầu đặc trong đó 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

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

×