Đến nội dung


Hình ảnh
- - - - -

InsertBlock


  • Please log in to reply
15 replies to this topic

#1 huyhoangute

huyhoangute

    biết zoom

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

Đã gửi 30 November 2010 - 11:45 AM

Mình có 2 bản vẽ: 1 bản là bản vẽ không có gì (bản vẽ mới) và 1 bản vẽ có chứa 3 block có tên là 1,2 và 3
Cho mình hỏi là làm thế nào để chèn vào bản vẽ mới block 1 hoặc 2 hoặc 3 (tức là không đồng thời chèn cả 3 block vào).
  • 0

#2 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 30 November 2010 - 12:04 PM

Mình có 2 bản vẽ: 1 bản là bản vẽ không có gì (bản vẽ mới) và 1 bản vẽ có chứa 3 block có tên là 1,2 và 3
Cho mình hỏi là làm thế nào để chèn vào bản vẽ mới block 1 hoặc 2 hoặc 3 (tức là không đồng thời chèn cả 3 block vào).

Chào bạn huyhoangute,
Mở bản vẽ có chứa các block 1, 2, 3,.... lên.
Copy cái block cần insert vào clipboad.
Mở bản vẽ cần insert.
Paste cái clipboard đó vô.
Thế là từ đó bạn thoải mái mà insert cái thằng cu block đó.
Hề hề hề... dễ như ăn ..... ỚT
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#3 huyhoangute

huyhoangute

    biết zoom

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

Đã gửi 30 November 2010 - 03:33 PM

hic, đang trong mục VBA mà, mình cần là cần code VBA để làm điều đó! dù san cũng thanks bạn vì nhiệt tình chia sẻ.
  • 0

#4 anhcos

anhcos

    biết lệnh hatchedit

  • Advance Member
  • PipPipPipPip
  • 260 Bài viết
Điểm đánh giá: 170 (tàm tạm)

Đã gửi 30 November 2010 - 04:25 PM

Sử dụng như sau:
Copy Block có tên abc từ bản vẽ hiện hành qua bản vẽ khác

Dim ban_ve_khac as AcadDocument
Set biến ban_ve_khac này ở đây

Dim object_to_copies(0) as AcadEntity
set object_to_copies(0) = ThisDrawing.Blocks.Item("abc")

ThisDrawing.CopyObject object_to_copies, ban_ve_khac
  • 0
Clear sky!

MF Rock collection.

#5 huyhoangute

huyhoangute

    biết zoom

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

Đã gửi 30 November 2010 - 04:37 PM

Sử dụng như sau:
Copy Block có tên abc từ bản vẽ hiện hành qua bản vẽ khác

Dim ban_ve_khac as AcadDocument
Set biến ban_ve_khac này ở đây

Dim object_to_copies(0) as AcadEntity
set object_to_copies(0) = ThisDrawing.Blocks.Item("abc")

ThisDrawing.CopyObject object_to_copies, ban_ve_khac

Mình muốn copy block từ một bản vẽ đã có (coi như là một thư viện ) vào bản vẽ hiện hành cơ. help me, thanks!
  • 0

#6 vuhaiok

vuhaiok

    Chưa sử dụng CAD

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

Đã gửi 30 November 2010 - 05:20 PM

Mình có 2 bản vẽ: 1 bản là bản vẽ không có gì (bản vẽ mới) và 1 bản vẽ có chứa 3 block có tên là 1,2 và 3
Cho mình hỏi là làm thế nào để chèn vào bản vẽ mới block 1 hoặc 2 hoặc 3 (tức là không đồng thời chèn cả 3 block vào).
Dùng lệnh
Command: dc
Xuất hiện
Bảng biểu
Chọn bảng vẽ chứa blok
Chọn block cần lấy
dùng chột lôi vào là bảng vẽ mới là được
vuhaiok@yahoo.com.vn

:cheers: :leluoi:
  • 0

#7 huyhoangute

huyhoangute

    biết zoom

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

Đã gửi 30 November 2010 - 05:29 PM

