Đến nội dung


Hình ảnh
- - - - -

Tìm basepoint của 1 block để chèn 1 block khác


  • Please log in to reply
17 replies to this topic

#1 longtdh1

longtdh1

    biết pan

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

Đã gửi 05 January 2011 - 10:38 PM

Mình muốn chèn 1 block vào 1 block khác theo tọa độ basepoint của block đó. Có bạn nào biết cách tìm basepoint của 1 block bằng VBA không giúp mình với. Thanks.
  • 0

#2 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1435 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 06 January 2011 - 07:32 AM

Mình muốn chèn 1 block vào 1 block khác theo tọa độ basepoint của block đó. Có bạn nào biết cách tìm basepoint của 1 block bằng VBA không giúp mình với. Thanks.

Cách tìm basepoint của 1 block :
Sub BlockInsertPoint()
On Error Resume Next

Dim Point As Variant
Dim Ent As AcadEntity

ThisDrawing.Utility.GetEntity Ent, Point, "Chon Block:"

If TypeOf Ent Is AcadBlockReference Then
Point = Ent.InsertionPoint
MsgBox "Insertion Point : " & Chr(10) _
& " X = " & Point(0) & Chr(10) _
& " Y = " & Point(1) & Chr(10) _
& " Z = " & Point(2)
Else
MsgBox "Khong phai Block."
End If

End Sub

  • 1

#3 longtdh1

longtdh1

    biết pan

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

Đã gửi 06 January 2011 - 10:31 PM

Cách tìm basepoint của 1 block :

Sub BlockInsertPoint()
On Error Resume Next

Dim Point As Variant
Dim Ent As AcadEntity

ThisDrawing.Utility.GetEntity Ent, Point, "Chon Block:"

If TypeOf Ent Is AcadBlockReference Then
Point = Ent.InsertionPoint
MsgBox "Insertion Point : " & Chr(10) _
& " X = " & Point(0) & Chr(10) _
& " Y = " & Point(1) & Chr(10) _
& " Z = " & Point(2)
Else
MsgBox "Khong phai Block."
End If

End Sub



Cám ơn bạn nhiều. Tiện thể cho mình hỏi sao đoạn code này của mình lại không ra được kết quả:

Sub basepoint()
On Error Resume Next
Dim blockObj As AcadBlock
Dim insertionPnt(0 To 2) As Double
Dim bpoint As Variant

Set blockObj = ThisDrawing.Blocks.Item("AAA")
bpoint = blockObj.InsertionPoint
insertionPnt(0) = bpoint(0)
insertionPnt(1) = bpoint(1)
insertionPnt(2) = bpoint(2)

MsgBox "Block: " & blockObj.Name & " Basepoint:" & vbCrLf & insertionPnt(0) & ", " & insertionPnt(1) & ", " & insertionPnt(2)

End Sub
  • 0

#4 longtdh1

longtdh1

    biết pan

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

Đã gửi 06 January 2011 - 10:36 PM

Cách tìm basepoint của 1 block :

Sub BlockInsertPoint()
On Error Resume Next

Dim Point As Variant
Dim Ent As AcadEntity

ThisDrawing.Utility.GetEntity Ent, Point, "Chon Block:"

If TypeOf Ent Is AcadBlockReference Then
Point = Ent.InsertionPoint
MsgBox "Insertion Point : " & Chr(10) _
& " X = " & Point(0) & Chr(10) _
& " Y = " & Point(1) & Chr(10) _
& " Z = " & Point(2)
Else
MsgBox "Khong phai Block."
End If

End Sub



Cám ơn bạn nhiều. Tiện thể cho mình hỏi sao đoạn code này của mình lại không ra được kết quả:

Sub basepoint()
On Error Resume Next
Dim blockObj As AcadBlock
Dim insertionPnt(0 To 2) As Double
Dim bpoint As Variant

Set blockObj = ThisDrawing.Blocks.Item("AAA")
bpoint = blockObj.InsertionPoint
insertionPnt(0) = bpoint(0)
insertionPnt(1) = bpoint(1)
insertionPnt(2) = bpoint(2)

MsgBox "Block: " & blockObj.Name & " Basepoint:" & vbCrLf & insertionPnt(0) & ", " & insertionPnt(1) & ", " & insertionPnt(2)

End Sub
  • 0

#5 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 696 (tốt)

Đã gửi 19 January 2011 - 11:29 PM

Các bác cho em hoi để lấy toạ độ của 1 point object thì làm thế nào. Em mò mẫm mãi không được nên hỏi các Bác....
  • 0
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#6 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1435 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 20 January 2011 - 01:48 PM

Các bác cho em hoi để lấy toạ độ của 1 point object thì làm thế nào. Em mò mẫm mãi không được nên hỏi các Bác....

Sử dụng Sub BlockInsertPoint() ở trên, tại dòng : If TypeOf Ent Is AcadBlockReference Then
Bạn thay AcadBlockReference bằng AcadPoint là đuợc.

tưong tự cho Text, MText là AcadText, AcadMText.
  • 1

#7 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 696 (tốt)

