1. Trang chủ
  2. » Luận Văn - Báo Cáo

VBA

7 14 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 7
Dung lượng 598,16 KB

Nội dung

[r]

(1)

T

THHIITT KK ĐĐƯƯNNGG ĐĐII DDOO T

TRROONNGG VVƯƯNN -- MMTT VVÍÍ DD

V

V AAccttiivveeXX//VVBBAA

13

Trong chương này

ƒ Kiểm tra môi trường làm việc

ƒ Xác định mục đích ƒ Viết đoạn chương trình

đầu tiên ƒ Nhập số liệu ƒ Vẽđường dạo ƒ Vẽ lớp gạch lát ƒ Tổng hợp lại ƒ Duyệt mã lệnh ƒ Thực thi Macro

ƒ Thêm giao diện hộp thoại Đây phần hướng dẫn người đọc cách thêm

(2)

1 Kim tra môi trường làm vic

Để thực thao tác cần thiết ví dụ này, trước hết cần cài đặt môi trường VBA AutoCAD Khi cài AutoCAD với tuỳ chọn Full Standard mơi trường VBA tựđộng cài đặt, chọn Custom VBA khơng cài đặt

Kiểm tra việc cài đặt VBA: 1 Khởi động AutoCAD

2 Tại dòng nhập lệnh, gõ VBAIDE

3 Nếu mơi trường lập trình VBA mở VBA cài đặt Nếu xuất thông báo “AutoCAD VBA is not currently installed” VBA chưa cài đặt

Cài đặt mơi trường VBA:

1 Thốt khỏi chương trình AutoCAD

2 Chạy chương trình cài đặt AutoCAD setup.exe

3 Chọn Add để thêm thành phần vào cài đặt

4 Chọn VBA Support

5 Chọn Next để tiếp tục cài đặt

6 Khẳng định cài đặt cách chọn Next lần

7 Khi hồn thành việc cài đặt khởi động lại chương trình AutoCAD

8 Tại dịng nhập lệnh, nhập VBAIDE Mơi trường lập trình VBA sẽđược mở môi trường làm việc để thực ví dụ chương sẵn sàng

2 Xác định mc đích

Mục tiêu ví dụ lập Marco cho AutoCAD để vẽ đường vườn lát viên bêtơng trịn Marco có dịng nhắc theo trình tự sau:

Command: gardenpath

Start point of path: Người dùng điểm đầu tuyến đường Endpoint of path: Người dùng điểm kết thúc tuyến đường Half width of path: Người dùng nhập vào giá trị nửa bề rộng Radius of tiles: Người dùng nhập vào giá trị bán kính gạch lát

(3)

3 Viết đon chương trình đầu tiên

Macro sẽđược xây dựng dựa loạt hàm thủ tục Một số thủ tục làm việc với góc lý đơn vị góc ActiveX radians hầu hết người dùng thường quen làm việc với góc tính theo độ Do đó, trước hết cần xây dựng hàm chuyển đổi từđộ sang radians Nếu chưa mở VBA IDE khởi động từ lệnh VBAIDE

Trong VBA IDE, mở cửa sổ Code sau: menu View ˜ Code; dùng phím F7

Hàm chuyển đổi từđộ sang radians

Gõ đoạn mã sau vào cửa sổ Code sau dòng Option Explicit: Const pi = 3.14159

’ Chuyển đổi từ độ sang radians Function dtr(a As Double) As Double

dtr = (a / 180) * pi End Function

Ngay xuống dòng để kết thúc dòng lệnh Function dtr(a As Double) As Double, VBA tự động thêm dịng lệnh End Function Mơi trường lập trình VBA ln để đảm bảo tất chương trình có lệnh kết thúc tương ứng

Ở dịng đầu tiên, số pi gán giá trị 3.14159 Điều cho phép thay việc gõ lại số 3.14159 cần dùng cách nhập pi

Dịng đểđịnh nghĩa hàm có tên dtr (Degrees To Radians) Hàm số cần đối sốa góc theo đơn vịđộ Kết tính cách chia góc a cho 180 nhân với pi Dòng bắt đầu dấu nháy đơn câu thích VBA bỏ qua tất dịng bắt đầu ký tự

Hàm có thểđược sử dụng chương trình khác dự án Sau lưu dự án với tên tuỳ chọn theo trình tự chọn: menu File ˜ Save, nhiên để tiện dùng, ví dụ đặt tên cho dự án gardenpath.dvb

