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

[Yêu cầu] nhờ viết lisp tạo mới một block và chèn vào bản vẽ

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

Các bác viết dùm lisp cụ thể như sau nhé:

Mình cần tạo mới một block tên là B có mọi thuộc tính cũng như hình dạng giống hệt block tên là A và sau đó chèn vào một số điểm cần chọn trong bản vẽ.

Thao tác thủ công của mình thông thường sẽ là edit block A rồi save as block A thành B. Rùi sau đó insert B vào các điểm mình chọn. Tuy nhiên nếu làm thủ công tốn khá nhiều thao tác không hiệu quả. (cái nguyên nhân là có nhiều lúc cần phân biệt 2 block A và B nhưng hai cái na ná giống nhau)

Tên lisp: tb

Đầu vào chọn Block gốc (block tên A).

Chọn tên Block cần tạo mới.

Pick lần lượt các điểm chèn block mới cho đến khi không có nhu cầu nữa thì enter.

Chú thích là nếu tên block cần tạo mới trùng tên block cũ thì cứ chèn block cũ lên các điểm mình chọn)

 

Sorry các bác vì hơi ngại úp hình ý tưởng lên mediafire mà lại không biết cách up hình chụp màn hình trực tiếp lên bài viết; Mà chắc ý tưởng mình diễn đạt chắc cũng dể hiểu nữa :D. Mong các bác thông cảm nhé. Cảm ơn các bác nhiề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

Yêu cầu lạ. Tranh thủ sếp ra tí toáy tí vậy. Chưa đảm bảo với ATT hay Dyn Block, vì chưa test với 2 thằng này :

(defun c:test( / blkObj blkName blkNew_Name fn pt) (vl-load-com)
(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 )
(while (setq pt (getpoint "\nInsert Point :"))
(command "._insert" blkNew_Name pt 1 1 0 )
)
(vl-file-delete  fn)
)

  • Vote tăng 4

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 ketxu quả thật nhiệt tình và tâm huyết với cadviet. Cảm ơn bạn nhiều nhé :). Lisp chạy tốt, không lỗi và đúng cho cả att - dyn block.

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 ketxu ơi. có lisp nào làm được yêu cầu này không a. em có 1 file bản vẽ A đã tạo sẵn trong đó có nhiêu  block. bây giờ mở 1 bản vẽ mới lên và chèn từng block mình chọn( trong bản vẽ A) để rỏ ràng em xin up bản vẽ minh hoạ duới. ví dụ 2 block có tên 1 và 2http://www.cadviet.com/upfiles/4/122369_a.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

 bác ketxu ơi. có lisp nào làm được yêu cầu này không a. em có 1 file bản vẽ A đã tạo sẵn trong đó có nhiêu  block. bây giờ mở 1 bản vẽ mới lên và chèn từng block mình chọn( trong bản vẽ A) để rỏ ràng em xin up bản vẽ minh hoạ duới. ví dụ 2 block có tên 1 và 2http://www.cadviet.com/upfiles/4/122369_a.rar

Của bạn đây:

(defun c:cbl(/ tt diem )
(setq tt  (getfiled "\n Chon Blog: (.dwg)" "C:\\Program Files\\AutoCAD 2007\\Support\\Block\\" "dwg" 2))

(or *tyle* (setq *tyle* 1))
(setq tyle (getreal (strcat "\n Nhap Ty Le <"
			  (rtos *tyle* 2 2)
			 "> :"
		  )
	 )
)
(if (not tyle) (setq tyle *tyle*) (setq *tyle* tyle))	
(While 
(setq diem (getpoint "\n Chon Diem Insert Block :"))   
(command "insert" tt "s" tyle diem "")
))

Đầu tiên lập một thư mục Block theo đường dẫn :  C:\\Program Files\\AutoCAD 2007\\Support\\Block. Nếu bạn dùng bản cad nào khác thì thay thế Autocad 2007 thành tương ứng.

