Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
NguyenNgocSon

[Hỏi] Tìm giao điểm VBA

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

Sub Inter_Point1()

'On Error Resume Next

Dim TapDT As AcadSelectionSet

Dim ftype(1) As Integer, fdata(1)

ftype(0) = 0: fdata(0) = "POLYLINE"

ftype(1) = 8: fdata(1) = "PLINETNTN"

Set TapDT = CreateSelectionSet("Giaodiemzzz")

TapDT.Select acSelectionSetAll, , , ftype, fdata

Dim PL As AcadEntity

Dim Duongdan As AcadEntity

Dim pick As Variant

ThisDrawing.Utility.GetEntity Duongdan, pick, vbCrLf & "Chon duong LWPolyline tim tuyen1"

Dim pt As Variant, i As Integer

For i = 0 To TapDT.Count - 1

pt = Duongdan.IntersectWith(TapDT.Item(i), 0)

Next i

Dim c As AcadCircle

Set c = ThisDrawing.ModelSpace.AddCircle(pt, 1)

End Sub

Muc đích là tìm giao điểm của 1 đối tượng với tập đối tượng chọn

Khi sử dụng hàm trên báo lỗi

incorrect number of elements in safearray ????

Mặc dù cú pháp không hề sai.

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 chọn đối tượng ok chứ? Theo như bộ lọc của bạn thì bạn sẽ chọn đối tượng là Polyline thuộc layer "PLINETNTN" đúng ko 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

Bạn chọn đối tượng ok chứ? Theo như bộ lọc của bạn thì bạn sẽ chọn đối tượng là Polyline thuộc layer "PLINETNTN" đúng ko nhỉ?

Mình chọn đối tuờn riêng lẻ bằng pick là ok, nhưng đưa vào bộ lọc bị lỗ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

Code trên sai ở chỗ nếu không có giao điểm của đối tượng cuối cùng trong TapDT với đường dẫn thì pt=nil

Bạn xử lý tiếp cho trường hợp có nhiều giao điểm

...
Dim c As AcadCircle
Dim pt As Variant, i As Integer
For i = 0 To TapDT.Count - 1
pt = Duongdan.IntersectWith(TapDT.Item(i), 0)
If UBound(pt) = 2 Then
Set c = ThisDrawing.ModelSpace.AddCircle(pt, 1)
End If
Next i
...
  • Vote tăng 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

Bạn chỉnh code lại như sau

 

For i = 0 To TapDT.Count - 1

pt=nothing
pt = Duongdan.IntersectWith(TapDT.Item(i), 0)

 

--> pt là mảng giao với 1 đối tượng, còn pt1 là toàn bộ các điểm giao

--> copy các phần tử trong mảng pt sang mảng pt1
Next i

  • Vote tăng 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

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
Đăng nhập để thực hiện theo  

×