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

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

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

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

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

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

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

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

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

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.

  • 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

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!

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

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!

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  

×