Mình có 2 bản vẽ: 1 bản là bản vẽ không có gì (bản vẽ mới) và 1 bản vẽ có chứa 3 block có tên là 1,2 và 3
Cho mình hỏi là làm thế nào để chèn vào bản vẽ mới block 1 hoặc 2 hoặc 3 (tức là không đồng thời chèn cả 3 block vào).
Dùng lệnh
Command: dc
Xuất hiện
Bảng biểu
Chọn bảng vẽ chứa blok
Chọn block cần lấy
dùng chột lôi vào là bảng vẽ mới là được
vuhaiok@yahoo.com.vn

:cheers: :leluoi:

Mấy anh "đọc kĩ hướng dẫn sử dụng trước khi dùng hộ em cái", đã bảo là VBA mà. Đến bó tay!
  • 0

#8 anhcos

anhcos

    biết lệnh hatchedit

  • Advance Member
  • PipPipPipPip
  • 260 Bài viết
Điểm đánh giá: 170 (tàm tạm)

Đã gửi 30 November 2010 - 09:20 PM

Mình muốn copy block từ một bản vẽ đã có (coi như là một thư viện ) vào bản vẽ hiện hành cơ. help me, thanks!

Bạn làm ngược lại so với phần code trên kia là xong thôi.
  • 1
Clear sky!

MF Rock collection.

#9 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 30 November 2010 - 10:14 PM

