Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
10 replies to this topic

#1 victor85

victor85

    biết lệnh stretch

  • Members
  • PipPipPip
  • 169 Bài viết
Điểm đánh giá: 10 (tàm tạm)

Đã gửi 31 August 2011 - 12:36 PM

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

#2 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 31 August 2011 - 03:14 PM

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

  • 4

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


#3 victor85

victor85

    biết lệnh stretch

  • Members
  • PipPipPip
  • 169 Bài viết
Điểm đánh giá: 10 (tàm tạm)

Đã gửi 17 September 2011 - 03:19 PM

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

#4 nguyenbd1

nguyenbd1

    biết lệnh text

  • Members
  • PipPipPipPip
  • 276 Bài viết
Điểm đánh giá: 13 (tàm tạm)

Đã gửi 17 November 2014 - 06:33 PM

 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.c.../4/122369_a.rar


  • 0

#5 trinhhoanghieu090

trinhhoanghieu090

    Edu level: li8

  • Members
  • PipPipPipPipPip
  • 309 Bài viết
Điểm đánh giá: 29 (tàm tạm)

Đã gửi 17 November 2014 - 09:08 PM

 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.c.../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


  • 0

#6 nguyenbd1

nguyenbd1

    biết lệnh text

  • Members
  • PipPipPipPip
  • 276 Bài viết
Điểm đánh giá: 13 (tàm tạm)

Đã gửi 17 November 2014 - 10:06 PM

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

  • 0

#7 trinhhoanghieu090

trinhhoanghieu090

    Edu level: li8

  • Members
  • PipPipPipPipPip
  • 309 Bài viết
Điểm đánh giá: 29 (tàm tạm)

Đã gửi 18 November 2014 - 06:39 AM

Hi hi, thế thì phải đợi các cao nhân ra tay rùi bạn @nguyenbd1 ạ.
  • 0

#8 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 18 November 2014 - 08:31 AM

Bạn biết đến lệnh adcenter (Ctrl + 2) chưa ?
  • 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


#9 trinhhoanghieu090

trinhhoanghieu090

    Edu level: li8

  • Members
  • PipPipPipPipPip
  • 309 Bài viết
Điểm đánh giá: 29 (tàm tạm)

Đã gửi 18 November 2014 - 12:52 PM

Bạn biết đến lệnh adcenter (Ctrl + 2) chưa ?

 

Bác có thể giải thích tóm tắt lệnh này được không, :P


  • 0

#10 conghoa113

conghoa113

    biết zoom

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

Đã gửi 18 November 2014 - 02:22 PM

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.


  • 0

#11 nguyenbd1

nguyenbd1

    biết lệnh text

  • Members
  • PipPipPipPip
  • 276 Bài viết
Điểm đánh giá: 13 (tàm tạm)

Đã gửi 18 November 2014 - 07:35 PM

Bác có thể giải thích tóm tắt lệnh này được không, :P

em nói rõ rồi mà bác


  • 0