238
' Tạo bộ lọc đối tượng:
Dim gpCode(8) As Integer
Dim dataValue(8) As Variant
gpCode(0) = -4: dataValue(0) = "<and"
gpCode(1) = -4: dataValue(1) = "<or"
gpCode(2) = 0: dataValue(2) = "line"
gpCode(3) = 0: dataValue(3) = "circle"
gpCode(4) = -4: dataValue(4) = "or>"
gpCode(5) = -4: dataValue(5) = "<not"
gpCode(6) = 8: dataValue(6) = "Layer1"
gpCode(7) = -4: dataValue(7) = "not>"
gpCode(8) = -4: dataValue(8) = "and>"
ssetObj.SelectOnScreen gpCode, dataValue
MsgBox "So doi tuong duoc chon: " & ssetObj.Count
End Sub
5.3.5. Loại bỏ đối tượng hình học ra khỏi SelectionSet
Khi muốn loại bỏ các đối tượng ra khỏi SelectionSet (tức là không muốn chọn đối tượng nữa),
thì có thể sử dụng các phương thức sau của đối tượng SelectionSet.
PhươngthứcRemoveItems
Phương thức này thực hiện loại bỏ một hoặc nhiều đối tượng ra khỏi SelectionSet. Các đối
tượng này sẽ không nằm trong SelectionSet n
ữa nhưng vẫn còn tồn tại trong bản vẽ. Cú pháp
của phương thức này như sau:
object.RemoveItems Objects
Tham số Giải thích
Object Là đối tượng SelectionSet
Objects Tham số kiểu Variant (mảng các đối tượng) chứa các đối tượng cần loại bỏ ra khỏi
SelectionSet.
PhươngthứcClear
Phương thức
Clear sẽ loại bỏ tất cả các đối tượng ra khỏi SelectionSet. Sau khi thực hiện
phương thức này, đối tượng SelectionSet vẫn còn tồn tại nhưng không chứa đối tượng nào cả.
Các đối tượng hình học nằm trong SelectionSet lúc trước vẫn tồn tại trên bản vẽ nhưng không
nằm trong đối tượng SelectionSet nữa. Cú pháp của phương thức này như sau:
object.Clear
Trong đó, object là đối tượng SelectionSet.
PhươngthứcErase
Phương thức
Erase không những loại bỏ tất cả các đối tượng hình học ra khỏi SelectionSet mà
còn thực hiện xoá các đối tượng đó khỏi bản vẽ. Sau khi thực hiện phương thức này, đối tượng
C
C
H
H
Ư
Ư
Ơ
Ơ
N
N
G
G
V
V
:
:
L
L
Ậ
Ậ
P
P
T
T
R
R
Ì
Ì
N
N
H
H
T
T
R
R
Ê
Ê
N
N
A
A
U
U
T
T
O
O
C
C
A
A
D
D
239
SelectionSet vẫn còn tồn tại nhưng không chứa đối tượng nào cả. Cú pháp của phương thức này
như sau:
object.Erase
Trong đó, object là đối tượng SelectionSet.
PhươngthứcDelete
Phương thức
Delete sẽ xoá đối tượng SelectionSet. Sau khi thực hiện phương thức này, đối
tượng SelectionSet sẽ không còn tồn tại trên bản vẽ, tuy nhiên các đối tượng hình học có trong
SelectionSet lúc trước sẽ không bị xoá khỏi bản vẽ. Cú pháp của phương thức này như sau:
object.Delete
Trong đó, object là đối tượng SelectionSet.
5.4. Hiệu chỉnh đối tượng hình học
Hiệu chỉnh đối tượng hình học là một thao tác không thể thiếu trong quá trình tạo bản vẽ với
AutoCAD. Thông qua VBA trong AutoCAD, người dùng có thể thực hiện hầu hết các thao tác
hiệu chỉnh đối tượng giống như khi thực hiện trên giao diện của chương trình AutoCAD.
Việc hiệu chỉnh đối tượng có thể được thực hiện thông qua các phương thức hoặc các thuộc
tính của đối tượng:
Ø
Ø
Phươ
ng thức thường dùng để thay đổi về hình dạng, kích thước, vị trí của đối tượng, hoặc
thậm chí có thể tạo mới đối tượng dựa trên đối tượng đã có. Thông thường, mỗi phương
thức đều có những tham số riêng.
Ø
Ø
Thuộc tính thường dùng để thay đổi các tính chất liên quan đến hiển thị của chính đối
tượng đó trên màn hình hoặc khi in, chẳng hạn như màu sắc, ki
ểu đường, nét,…
Các đối tượng hình học trong AutoCAD, dù có khác nhau, nhưng đều được xây dựng dựa trên
một giao tiếp cơ sở trong VBA: IAcadEntity. Chính vì vậy, tất cả các đối tượng hình học đều
có những phương thức và thuộc tính chung. Bên cạnh đó, mỗi đối tượng này còn có những
phương thức và thuộc tính riêng, chẳng hạn như phương thức
AddVertex của đối tượng
LWPolyline, hay thuộc tính Radius của đối tượng Circle,…
Do có những khác biệt như vậy nên trong phần này, trước hết sẽ giới thiệu cách thức để hiệu
chỉnh chung cho tất cả các đối tượng hình học bao gồm:
Ø
Ø
Sao chép, xoá, phá vỡ, di chuyển, lấy đối xứng, off-set, quay và co giãn đối tượng;
Ø
Ø
Thực hiện nhân bản đối tượng dạng cực và dạng chữ nhật;
Ø
Ø
Thao tác với dữ liệu mở rộ
ng - XData;
Ø
Ø
Thay đổi màu sắc, lớp, kiểu đường và sự hiển thị của đối tượng.
Và tiếp đó sẽ trình bày một số thao tác hiệu chỉnh đối tượng theo các phương thức và thuộc tính
riêng của đối tượng:
Ø
Ø
Hiệu chỉnh đường đa tuyến;
Ø
Ø
Hiệu chỉnh văn bản đơn.
Trong các phiên bản trước AutoCAD 2006, mỗi khi hiệu chỉnh
đối tượng bằng mã lệnh, những
thay đổi đó sẽ chưa được hiển thị trên màn hình cho đến khi người dùng gọi phương thức
Update của đối tượng đó, hoặc gọi phương thức Update của đối tượng Application, hoặc
240
phương thức Regen của đối tượng Document. Trong một số trường hợp, AutoCAD sẽ tự động
cập nhật khi kết thúc chương trình, tuy nhiên, để thấy được kết quả hiệu chỉnh ngay sau mỗi
dòng mã lệnh hiệu chỉnh thì cách tốt nhất là nên bổ sung các đoạn mã lệnh cập nhật những thay
đổi đó.
CHÚ Ý Để cập nhật những thay đổi đối với đối tượng thông qua mã lệnh, người dùng có
thể sử dụng phương thức Update của chính đối tượng đó theo cấu trúc:
tên_đối_tượng.Update.
5.4.1. Hiệu chỉnh đối tượng sử dụng các phương thức
Saochépđốitượng–PhươngthứcCopy
Sử dụng phương thức
Copy để sao chép đối tượng. Đối tượng mới được tạo ra sẽ giống hệt như
đối tượng cũ, có vị trí trùng với đối tượng cũ, chỉ có điều là đối tượng mới sẽ được vẽ ở trên
cùng. Cú pháp của phương thức này như sau:
Set RetVal = object.Copy
Tham số Giải thích
Object Đối tượng hình học, là đối tượng gốc sẽ được sao chép
RetVal Đối tượng hình học, tham chiếu đến đối tượng vừa mới được tạo (là bản sao của
đối Object)
CHÚ Ý Phương thức Copy chỉ sao chép đối tượng. Đối tượng mới được sao chép sẽ có vị
trí trùng với đối tượng cũ.
Ví dụ sau tạo một hình tròn sau đó thực hiện sao chép hình tròn đó. Cần lưu ý là sau khi thực
thi macro này, ta chỉ nhìn thấy trên màn hình bản vẽ một hình tròn nhưng thực chất là đã có hai
hình tròn với vị trí trùng nhau.
Sub VD_Copy()
' Tạo hình tròn
Dim circleObj As AcadCircle
Dim center(0 To 2) As Double
Dim radius As Double
center(0) = 2#: center(1) = 2#: center(2) = 0#
radius = 0.5
Set circleObj = ThisDrawing.ModelSpace.AddCircle(center, radius)
' Sao chép đối tượng
Dim copyCircleObj As AcadCircle
Set copyCircleObj = circleObj.Copy()
End Sub
Xoáđốitượng–PhươngthứcDelete
Để xoá đối tượng khỏi bản vẽ, sử dụng phương thức
Delete có trong đối tượng đó. Cú pháp
của phương thức này rất đơn giản:
object.Delete
C
C
H
H
Ư
Ư
Ơ
Ơ
N
N
G
G
V
V
:
:
L
L
Ậ
Ậ
P
P
T
T
R
R
Ì
Ì
N
N
H
H
T
T
R
R
Ê
Ê
N
N
A
A
U
U
T
T
O
O
C
C
A
A
D
D
241
Ví dụ sau sẽ minh hoạ cách sử dụng phương thức này. Trong ví dụ này, người sử dụng sẽ chọn
một đối tượng trên màn hình, và sau đó đối tượng này sẽ được xoá khỏi bản vẽ:
Sub DeleteObject()
Dim objDrawingObject As AcadEntity
Dim varEntityPickedPoint As Variant
On Error Resume Next
' Chọn đối tượng trên màn hình bản vẽ
ThisDrawing.Utility.GetEntity _
objDrawingObject, varEntityPickedPoint, "Chọn đối tượng để xoá: "
If objDrawingObject Is Nothing Then
MsgBox "Bạn chưa chọn đối tượng."
Exit Sub
End If
' Xoá đối tượng được chọn
objDrawingObject.Delete
End Sub
Phávỡđốitượng–PhươngthứcExplode
Sử dụng phương thức
Explode để phá vỡ một đối tượng thành các đối tượng con. Phương thức
này trả về một mảng tham chiếu đến các đối tượng con, là các đối tượng đã cấu thành nên đối
tượng gốc. Cú pháp của phương thức này như sau:
Set RetVal = object.Explode
Tham số Giải thích
Object Đối tượng sẽ bị phá vỡ. Đối tượng này có thể là: 3DPolyline, BlockRef,
LightweightPolyline, MInsertBlock, Polygonmesh, Polyline hoặc Region
RetVal Mảng tham chiếu đến các đối tượng con cấu thành nên đối tượng Object.
Giá trị trả về của phương thức này là một mảng đối tượng với nhiều loại đối tượng khác nhau
tuỳ thuộc vào loại đối tượng gốc. Chẳng hạn như khi phá vỡ một khối (đối tượng Block) thì kết
quả trả về là các đối tượng cấu thành khối đó, hoặc khi phá vỡ một đường đa tuyến thì mảng
đối tượng trả về là các
đoạn thẳng của đường đa tuyến đó. Do giá trị trả về khác nhau như vậy
nên khi khai báo mảng chứa giá trị trả về, nên sử dụng biến kiểu Variant.
Không giống như lệnh
Explode trong AutoCAD, phương thức Explode không làm mất đối
tượng gốc. Khi thực hiện phương thức này, một bản sao của đối tượng gốc sẽ được tạo ra, và
sau đó, phương thức
Explode mới thực hiện phá vỡ trên bản sao đó của đối tượng.
CHÚ Ý Phương thức Explode không thực hiện phá vỡ trên đối tượng gốc mà là trên bản
sao của đối tượng gốc, vì vậy đối tượng gốc vẫn còn được giữ nguyên.
Ví dụ sau sẽ tạo ra một đường đa tuyến 2D và thực hiện phá vỡ đối tượng đó, sau đó sẽ duyệt
qua các đối tượng thành phần sau khi đã được phá vỡ.
Sub VD_Explode()
Dim plineObj As AcadLWPolyline
Dim points(0 To 11) As Double
' Định nghĩa các điểm của đường đa tuyến
points(0) = 1: points(1) = 1
points(2) = 1: points(3) = 2
242
points(4) = 2: points(5) = 2
points(6) = 3: points(7) = 2
points(8) = 4: points(9) = 4
points(10) = 4: points(11) = 1
' Tạo đối tượng LWPolyline trong không gian mô hình
Set plineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(points)
' Phá vỡ đường đa tuyến
MsgBox "Phá vỡ đường đa tuyến."
Dim explodedObjects As Variant
explodedObjects = plineObj.Explode
' Duyệt qua các đối tượng thành phần
Dim I As Integer
For I = 0 To UBound(explodedObjects)
explodedObjects(I).Color = acRed
explodedObjects(I).Update
MsgBox "Đối tượng thứ " & I & ": " & explodedObjects(I).ObjectName
explodedObjects(I).Color = acByLayer
explodedObjects(I).Update
Next
End Sub
Dichuyểnđốitượng–PhươngthứcMove
Sử dụng phương thức
Move để tịnh tiến đối tượng trong không gian ba chiều. Cú pháp của
phương thức này như sau:
object.Move Point1, Point2
Tham số Giải thích
Object Đối tượng hình học, là đối tượng sẽ bị di chuyển.
Point1, Point2 Tham số đầu vào, là mảng 3 phần tử kiểu Double chứa toạ độ của điểm thứ nhất
và thứ hai của vector tịnh tiến.
Hình V-11: Minh hoạ phương thức Move
Ví dụ sau sẽ minh hoạ cách thức sử dụng phương thức Move để dịch chuyển một đối tượng.
Macro này sẽ tạo một đường tròn, sau đó dịch chuyển đường tròn này 2 đơn vị theo trục X.
Sub VD_Move()
' Tạo hình tròn trong không gian mô hình