Private Sub chen_block()
Dim tpoint
Dim blockRefObj As AcadBlockReference
tpoint = ThisDrawing.Utility.GetPoint(, "Diem dat block: ")
Set blockRefObj = ThisDrawing.ModelSpace.InsertBlock(tpoint, "ten Block", 1#, 1#, 1#, 0)
End Sub
Bạn thử đoạn này xem sao
  • 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


#10 huyhoangute

huyhoangute

    biết zoom

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

Đã gửi 01 December 2010 - 08:13 AM

Private Sub chen_block()
Dim tpoint
Dim blockRefObj As AcadBlockReference
tpoint = ThisDrawing.Utility.GetPoint(, "Diem dat block: ")
Set blockRefObj = ThisDrawing.ModelSpace.InsertBlock(tpoint, "ten Block", 1#, 1#, 1#, 0)
End Sub
Bạn thử đoạn này xem sao



"ten Block" của bạn thực ra đó là tên file chứa các block chứ không phải là tên Block chứa trong file
  • 1

#11 huyhoangute

huyhoangute

    biết zoom

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

Đã gửi 01 December 2010 - 08:18 AM

Bạn làm ngược lại so với phần code trên kia là xong thôi.

Bạn cho mình code cụ thể hơn được không, làm thế nào để gọi được các block trong bản vẽ không hiện hành. Thanks!
  • 0

#12 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 01 December 2010 - 08:47 AM

"ten Block" của bạn thực ra đó là tên file chứa các block chứ không phải là tên Block chứa trong file

Srr vì viết vội^^.Mình viết trong trường hợp trong fle CAD đó chưa nhiều Block.
@chủ 2pic: để insert 1 block chứa trong 1 file,đầu tiên bạn phải khai báo đường dẫn tới file đó.
Khi bắt đầu chạy code thì sẽ có hàm khởi tạo insert toàn bộ file chứa block.
Sau đó,muốn insert block nào thì dùng tên block đó

Sub Khoi_Tao()
'On Error GoTo out:
Dim diemchen(0 To 2) As Double
Dim BlockFile
' Insert file chua block
BlockFile = "C:\fileblock.dwg" ' Duong dan file dwg
Dim blockRefObj As AcadBlockReference
Set blockRefObj = ThisDrawing.ModelSpace.InsertBlock(diemchen BlockFile, 1#, 1#, 1#, 0)
blockRefObj.Delete
out:
End Sub

Private Sub chen_block()
Khoi_tao
Dim tpoint
Dim blockRefObj As AcadBlockReference
tpoint = ThisDrawing.Utility.GetPoint(, "Diem dat block: ")
'insert block trong file chua block
Set blockRefObj = ThisDrawing.ModelSpace.InsertBlock(tpoint, "ten_Block", 1#, 1#, 1#, 0) 'ten 1 block trong file dwg
End Sub

  • 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


#13 anhcos

anhcos

    biết lệnh hatchedit

  • Advance Member
  • PipPipPipPip
  • 260 Bài viết
Điểm đánh giá: 170 (tàm tạm)

Đã gửi 01 December 2010 - 08:52 AM

Copy block từ bản vẽ khác, không phải bản vẽ hiện hành:

Bạn phải mở bản vẽ chứa block bằng lệnh VBA như sau:
ThisDrawing là bản vẽ mới đang active

Dim Ban_ve_moi as AcadDocument

'Lưu lại biến bản vẽ mới
Set Ban_ve_moi = ThisDrawing

ThisDrawing.Open(đường dẫn đến file bản vẽ chứa block)
'Lúc này bản vẽ hiện hành là bản vẽ vừa mở

'Chỗ này tùy theo nhu cầu mà thay đổi
Dim obj_to_copy(0) as AcadEntity
set obj_to_copy(0) = ThisDrawing.Blocks.Item("1")

ThisDrawing.CopyObjects obj_to_copy, Ban_ve_moi

'Đóng em nó
ThisDrawing.Close False
  • 1
Clear sky!

MF Rock collection.

#14 huyhoangute

huyhoangute

    biết zoom

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

Đã gửi 01 December 2010 - 11:32 AM

Srr vì viết vội^^.Mình viết trong trường hợp trong fle CAD đó chưa nhiều Block.
@chủ 2pic: để insert 1 block chứa trong 1 file,đầu tiên bạn phải khai báo đường dẫn tới file đó.
Khi bắt đầu chạy code thì sẽ có hàm khởi tạo insert toàn bộ file chứa block.
Sau đó,muốn insert block nào thì dùng tên block đó

Sub Khoi_Tao()
'On Error GoTo out:
Dim diemchen(0 To 2) As Double
Dim BlockFile
' Insert file chua block
BlockFile = "C:\fileblock.dwg" ' Duong dan file dwg
Dim blockRefObj As AcadBlockReference
Set blockRefObj = ThisDrawing.ModelSpace.InsertBlock(diemchen BlockFile, 1#, 1#, 1#, 0)
blockRefObj.Delete
out:
End Sub

Private Sub chen_block()
Khoi_tao
Dim tpoint
Dim blockRefObj As AcadBlockReference
tpoint = ThisDrawing.Utility.GetPoint(, "Diem dat block: ")
'insert block trong file chua block
Set blockRefObj = ThisDrawing.ModelSpace.InsertBlock(tpoint, "ten_Block", 1#, 1#, 1#, 0) 'ten 1 block trong file dwg
End Sub

Code trên chạy ok rùi nhưng Bác có thể giải thích đoạn code trên cho em được không? em chưa hiểu lắm.
Đầu tiên là gọi bản vẽ chứa block thì ok, đến cái blockRefObj.Delete tại sao lại xóa??? rùi lại out: nữa???
Nói chung là code từ đoạn blockRefObj.Delete về sau em ko hiểu, bác giải thích giúp em nhé!
  • 0

#15 huyhoangute

huyhoangute

    biết zoom

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

Đã gửi 01 December 2010 - 01:18 PM

cho mình hỏi luôn là tọa độ điểm chèn của block toàn chạy đi đâu thui chứ không như tọa độ mình chọn (mặc dù file chứa block mình đã tạo block ở gốc tọa độ).
  • 0

#16 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 01 December 2010 - 04:18 PM

blockRefObj.Delete Dòng này để xóa cái block file trong bản vẽ của mình đi.Vì giả thiết ở đây là trong file Block của bạn chứa nhiều block con,bạn chỉ add nó vào để bản vẽ hiện hành có những block ấy trong list thôi,rồi xóa đi chứ ai lại để chình ình ở đấy ^^ .Lúc đầu chỉ cần khởi tạo thế th mà.Trong t/hợp gile block chỉ có 1 block,thì không cần đoạn code dưới nữa
Out: liên quan đến dòng On Error GoTo out: (lúc post mình lại để dấu ' đằng trước,bạn xóa đi nhé)
Tức là nếu gặp lỗi (trùng tên block,k tìm thấy file gốc....) thì nhảy đến dòng OUT: để thực hiện tiếp các dòng sau đó (ở đây là end sub luôn)
  • 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