Hiệu chỉnh đối tượng sử dụng các phương thức

Một phần của tài liệu Tự động hóa thiết kế cầu đường lê quỳnh mai (Trang 243 - 250)

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.4. Hiệu chỉnh đối tượng hình học

5.4.1. Hiệu chỉnh đối tượng sử dụng các phương thức

Sao chép !i t*ng – Phng thc Copy

Sử dụng phương thứcCopyđể 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 Gii thch

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 đốiObject)

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á !i t*ng – Phng thc Delete

Để xoá đối tượng khỏi bản vẽ, sử dụng phương thức Deletecó trong đối tượng đó. Cú pháp của phương thức này rất đơn giản:

object.Delete

http://www.ebook.edu.vn

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^ !i t*ng – Phng thc Explode

Sử dụng phương thứcExplodeđể 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 Gii thch

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ượngObject.

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

Di chuyn !i t*ng – Phng thc Move

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

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 II-85: 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.

http://www.ebook.edu.vn ' Tạo hình tròn trong không gian mô hình

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

' Xác định 2 điểm tạo nên vec-tơ tịnh tiến Dim point1(0 To 2) As Double

Dim point2(0 To 2) As Double

point1(0) = 0: point1(1) = 0: point1(2) = 0 point2(0) = 2: point2(1) = 0: point2(2) = 0 MsgBox "Di chuyển theo trục X 2 đơn vị."

' Thực hiện di chuyển đối tượng circleObj.Move point1, point2 ZoomAll

MsgBox "Quá trình dịch chuyển đã kết thúc."

End Sub

L%y !i xng – Phng thc Mirror

Sử dụng phương thứcMirrorđể lấy đối xứng một đối tượng qua một trục được xác định trước.

Cú pháp của phương thức này như sau:

Set RetVal = object.Mirror(Point1, Point2)

Tham s Gii thch

Object Đối tượng hình học, là đối tượng gốc sẽ được lấy đối xứng.

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 trục đối xứng.

RetVal Tham chiếu đến đối tượng sau khi đã được lấy đối xứng

Hình II-86: Minh hoạ cho phương thức Mirror.

Khi sử dụng phương thứcMirror, cần lưu ý đến giá trị của biến hệ thống MIRRTEXT. Biến này sẽ điều khiển cách thức lấy đối xứng với đối tượng văn bản:

Trước khi lấy đối xứng Sau khi lấy đối xứng Sau khi lấy đối xứng

(MIRRTEXT=1) (MIRRTEXT=0) Hình II-87: Biến hệ thống MIRRTEXT và phương thức Mirror

Ví dụ sau sẽ tạo một đường đa tuyến, sau đó lấy đối xứng qua trục y=4.25 và đổi màu đối tượng vừa mới được lấy đối xứng thành màu đỏ:

Sub VD_Mirror()

' Tạo đường đa tuyến

Dim plineObj As AcadLWPolyline Dim points(0 To 11) As Double points(0) = 1: points(1) = 1 points(2) = 1: points(3) = 2 points(4) = 2: points(5) = 2 points(6) = 3: points(7) = 2 points(8) = 4: points(9) = 4 points(10) = 4: points(11) = 1

Set plineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(points) plineObj.Closed = True

ZoomAll

' Xác định trục đối xứng Dim point1(0 To 2) As Double Dim point2(0 To 2) As Double

point1(0) = 0: point1(1) = 4.25: point1(2) = 0 point2(0) = 4: point2(1) = 4.25: point2(2) = 0 MsgBox "Lấy đối xứng đường đa tuyến.", , "VD Mirror"

' Thực hiện lấy đối xứng đường đa tuyến Dim mirrorObj As AcadLWPolyline

Set mirrorObj = plineObj.Mirror(point1, point2) mirrorObj.Color = acRed

ZoomAll

MsgBox "Mirror completed.", , " VD Mirror"

End Sub

L%y Off-set – Phng thc Offset

Phương thức Offset sẽ tạo ra một đối tượng mới với đường biên nằm cách đường biên của đối tượng cũ một khoảng được xác định trước. Phương thức này có thể được áp dụng với các đối tượng như: Arc, Circle, Ellipse, Line, LightweightPolyline, Polyline, Spline, và Xline. Phương thức này sẽ trả về mảng chứa các đối tượng vừa mới được tạo. Tuy nhiên, thông thường mảng này chỉ chứa một đối tượng. Cú pháp của phương thức này như sau:

Set RetVal = object.Offset(Distance)

Tham s Gii thch

Object Là đối tượng gốc sẽ được lấy Off-set.

Distance Tham số đầu vào, kiểu Double, là khoảng cách lấy off-set. Giá trị của tham số này có thể là số âm hoặc dương. Nếu là số âm thì phương thức này sẽ tạo ra những đối tượng có xu hướng “bán kính nhỏ hơn” đối tượng gốc, trong trường hợp “bán kính nhỏ hơn” không có ý nghĩa thì phương thức này sẽ tạo ra đối tượng có toạ độ

http://www.ebook.edu.vn

RetVal Biến kiểu Variant, là mảng chứa các đối tượng mới được tạo ra. Thông thường, mảng này chỉ có một đối tượng.