Tính khoảng cách hai điểm

Tiếp theo thêm hàm tính khoảng cách hai điểm Nhập đoạn mã sau hàm dtr:

’Tính khoảng cách hai điểm

Function distance(sp As Variant, ep As Variant)As Double Dim x As Double

Dim y As Double Dim z As Double x = sp(0) - ep(0) y = sp(1) - ep(1) z = sp(2) - ep(2)

distance = Sqr((Sqr((x ^ 2) + (y ^ 2)) ^ 2) + (z ^ 2)) End Function

(4)

4 Nhp s liu

Macro nhắc nhở người dùng nhập vị trí để vẽ đường đi, bề rộng đường, khoảng cách viên gạch lát Cho nên sẽđịnh nghĩa thủ tục để yêu cầu người dùng nhập vào thông tin yêu cầu sau thực tính tốn

Trong thủ tục này, sử dụng phương thức nhập số liệu đối tượng Utility 4.1 Khai báo biến

Thủ tục sử dụng số biến toàn cục Tất biến toàn cục cần khai báo trước thủ tục sử dụng chúng

Khai báo biến toàn cục

Trong VBA IDE, nhập đoạn mã lệnh sau cửa sổ Code dòng lệnh

Const pi = 3.14159:

’ Các biến để lưu thông số đường vườn Private sp(0 To 2) As Double

Private ep(0 To 2) As Double Private hwidth As Double Private trad As Double Private tspac As Double Private pangle As Double Private plength As Double Private totalwidth As Double Private angp90 As Double Private angm90 As Double

Hai hộp danh sách dạng thả xuống phía cửa sổ Code gọi tương ứng Object Box (hộp chứa danh sách đối tượng) Procedure/Event Box (hộp danh sách chứa thủ tục kiện) Hiện tại, giá trị hai hộp danh sách General Declarations Hai hộp danh sách cho biết phần dự án mà trỏ dừng lại phần nào: cụ thể đối tượng thủ tục hay kiện đối tượng Phần Declarations tương ứng với phần khai báo biến sử dụng nhiều chương trình Để chuyển sang làm việc với đối tượng khác kiện khác đối tượng, thực nhanh chóng cách lựa chọn tên tương ứng hai hộp danh sách

Chú ý đến dòng Option Explicitnằm phần Declaration Khi dòng xuất mô-đun tức biến phải khai báo rõ ràng lệnh Dim, Private, Public, ReDim, Static Các trường hợp sử dụng biến chưa khai báo phát sinh thơng báo lỗi Nếu khơng sử dụng dòng lệnh Option Explicit, tất biến mà chưa khai báo mang kiểu Variant Người lập trình nên sử dụng dịng lệnh để tránh lỗi cú pháp nhập tên biến có tránh nhầm lẫn phạm vi biến không khai báo rõ ràng

4.2 To chương trình gpuser

(5)

Nhắc người dùng nhập số liệu:

Viết đoạn mã sau hàm distance: ’ Thông tin cần thiết đường Private Sub gpuser()

Dim varRet As Variant

varRet = ThisDrawing.Utility.GetPoint( ,_ "Start point of path: ")

sp(0) = varRet(0) sp(1) = varRet(1) sp(2) = varRet(2)

varRet = ThisDrawing.Utility.GetPoint( ,_ "Endpoint of path: ")

ep(0) = varRet(0) ep(1) = varRet(1) ep(2) = varRet(2)

hwidth = ThisDrawing.Utility.GetDistance(sp, _ "Half width of path: ")

trad = ThisDrawing.Utility.GetDistance(sp, _ "Radius of tiles: ")

tspac = ThisDrawing.Utility.GetDistance(sp, _ "Spacing between tiles: ")

pangle = ThisDrawing.Utility.AngleFromXAxis(sp, ep) totalwidth = * hwidth

plength = distance(sp, ep) angp90 = pangle + dtr(90) angm90 = pangle - dtr(90) End Sub

Đoạn mã lệnh định nghĩa chương trình có tên gpuser Chương trình khơng có tham số yêu cầu người dùng nhập tất thông tin cần thiết

Dòng lệnh Dim varRet As Variantthực khai báo biến varRet Vì biến sử dụng phạm vi chương trình nên cần khai báo cục phạm vi thay khai báo phần Declarations