Sau đó bạn tạo block bằng cách trên dòng lệnh comand gõ: Wblock và lưu vào thư mục Block ở trên (Nếu banh chưa rành về wblock thì có thể hỏi Mr. Google. :D)

Khi cần dùng bạn gõ lệnh cbl trên comand line và insert block vào điểm mình cần. Có thể dùng cách này với mọi bản vẽ cả mới lẫn cũ. Chúc bạn thành cô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

 bạn hiểu nhầm ý tơ

 

 

Của bạn đây:

(defun c:cbl(/ tt diem )
(setq tt  (getfiled "\n Chon Blog: (.dwg)" "C:\\Program Files\\AutoCAD 2007\\Support\\Block\\" "dwg" 2))

(or *tyle* (setq *tyle* 1))
(setq tyle (getreal (strcat "\n Nhap Ty Le <"
			  (rtos *tyle* 2 2)
			 "> :"
		  )
	 )
)
(if (not tyle) (setq tyle *tyle*) (setq *tyle* tyle))	
(While 
(setq diem (getpoint "\n Chon Diem Insert Block :"))   
(command "insert" tt "s" tyle diem "")
))

Đầu tiên lập một thư mục Block theo đường dẫn :  C:\\Program Files\\AutoCAD 2007\\Support\\Block. Nếu bạn dùng bản cad nào khác thì thay thế Autocad 2007 thành tương ứng.

Sau đó bạn tạo block bằng cách trên dòng lệnh comand gõ: Wblock và lưu vào thư mục Block ở trên (Nếu banh chưa rành về wblock thì có thể hỏi Mr. Google. :D)

Khi cần dùng bạn gõ lệnh cbl trên comand line và insert block vào điểm mình cần. Có thể dùng cách này với mọi bản vẽ cả mới lẫn cũ. Chúc bạn thành côn

cảm ơn bạn dã quan tam

 bạn hiểu nhầm ý tớ roi. tớ muốn tất cả block tớ cần chèn nằm cùng 1 bản vẽ. vì có 

rất nhiêu block. nếu có 1000 cái block dang wblok thì phải có 1000 cái bản vẽ a. tớ muốn 100 cái block dó nằm trong 1 bản vẽ mà vẫn chèn duoc. ban xem lai ho minh cái .. 

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 viết dùm lisp cụ thể như sau nhé:

Mình cần tạo mới một block tên là B có mọi thuộc tính cũng như hình dạng giống hệt block tên là A và sau đó chèn vào một số điểm cần chọn trong bản vẽ.

Thao tác thủ công của mình thông thường sẽ là edit block A rồi save as block A thành B. Rùi sau đó insert B vào các điểm mình chọn. Tuy nhiên nếu làm thủ công tốn khá nhiều thao tác không hiệu quả. (cái nguyên nhân là có nhiều lúc cần phân biệt 2 block A và B nhưng hai cái na ná giống nhau)

Tên lisp: tb

Đầu vào chọn Block gốc (block tên A).

Chọn tên Block cần tạo mới.

Pick lần lượt các điểm chèn block mới cho đến khi không có nhu cầu nữa thì enter.

Chú thích là nếu tên block cần tạo mới trùng tên block cũ thì cứ chèn block cũ lên các điểm mình chọn)

 

Sorry các bác vì hơi ngại úp hình ý tưởng lên mediafire mà lại không biết cách up hình chụp màn hình trực tiếp lên bài viết; Mà chắc ý tưởng mình diễn đạt chắc cũng dể hiểu nữa biggrin.gif. Mong các bác thông cảm nhé. Cảm ơn các bác nhiều.

 

Tiện nho đây bác "ketxu" và các bác trên diễn đàn viết giúp em lisp này với ah:

Trong bản vẽ em có một loạt block tên A, giờ em muốn đổi tên một số block A thành block tên B giống thuộc tính block A mà vẫn giưi nguyên block A (các vị trí của block sau khi đổi vẫn giữ nguyên). dòng lệnh như sau ah:

-Tên lệnh: DTB

-Chọn các block cần đổi tên

-Tên block mới

Em cảm ơn ah.

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

×