C
C
H
H
Ư
Ư
Ơ
Ơ
N
N
G
G
V
V
:
:
L
L
Ậ
Ậ
P
P
T
T
R
A
D
D
233
Ví dụ sau thêm tất cả các đối tượng đi qua điểm (6.8 , 9.4 , 0) vào đối tượng SelectionSet có tên
là “MySelectionSet”:
Sub VD_SelectAtPoint()
' Tạo đối tượng SelectionSet
Dim ssetObj As AcadSelectionSet
On Error Resume Next
Set ssetObj = ThisDrawing.SelectionSets("MySelectionSet")
If Err <> 0 Then
Err.Clear
Set ssetObj = ThisDrawing.SelectionSets.Add("MySelectionSet")
Else
ssetObj.Clear
End If
' Thêm tất cả các đối tượng qua điểm (6.8,9.4,0)
' vào đối tượng SelectionSet
Dim point(0 To 2) As Double
point(0) = 6.8: point(1) = 9.4: point(2) = 0
ssetObj.SelectAtPoint point
End Sub
PhươngthứcSelectByPolygon
Phương thức này thực hiện chọn các đối tượng để thêm vào SelectionSet dựa trên mối tương
PointList.
Hình V-10: Minh hoạ các chế độ chọn đối tượng của phương thức SelectByPolygon.
Kết quả của phương thức SelectByPolygon là rất khác nhau tuỳ thuộc vào giá trị của tham số
Mode. Nếu tham số Mode có giá trị là:
Ø
ØacSelectionSetFence: đối tượng được chọn là hình ellipese.
Ø
ØacSelectionSetWindowPolygon: đối tượng được chọn là hình chữ nhật và hình tròn.
Ø
ØacSelectionSetCrossingPolygon: đối tượng được chọn là tất cả các hình trên.
Đoạn mã sau sẽ minh hoạ cách thức sử dụng phương thức
SelectByPolygon
Sub VD_SelectByPolygon()
' Tạo đối tượng SelectionSet
Dim ssetObj As AcadSelectionSet
On Error Resume Next
Set ssetObj = ThisDrawing.SelectionSets("MySelectionSet")
If Err <> 0 Then
Err.Clear
Set ssetObj = ThisDrawing.SelectionSets.Add("MySelectionSet")
N
N
G
G
V
V
:
:
L
L
Ậ
Ậ
P
P
T
T
R
R
Ì
Ì
N
N
H
H
object.SelectOnScreen [FilterType] [, FilterData]
Tham số Giải thích
Object Là đối tượng SelectionSet
FilterType,
FilterData
Tham số tuỳ chọn, xác định bộ lọc đối tượng (Chi tiết tham khảo phần “Định nghĩa
bộ lọc đối tượng cho SelectionSet” trang 236).
Đoạn mã sau sẽ minh hoạ cách thức sử dụng phương thức SelectOnScreen:
Sub VD_SelectOnScreen()
' Tạo đối tượng SelectionSet
Dim ssetObj As AcadSelectionSet
On Error Resume Next
Set ssetObj = ThisDrawing.SelectionSets("MySelectionSet")
If Err <> 0 Then
Err.Clear
Set ssetObj = ThisDrawing.SelectionSets.Add("MySelectionSet")
Else
ssetObj.Clear
End If
' Hiển thị thêm dòng nhắc tại dòng lệnh
ThisDrawing.Utility.Prompt vbCrLf & "Chon doi tuong tren man hinh:"
' Chọn đối tượng trên màn hình
ssetObj.SelectOnScreen
End Sub
5.3.3. Thao tác với các đối tượng trong SelectionSet
Như phần trước đã trình bày, thực chất đối tượng SelectionSet là một tập đối tượng dùng để
nhóm các đối tượng hình học lại với nhau nhằm mục đích hiệu chỉnh các đối tượng hình học đó
dễ dàng hơn. Do bản thân là một tập đối tượng nên cách thức truy cập đến tất cả các đối tượng
ent.Update
Next ent
End Sub
5.3.4. Định nghĩa bộ lọc đối tượng cho SelectionSet
Trong tất cả các phương thức chọn đối tượng dạng
SelectXXX đều có hai tham số tuỳ chọn
FilterType và FilterData, là tham số được sử dụng để lọc các đối tượng được chọn theo
một tiêu chí nào đó. Các tiêu chí thường được sử dụng bao gồm: loại đối tượng (đường thẳng,
đường tròn ), màu sắc, kiểu đường nét, lớp Khi sử dụng bộ lọc đối tượng, chỉ có những đối
tượng thoả mãn các tiêu chí trong bộ lọc mới được chọn để thêm vào đối tượng SelectionSet.
Để thiết lập b
ộ lọc đối tượng, hai tham số FilterType và FilterData cần phải được sử dụng
song hành:
Ø
ØFilterType: là tham số kiểu Variant, thực chất là một mảng một chiều kiểu Integer chứa
mã DXF xác định kiểu lọc đối tượng.
Ø
ØFilterData: là tham số kiểu Variant, thực chất là một mảng một chiều kiểu Variant
chứa giá trị của kiểu lọc tương ứng trong tham số FilterType. Do có mối quan hệ 1-1 như
vậy nên số phần tử của mảng FilterData phải bằng với số phần tử của mảng FilterType.
Tuỳ theo nhu cầu mà người lập trình phải chọn cho mình một tiêu chí lọc đối tượng thích hợp.
Dưới đây sẽ li
ệt kê danh sách các mã DXF tương ứng với một số kiểu lọc đối tượng thường sử
dụng:
N
G
G
V
V
:
:
L
L
Ậ
Ậ
P
P
T
T
R
R
Ì
Ì
N
N
H
H
Khi thực hiện lọc theo một điều kiện, số phần tử của các tham số FilterType và FilterData
là 1. Tuy nhiên, người lập trình không được gán giá trị trực tiếp mà vẫn phải thực hiện khai báo
các tham số này là mảng nhưng chỉ có một phần tử. Ví dụ sau sẽ minh hoạ rõ hơn cách thức tạo
bộ lọc đối tượng với chỉ một điều kiện:
Sub VD_Filter()
' Tạo đối tượng SelectionSet
Dim ssetObj As AcadSelectionSet
On Error Resume Next
Set ssetObj = ThisDrawing.SelectionSets("SSET")
ssetObj.Delete
Set ssetObj = ThisDrawing.SelectionSets.Add("SSET")
' Tạo bộ lọc đối tượng:
' Tiêu chí chọn là: Kiểu đổi tượng
' Giá trị của tiêu chí là: “Circle”
' nghĩa là chỉ chọn đối tượng là đường tròn.
Dim gpCode(0) As Integer
Dim dataValue(0) As Variant
gpCode(0) = 0: dataValue(0) = "Circle"
ssetObj.SelectOnScreen gpCode, dataValue
MsgBox "So doi tuong duoc chon: " & ssetObj.Count
End Sub
Lọctheonhiềuđiềukiệnkếthợp
Khi cần lọc đối tượng theo nhiều điều kiện kết hợp, cần phải thêm vào các toán tử điều kiện
trong bộ lọc. Để kết hợp các điều kiện với nhau, các điều kiện phải được đặt giữa các toán tử
điều kiện, mã DXF chung củ
a các toán tử điều kiện là -4. Dưới đây là danh sách các toán tử
điều kiện được sử dụng trong bộ lọc đối tượng:
Toán
Set ssetObj = ThisDrawing.SelectionSets.Add("SSET")