Đến nội dung


Hình ảnh
- - - - -

Cách xách định thứ tự hiển thị đối tượng trong Selection Set?


  • Please log in to reply
7 replies to this topic

#1 phantuhuong

phantuhuong

    biết dimstyle

  • Moderator
  • PipPipPipPipPip
  • 383 Bài viết
Điểm đánh giá: 200 (khá)

Đã gửi 23 July 2008 - 02:27 PM

Tôi có tạo 1 thủ tục VBA để lọc ra những đối tượng là Text trong 1 cửa sổ Window (thủ tục ở dưới), nhưng cái khó là không biết được thứ tự xuất hiện của đối tượng như thế nào, lúc thì Text ở điểm này, lúc thì Text ở điểm khác... Không hiểu có liên quan đến thời điểm tạo text đó khác nhau không? Nếu như vậy thì hàm nào xác định được đối tượng nào được vẽ trước đối tượng khác?

Sub CopyTextSangExcel() 
Dim ChuT As AcadEntity
Dim asset As AcadSelectionSet
Dim Diembao1P As Variant, Diembao2P As Variant
Dim i As Integer

'Bo qua loi neu asset khong ton tai
On Error Resume Next
With ActiveDocument.SelectionSets
.Item("asset").Delete
'Tao doi tuong asset
Set asset = .Add("asset")
End With
'Chon toan bo doi tuong trong cua so chon vao asset
With ActiveDocument.Utility
Diembao1P = .GetPoint(, vbLf & "Chon diem bao o phia tren, ben trai:")
Diembao2P = .GetPoint(, vbLf & "Chon diem bao o phia duoi, ben phai:")
End With
asset.Select acSelectionSetWindow, Diembao1P, Diembao2P
asset.Highlight True

i = 0

'Duyet qua tung doi tuong trong asset
For Each ChuT In asset
Chi chon doi tuong la Text
If ChuT.ObjectName = "AcDbText" Then
i = i + 1
ChuT.Highlight False
MsgBox "Gia tri cua doi tuong thu " & i & ": " & ChuT.TextString
End If
Next

MsgBox "Vung chon co " & i & " doi tuong."

asset.Highlight False

Set asset = Nothing
Set ChuT = Nothing

End Sub

  • 0
Bồi dưỡng Excel & VBA cho các đơn vị ở Hà Nội và khu vực lân cận

Từng bước loại đồ Tàu ra khỏi cuộc sống!


#2 ndtnv

ndtnv

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 437 Bài viết
Điểm đánh giá: 384 (khá)

Đã gửi 13 October 2008 - 10:23 AM

Tôi cũng đang định viết hàm để lấy text trong bảng từ Acad sang Excel nhưng có các vấn đề sau:
- Không rõ VBA có hay không các hàm Quick sort để lọc các text, sắp xếp theo hàng và cột thì mới xuất ra đúng được.
- Nếu vị trí text lệch 1 ít thì sẽ cho kết quả sai khác nhiều
Vì vậy nếu text nằm trong bảng thì có lẽ nên chọn các đường thẳng ngang và đứng, sau đó chọn text trong từng ô rồi mới export.
Nếu ai đã viết các hàm tiện ích, xin đóng góp thêm
  • 0

#3 nghiautc

nghiautc

    biết lệnh copy

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

Đã gửi 03 December 2010 - 12:22 PM

Tôi có tạo 1 thủ tục VBA để lọc ra những đối tượng là Text trong 1 cửa sổ Window (thủ tục ở dưới), nhưng cái khó là không biết được thứ tự xuất hiện của đối tượng như thế nào, lúc thì Text ở điểm này, lúc thì Text ở điểm khác... Không hiểu có liên quan đến thời điểm tạo text đó khác nhau không? Nếu như vậy thì hàm nào xác định được đối tượng nào được vẽ trước đối tượng khác?

Sub CopyTextSangExcel() 
Dim ChuT As AcadEntity
Dim asset As AcadSelectionSet
Dim Diembao1P As Variant, Diembao2P As Variant
Dim i As Integer

'Bo qua loi neu asset khong ton tai
On Error Resume Next
With ActiveDocument.SelectionSets
.Item("asset").Delete
'Tao doi tuong asset
Set asset = .Add("asset")
End With
'Chon toan bo doi tuong trong cua so chon vao asset
With ActiveDocument.Utility
Diembao1P = .GetPoint(, vbLf & "Chon diem bao o phia tren, ben trai:")
Diembao2P = .GetPoint(, vbLf & "Chon diem bao o phia duoi, ben phai:")
End With
asset.Select acSelectionSetWindow, Diembao1P, Diembao2P
asset.Highlight True

i = 0