Đã gửi 20 January 2011 - 02:55 PM

Sử dụng Sub BlockInsertPoint() ở trên, tại dòng : If TypeOf Ent Is AcadBlockReference Then
Bạn thay AcadBlockReference bằng AcadPoint là đuợc.

tưong tự cho Text, MText là AcadText, AcadMText.

Cám ơn bác. Đêm qua nghiên cứu mãi cùng ketxu thì dùng ent.coordinates cũng được Bác ạ. Để em dùng thử theo cách của Bác xem.
  • 1
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#8 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1435 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 20 January 2011 - 03:37 PM

Cám ơn bác. Đêm qua nghiên cứu mãi cùng ketxu thì dùng ent.coordinates cũng được Bác ạ. Để em dùng thử theo cách của Bác xem.

Sorry! Anh nhầm. :)
(vì thử với Ent.InsertionPoint Cad vẫn cho kết quả (không báo lỗi) nhưng là giá trị của tọa độ điểm pick.)

Với AcadPoint chính xác phải là Ent.Coordinates.
  • 0

#9 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

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

Đã gửi 07 March 2012 - 04:39 PM

Để tạo ta 1 block nguồn trong 1 bản vẽ.Ví dụ: C:\thu vien.dwg
Sau do mình mở bản vẽ khác ra mà muốn lấy block XX của bản vẽ thư viện bằng VBA thì làm thế nào ?
  • 0

#10 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

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

Đã gửi 25 January 2013 - 04:01 PM

Các bạn cho hỏi tại sao?
Lấy tọa độ Block bằng thuộc tính: InsertionPoint (Dùng VBA)
Cho ra tọa độ khác với tọa độ Pick trên bản vẽ
Cám ơn!
  • 0

#11 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1435 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 26 January 2013 - 02:58 PM

Các bạn cho hỏi tại sao?
Lấy tọa độ Block bằng thuộc tính: InsertionPoint (Dùng VBA)
Cho ra tọa độ khác với tọa độ Pick trên bản vẽ
Cám ơn!

Vì hệ tọa độ hiện hành không phải là WCS.

InsertionPoint trả về giá trị theo hệ tọa độ WCS.


Command: ucs
Current ucs name: *NO NAME*
Specify origin of UCS or [Face/NAmed/OBject/Previous/View/World/X/Y/Z/ZAxis] <World>: w
  • 1

#12 rongcuoimay

rongcuoimay

    biết vẽ ellipse

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

Đã gửi 26 May 2013 - 06:49 PM

mọi người cho tôi hỏi: khi dùng lệnh insert để chèn 1 block thì pick điểm chèn 1 đằng nó lại xuất hiện 1 nẻo...rất xa? làm sao để nó insert đúng vị trí mình chọn vậy?


  • 0

#13 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5448 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 26 May 2013 - 06:52 PM

mọi người cho tôi hỏi: khi dùng lệnh insert để chèn 1 block thì pick điểm chèn 1 đằng nó lại xuất hiện 1 nẻo...rất xa? làm sao để nó insert đúng vị trí mình chọn vậy?

Đấy là do khi tạo block bạn không lấy đúng điểm chuẩn là điểm (0 0).


  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#14 rongcuoimay

rongcuoimay

    biết vẽ ellipse

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

Đã gửi 26 May 2013 - 08:17 PM

Đấy là do khi tạo block bạn không lấy đúng điểm chuẩn là điểm (0 0).

lấy đúng điểm chuẩn (0,0) là sao bạn? mình tạo 1 hình vẽ bất kì trên bản vẽ rồi gom lại 1 block....ko lẽ phải đưa block đó về tọa độ (0,0) rồi mới gom lại thành block hả bạn?


  • 0

#15 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5448 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 26 May 2013 - 08:22 PM

lấy đúng điểm chuẩn (0,0) là sao bạn? mình tạo 1 hình vẽ bất kì trên bản vẽ rồi gom lại 1 block....ko lẽ phải đưa block đó về tọa độ (0,0) rồi mới gom lại thành block hả bạn?

Bạn xem lại dialog của lệnh tạo block, trong đó có chọn điểm chuẩn.


  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#16 rongcuoimay

rongcuoimay

    biết vẽ ellipse

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

Đã gửi 26 May 2013 - 08:39 PM

Bạn xem lại dialog của lệnh tạo block, trong đó có chọn điểm chuẩn.

có phải bạn nói dialog là hộp thoại của lệnh block, là hình này

 

blockdefinition.jpg


  • 0

#17 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5448 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 26 May 2013 - 08:54 PM

Vâng, hình đó. Khi tạo block nếu bạn "Pick point" vào điểm nào trên bản vẽ thì điểm đó là điểm chuẩn. Ví dụ điểm A(xa,yb).

Đến khi insert, giả dụ bạn chọn điểm chèn là B(xb,yb), thì điểm khi đó điểm A sẽ ở vị trí điểm B. Thế thôi.


  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#18 rongcuoimay

rongcuoimay

    biết vẽ ellipse

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

Đã gửi 26 May 2013 - 09:06 PM

được rồi, thanks bạn rất nhiều


  • 0