Dịng lệnh varRet = ThisDrawing.Utility.GetPoint( , "Start point of path: ") thực gọi phương thức GetPoint Dấu gạch ngang để nối dịng lệnh với dịng nó, VBA sẽđọc hai dịng dịng lệnh Dấu gạch khơng bắt buộc phải có nên nối liền hai dòng lại sử dụng để ngắt dịng lệnh dài giúp đọc dễ dàng

Để truy cập phương thức GetPoint,cần thông qua đối tượng đại diện cho vẽ hành ThisDrawing Khi nhập ThisDrawingvà dấu chấm (.) có nghĩa thực truy cập vào thứ chứa đối tượng ThisDrawing Sau dấu chấm gõ Utilityvà dấu chấm tiếp theo, tức truy cập vào bên đối tượng Utility Cuối nhập GetPointlà tên phương thức cần gọi

(6)

nhập gán cho biến varRet Ba dòng lệnh gán toạ độ điểm người dùng vừa nhập cho mảng sp

Điểm cuối lấy theo cách tương tự nhưđiểm đầu

Phương thức GetDistance để nhập bề rộng nửa đường (hwidth), bán kính gạch lát (trad) khoảng cách viên gạch (tspac) Phương thức cần hai tham số, thứ điểm sở, thứ hai lời nhắc: yêu cầu chuỗi hướng dẫn người dùng nhập giá trị phù hợp Phương thức GetDistance trả giá trị khoảng cách nhập từ dòng lệnh khoảng cách điểm chọn AutoCAD điểm sở

Chương trình tính tốn biến khác mà sử dụng Macro Biến pangle gán cho góc đường thẳng tạo điểm đầu điểm cuối chiều dương trục x phương thức AngleFromXAxis Bề rộng đường tính lần giá trị nửa bề rộng nhập vào từ người dùng Biến plengthđược gán giá trị chiều dài đường xác định phương thức GetDistance Cuối biến angp90và angm90được tính lưu cách cộng trừ giá trị góc đường với 900

Lưu kết quảđã thực

Hình vẽ biểu diễn cách biến tính chương trình để xác định kích thước đường

Chi tiết bố trí gạch lát

5 V đường đi do

Khi có đủ thơng sốđịnh vị bề rộng bắt đầu thực vẽđường dạo

Vẽđường dạo vườn:

(7)

’ Vẽ đường dạo Private Sub drawout()

Dim points(0 To 9) As Double Dim pline As AcadLWPolyline Dim varRet As Variant

varRet = ThisDrawing.Utility.PolarPoint(sp, angm90, hwidth) points(0) = varRet(0)

points(1) = varRet(1) points(8) = varRet(0) points(9) = varRet(1)

varRet = ThisDrawing.Utility.PolarPoint( _ varRet, pangle, plength)

points(2) = varRet(0) points(3) = varRet(1)

varRet = ThisDrawing.Utility.PolarPoint( _ varRet, angp90, totalwidth)

points(4) = varRet(0) points(5) = varRet(1)

varRet = ThisDrawing.Utility.PolarPoint( _ varRet, pangle + dtr(180), plength)

points(6) = varRet(0) points(7) = varRet(1)

Set pline = ThisDrawing.ModelSpace _ AddLightWeightPolyline(points) End Sub

Thủ tục vẽ đường dạo sử dụng phương thức AddLightweightPolyline Phương thức cần tham số mảng điểm tạo thành đường đa tuyến Để vẽđa tuyến cần tìm tất điểm tạo thành đường đa tuyến xếp chúng vào mảng toạđộ Với đường dạo điểm cần thiết góc Tìm góc đường dạo cách sử dụng phương thức PolarPoint Phương thức tìm điểm biết góc khoảng cách điểm so với điểm sở Từ điểm đầu (sp) tìm góc thứ đường theo chiều kim đồng hồ, đỉnh cách sp khoảng nửa bề rộng đường (hwidth) tạo góc (-900) so với tim đường Để vẽ đường khép kín bao quanh phạm vi đường điểm điểm bắt đầu điểm kết thúc mảng toạđộ điểm Vì toạđộ X Y trả từ phương thức PolarPointsẽđược gán cho cảđiểm đầu điểm cuối mảng

Các góc cịn lại tính theo cách tương tự sử dụng chiều dài, bề rộng đường dạo (plengthvà width) góc đường dạo tạo với chiều dương trục x

Mỗi phương thức PolarPoint gọi toạ độ điểm nhận (biến varRet) sẽđược chép vào mảng toạđộ điểm

Ngày đăng: 09/03/2021, 04:56

TỪ KHÓA LIÊN QUAN

w