'Duyet qua tung doi tuong trong asset
For Each ChuT In asset
Chi chon doi tuong la Text
If ChuT.ObjectName = "AcDbText" Then
i = i + 1
ChuT.Highlight False
MsgBox "Gia tri cua doi tuong thu " & i & ": " & ChuT.TextString
End If
Next

MsgBox "Vung chon co " & i & " doi tuong."

asset.Highlight False

Set asset = Nothing
Set ChuT = Nothing

End Sub

Mình không hiểu rõ câu hỏi của bạn lắm nhưng hàm tạo đối tượng theo thời gian thì đó là ChuT.Handle
  • 0

#4 nghiautc

nghiautc

    biết lệnh copy

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

Đã gửi 03 December 2010 - 12:27 PM

Mình không hiểu rõ câu hỏi của bạn lắm nhưng hàm tạo đối tượng theo thời gian thì đó là ChuT.Handle

Sorry chính xác là theo thứ tự tạo
  • 0

#5 redsea_tq

redsea_tq

    biết lệnh erase

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

Đã gửi 25 January 2011 - 12:06 AM

Sorry chính xác là theo thứ tự tạo

Chào bác Nghiautc, cái này tôi gặp rất nhiều vì tôi hay dùng selectionsets. khi mình dùng chuot để quyét chọn đối tượng hay làm như cách của bạn thì đối tượng sẽ được ưu tiên theo thứ tự bắt đối tượng, có nghĩa là nó gặp đối tượng nào đầu tiên thì đối tượng đó được xếp thứ nhất và lần lượt các đối tượng sau. Không biết yêu cầu bài toán của bạn như thế nào nên tôi không thể đóng góp thêm, nhưng thông thường thì phải quản lý các đối tượng theo toạ độ, đưa tọa độ của các đối tượng vào một mảng rồi cho "sủi bọt" là xong bạn ah! chúc bạn thành công.
Nếu đóng góp có gì sai mong các sư phụ chỉ giáo vì tôi cũng mới tìm hiểu vb được mấy tháng.
  • 0

#6 nestxanh

nestxanh

    biết zoom

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

Đã gửi 25 January 2011 - 10:31 AM

Mình không tìm được tài liệu nào nói về vấn đề này nên mình test thử, kết quả test của mình trùng với ý kiến bạn Nghiautc, thứ tự next các đối tượng trong selectionset là theo thứ tự tạo các đối tượng đó. Cụ thể đối tượng tạo sau cùng hiện đầu tiên ứng với ObjectID của nó lớn nhất rồi đến đối tượng tạo đầu tiên sẽ hiện cuối ứng với ObjectID nhỏ nhất.
  • 1

#7 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

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

Đã gửi 24 April 2013 - 08:43 PM

Với VBA thì khi bạn chọn đối tượng Selectionset bằng

1.Pick lần lượt các đối tượng: thứ tự sắp xếp theo thứ tự bạn chọn

2.Chọn bằng quét chuột thì: thứ tự sắp xếp theo chiều từ phải qua trái (nghĩa là đối tượng có tọa độ X lớn hơn sẽ được sắp xếp trước.

Nếu bạn muốn sắp xếp tăng dần (để đánh STT text hay gì đó,...) thì bạn phải sắp xếp lại cái mảng tọa độ đó tăng dần là ok

Thân!


  • 0

#8 dinhvantrang

dinhvantrang

    biết lệnh copy

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

Đã gửi 06 May 2013 - 09:01 AM

Với VBA thì khi bạn chọn đối tượng Selectionset bằng

1.Pick lần lượt các đối tượng: thứ tự sắp xếp theo thứ tự bạn chọn

2.Chọn bằng quét chuột thì: thứ tự sắp xếp theo chiều từ phải qua trái (nghĩa là đối tượng có tọa độ X lớn hơn sẽ được sắp xếp trước.

Nếu bạn muốn sắp xếp tăng dần (để đánh STT text hay gì đó,...) thì bạn phải sắp xếp lại cái mảng tọa độ đó tăng dần là ok

Thân!

Cái này thì tôi không đồng ý với bạn rùi đó,tôi đã từng thử xuất dữ liệu Text sang Excel nhưng ko đúng như những gì bạn nói.Trong VBA thì "hình như" nó sắp xếp theo thời gian tạo đối tượng thì phải.

Nên muốn xuất text đúng thứ tự như trong cad thì chỉ có cách là "Lọc" theo toạ độ để xuất thôi.Mà trong Autocad lại ko có hàm Sort nên chúng ta phải tự tạo cái hàm này thôi.Có thể lọc theo toạ độ Y hoặc X sau đó xuất sang bên Excel.

Thân!


  • 0

Thanks and Best Regards

Skype : dinhvantrang73