CHƯƠNG V: LẬP TRÌNH TRÊN AUTOCAD
3. Tại dòng nhắc “Enter Variable(s) to List”, nhấn ENTER
5.3. Làm việc với đối tượng SelectionSet
5.3.2. Thêm đối tượng hình học vào một SelectionSet
Để thêm đối tượng hình học vào SelectionSet, người dùng có thể sử dụng các phương thức có sẵn trong đối tượng SelectionSet như AddItems hoặc họ phương thức SelectXXX, bao gồm:
Select, SelectAtPoint, SelectOnScreen, SelectByPolygon. Phần dưới đây sẽ lần lượt giới thiệu về các phương thức trên.
Phng thc AddItems
Phương thức này dùng để thêm từng đối tượng vào trong SelectionSet. Cú pháp của phương thức này như sau:
object.AddItems Items
Tham s Gii thch
Object Là đối tượng SelectionSet.
Items Kiểu Variant, là mảng chứa các đối tượng sẽ được thêm vào SelectionSet
Đoạn mã sau sẽ tạo một đối tượng SelectionSet có tên là “MySelectionSet”, sau đó tạo các đối tượng đường đa tuyến, đường thẳng, đường tròn và thêm các đối tượng này vào trong đối tượng SelectionSet.
Sub VD_AddItems()
Dim objs(0 To 2) As AcadEntity ‘Mảng chứa các đối tượng mới được tạo ' Create the new selection set
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
' Tạo đường đa tuyến trong không gian mô hình Dim plineObj As AcadLWPolyline
Dim points(0 To 5) As Double points(0) = 3: points(1) = 7
http://www.ebook.edu.vn points(2) = 9: points(3) = 2
points(4) = 3: points(5) = 5
Set plineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(points) plineObj.Closed = True
Set objs(0) = plineObj ‘Thêm vào mảng các đối tượng ' Tạo đường thẳng trong không gian mô hình
Dim lineObj As AcadLine
Dim startPoint(0 To 2) As Double Dim endPoint(0 To 2) As Double
startPoint(0) = 0: startPoint(1) = 0: startPoint(2) = 0 endPoint(0) = 2: endPoint(1) = 2: endPoint(2) = 0
Set lineObj = ThisDrawing.ModelSpace.AddLine(startPoint, endPoint) Set objs(1) = lineObj ‘Thêm vào mảng các đối tượng
' Tạo đường tròn trong không gian mô hình Dim circObj As AcadCircle
Dim centerPt(0 To 2) As Double Dim radius As Double
centerPt(0) = 20: centerPt(1) = 30: centerPt(2) = 0 radius = 3
Set circObj = ThisDrawing.ModelSpace.AddCircle(centerPt, radius) Set objs(2) = circObj ‘Thêm vào mảng các đối tượng
ZoomAll
' Thêm các đối tượng có trong mảng objs vào đối tượng SelectionSet ssetObj.AddItems objs
ThisDrawing.Regen acAllViewports End Sub
Phng thc Select
Phương thức Select là phương thức cơ bản trong đối tượng SelectionSet. Với phương thức thức này, người dùng sẽ có nhiều lựa chọn khác nhau khi chọn đối tượng tuỳ thuộc vào các tham số của phương thức. Cú pháp của phương thức này như sau:
object.Select Mode[, Point1][, Point2][, FilterType][, FilterData]
Tham s Gii thch
Object Là đối tượng SelectionSet
Mode Tham số xác định chế độ chọn đối tượng.
Point1 Tham số tùy chọn, kiểu Variant (mảng 3 phần tử kiểu Double) chứa toạ độ điểm thứ nhất của cửa sổ lựa chọn, sử dụng kết hợp với Point2
Point2 Tham số tùy chọn, kiểu Variant (mảng 3 phần tử kiểu Double) chứa toạ độ điểm thứ hai của cửa sổ lựa chọn, sử dụng kết hợp với Point1
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 233).
Giá trị của tham số Mode sẽ xác định cách thức lựa chọn đối tượng khi sử dụng phương thức Select. Giá trị của tham số này có thể là một trong những giá trị sau:
Hng s Gi tr ngha
acSelectionSetWindow 0 Chọn tất cả các đối tượng nằm “trong” hình chữ nhật giới hạn bởi hai điểm Point1 và Point2
acSelectionSetCrossing 1 Chọn tất cả các đối tượng nằm “trong” hoặc có giao với hình chữ nhật giới hạn bởi hai điểm Point1 và Point2
acSelectionSetPrevious 3 Chọn các đối tượng đã chọn gần nhất. Bỏ qua hai tham số Point1 và Point2.
acSelectionSetLast 4 Chọn đối tượng cuối cùng được tạo ra. Bỏ qua hai tham số Point1 và Point2.
acSelectionSetAll 5 Chọn tất cả các đối tượng đang có trong bản vẽ. Bỏ qua hai tham số Point1 và Point2.
Ví dụ sau sẽ minh hoạ cách sử dụng phương thức Select với tham số Mode=
acSelectionSetCrossing: Sub VD_Select()
' 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 nằm trong và giao với hình chữ nhật có ' toạ độ (28,17,0) và (-3.3, -3.6,0) vào trong đối tượng
SelectionSet
Dim mode As Integer
Dim corner1(0 To 2) As Double Dim corner2(0 To 2) As Double mode = acSelectionSetCrossing
corner1(0) = 28: corner1(1) = 17: corner1(2) = 0 corner2(0) = -3.3: corner2(1) = -3.6: corner2(2) = 0 ssetObj.Select mode, corner1, corner2
End Sub
Phng thc SelectAtPoint
Phương thức này sẽ chọn các đối tượng đi qua một điểm cho trước để thêm vào SelectionSet.
Cú pháp của phương thức này như sau:
object.SelectAtPoint Point [, FilterType] [, FilterData]
Tham s Gii thch
Object Là đối tượng SelectionSet
Point Kiểu Variant (mảng 3 phần tử kiểu Double), chứa toạ độ điểm dùng để chọn đối tượng.
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 233).
http://www.ebook.edu.vn
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
Phng thc SelectByPolygon
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 quan với đường đa tuyến do người lập trình xác định trước. Cú pháp của phương thức này như sau:
object.SelectByPolygon Mode, PointsList[, FilterType][, FilterData]
Tham s Gii thch
Object Là đối tượng SelectionSet
Mode Tham số xác định chế độ chọn đối tượng.
PointsList Tham số tùy chọn, kiểu Variant (mảng kiểu Double) chứa toạ độ 3 chiều của các đỉnh của đường đa tuyến.
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 233).
Giá trị của tham số Mode sẽ xác định cách thức lựa chọn đối tượng khi sử dụng phương thức SelectByPolygon. Giá trị của tham số này có thể là một trong những giá trị sau:
Hng s Gi tr ngha
acSelectionSetFence 2 Chọn các đối tượng có giao cắt với đường bao đa tuyến có tọa độ các đỉnh xác định bởi PointsList.
acSelectionSetWindowPolygon 6 Chọn các đối tượng nằm hoàn toàn bên trong miền đa giác có tọa độ các đỉnh xác định bởi PointsList.
acSelectionSetCrossingPolygon 7 Chọn các đối tượng nằm hoàn toàn hoặc một phần bên trong miền đa giác có tọa độ các đỉnh xác định bởi PointsList. AutoCAD sẽ tự động vẽ đa giác từ các tọa độ này theo nguyên tắc các cạnh của đa giác không giao nhau.
Minh hoạ dưới đây sẽ làm rõ ý nghĩa các giá trị của tham số Mode. Các đường liền là các đối tượng trên bản vẽ của AutoCAD, còn các đường nét đứt là đường đa tuyến nối các đỉnh được cho bởi tham số PointList.
Hình II-84: 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ứcSelectByPolygonlà rất khác nhau tuỳ thuộc vào giá trị của tham số Mode. Nếu tham sốModecó 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ứcSelectByPolygon 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") Else
ssetObj.Clear End If
' Xác định các đỉnh của đường đa tuyến Dim pointsArray(0 To 11) As Double
pointsArray(0) = 28.2: pointsArray(1) = 17.2: pointsArray(2) = 0 pointsArray(3) = -5: pointsArray(4) = 13: pointsArray(5) = 0 pointsArray(6) = -3.3: pointsArray(7) = -3.6: pointsArray(8) = 0 pointsArray(9) = 28: pointsArray(10) = -3: pointsArray(11) = 0 ' Xác định chế độ chọn đối tượng
Dim mode As Integer
mode = acSelectionSetFence ' Chọn đối tượng
ssetObj.SelectByPolygon mode, pointsArray End Sub
Phng thc SelectOnScreen
Phương thức này sẽ hiển thị dòng nhắc “Select object:” tại dòng lệnh và cho phép người dùng chọn đối tượng trực tiếp trên màn hình bản vẽ, cách thao tác trên màn hình AutoCAD này tương tự như khi sử dụng các lệnh thông thường khác của AutoCAD, mà có yêu cầu lựa chọn
http://www.ebook.edu.vn
object.SelectOnScreen [FilterType] [, FilterData]
Tham s Gii thch
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 233).
Đ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