Ví dụ sau sẽ tạo một đường đa tuyến trong không gian mô hình và lấy off-set đối tượng này một khoảng là 0,25. Đối tượng vừa mới được tạo ra sẽ được đổi màu thành màu đỏ.

Sub VD_Offset()

' Tạo đường đa tuyến

Dim plineObj As AcadLWPolyline Dim points(0 To 11) As Double points(0) = 1: points(1) = 1 points(2) = 1: points(3) = 2 points(4) = 2: points(5) = 2 points(6) = 3: points(7) = 2 points(8) = 4: points(9) = 4 points(10) = 4: points(11) = 1

Set plineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(points) plineObj.Closed = True

ZoomAll

MsgBox "Off-set đa tuyến với khoảng cách 0.25.", , "Ví dụ Offset"

' Lấy Off-set đường đa tuyến Dim offsetObj As Variant

offsetObj = plineObj.Offset(0.25) offsetObj(0).Color = acRed

ZoomAll End Sub

Xoay !i t*ng – Phng thc Rotate

Sử dụng phương thức Rotate để xoay một đối tượng quanh một điểm cố định. Cú pháp của phương thức này như sau:

object.Rotate BasePoint, RotationAngle

Tham s Gii thch

Object Là đối tượng sẽ được xoay.

BasePoint Là mảng 3 phần tử kiểu Double chứa toạ độ điểm gốc, đối tượng sẽ được quay quanh điểm này.

RotationAngle Là tham số kiểu Double, xác định góc xoay đối tượng (tính bằng Radian).

Đoạn mã sau sẽ minh hoạ cách thức sử dụng phương thứcRotate: Sub VD_Rotate()

' Tạo đường đa tuyến

Dim plineObj As AcadLWPolyline Dim points(0 To 11) As Double points(0) = 1: points(1) = 2 points(2) = 1: points(3) = 3 points(4) = 2: points(5) = 3

points(6) = 3: points(7) = 3 points(8) = 4: points(9) = 4 points(10) = 4: points(11) = 2

Set plineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(points) plineObj.Closed = True

ZoomAll

MsgBox "Xoay góc 45 độ.", , "VD Rotate "

' Định góc xoay và toạ độ điểm cơ sở Dim basePoint(0 To 2) As Double Dim rotationAngle As Double

basePoint(0) = 4: basePoint(1) = 4.25: basePoint(2) = 0 rotationAngle = 45/180*3.1416 ' 45 độ

' Xoay đối tượng

plineObj.Rotate basePoint, rotationAngle ZoomAll

End Sub

Thay 'i t` l !i t*ng – Phng thc ScaleEntity

Sử dụng phương thức ScaleEntityđể thay đổi tỷ lệ đối tượng đồng đều theo các phương X, Y và Z. Cú pháp của phương thức này như sau:

object.ScaleEntity BasePoint, ScaleFactor

Tham s Gii thch

Object Là đối tượng sẽ được thay đổi tỷ lệ.

BasePoint Mảng 3 phần tử kiểu Double chứa toạ độ điểm gốc, đối tượng sẽ được thay đổi tỷ lệ theo các phương X, Y và Z quanh điểm này quay quanh điểm này.

ScaleFactor Tham số kiểu Double, xác định hệ số tỷ lệ khi thay đổi tỷ lệ. Kích thước của đối tượng sẽ được nhân với hệ số tỷ lệ này. Tham số ScaleFactor chỉ nhận giá trị lớn hơn không, nếu nhỏ hơn hoặc bằng không thì VBAIDE sẽ báo lỗi. Giá trị ScaleFactor<1 sẽ thu nhỏ đối tượng, ngược lại sẽ phóng to đối tượng lên.

!i t*ng vi v< trí và kích thc mi

!i t*ng vi v< trí và kích thc ban ju

http://www.ebook.edu.vn

Đoạn mã sau tạo một đường đa tuyến trong không gian mô hình và sử dụng phương thức ScaleEntityđể thay đổi tỷ lệ của đường đa tuyến đó quanh điểm(4 , 4.25 , 0) với hệ số tỷ lệ là 0.5

Sub VD_ScaleEntity() ' Tạo đường đa tuyến

Dim plineObj As AcadLWPolyline Dim points(0 To 11) As Double points(0) = 1: points(1) = 2 points(2) = 1: points(3) = 3 points(4) = 2: points(5) = 3 points(6) = 3: points(7) = 3 points(8) = 4: points(9) = 4 points(10) = 4: points(11) = 2

Set plineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(points) plineObj.Closed = True

ZoomAll

MsgBox "Thay đổi tỷ lệ với hệ số 0.5", , "Ví dụ ScaleEntity"

' Xác định các tham tham số của phương thức Dim basePoint(0 To 2) As Double

Dim scalefactor As Double

basePoint(0) = 4: basePoint(1) = 4.25: basePoint(2) = 0 scalefactor = 0.5

' Thay đổi tỷ lệ đường đa tuyến

plineObj.ScaleEntity basePoint, scalefactor ZoomAll

End Sub

Một phần của tài liệu Tự động hóa thiết kế cầu đường lê quỳnh mai (Trang 243 - 250)

Tải bản đầy đủ (PDF)

(434 trang)