Trích dẫn:
Public Sub Vhvt()
Hàm Vhvt (vẽ hình vuông tròn)
On Error GoTo Err_Vhvt
Gặp lỗi thì chạy đến Err_Vhvt
Dim Pi
Pi = 4 * Atn(1)
Hai dòng trên lấy giá trị chính xác của Pi bởi: 180° = Pi radians, tan(45°)=1, arctan(1)= Pi radians/4 => Pi = 4 * Atn(1). Trong VBA cho AutoCAD hàm arctan là Atn(), trong Exel hàm arctan là Atan().
Có thể thay 2 dòng trên bằng 1 dòng bởi Pi là một hằng thay cho 1 biến: Const Pi = 4 * Atn(1)
Dim P1 As Variant
Đặt điểm P1 là một biến
Dim Canh As Double
Đặt Canh là tên 1 biến số
P1 = ThisDrawing.Utility.GetPoint(, "Chon mot diem: ")
Đây là thủ tục để lấy giá trị tọa độ của điểm P1, dòng nhắc trong dấu ngoặc kép (") sẽ xuất hiện trong AutoCAD
Canh = ThisDrawing.Utility.GetDistance(, "Nhap chieu dai canh:")
Đây là thủ tục để gán giá trị nhập vào một biến, dòng nhắc trong dấu ngoặc kép (") sẽ xuất hiện trong AutoCAD
Dim PL01 As AcadPolyline
Khai báo PL01 là đường polyline
Dim P01(11) As Double
Khai báo nhóm điểm P01 phục vụ vẽ đường polyline
Dim L01 As AcadLine, L02 As AcadLine
Khai báo L01, 02 là các đường thẳng, ghép 2 dòng khai báo trên 1 dòng phân cách bởi dấu phẩy (,)
Dim D01(0 To 2) As Double, D02(0 To 2) As Double, D03(0 To 2) As Double, D04(0 To 2) As Double
Khai báo D01, 02, 03, 04 là các điểm, ghép 4 dòng khai báo trên 1 dòng phân cách bởi dấu phẩy (,)
Ta có D01(0) là giá trị tọa độ x của điểm D01
Ta có D01(1) là giá trị tọa độ y của điểm D01
Ta có D01(2) là giá trị tọa độ z của điểm D01, tương tự với các điểm khác
P01(0) = P1(0) - Canh / 2: P01(1) = P1(1) - Canh / 2
P01(3) = P1(0) + Canh / 2: P01(4) = P1(1) - Canh / 2
P01(6) = P1(0) + Canh / 2: P01(7) = P1(1) + Canh / 2
P01(9) = P1(0) - Canh / 2: P01(10) = P1(1) + Canh / 2
- Xác định toạ độ nhóm điểm P01. Ở đây đã bỏ các toạ độ z của P01: P01(2), P01(5), P01(8) bởi ta đang vẽ trên mặt phẳng 2D.
'Ve Hinh vuong polyline
Set PL01 = ThisDrawing.ModelSpace.AddPolyline(P01)
PL01.Closed = True
- Vẽ đường thẳng polyline nối các điểm trong nhóm điểm và closed lại.
Dim PL02 As Variant
- Đặt đối tượng PL02 là một biến
'Ve Hinh vuong polyline offset
PL02 = PL01.Offset(Canh / 2)
Vẽ hình vuông thứ 2 bằng cách offset hình vuông thứ nhất, giá trị offset dương là offset ra, âm là offset vào. Đối với đường thẳng giá trị offset âm (trừ), dương (cộng) căn cứ vào toạ độ trục x, y của đối tượng gốc
'PL01.Layer = "Tuong"
Đổi lớp cho hình vuông 1 nếu bản vẽ có lớp Tường
D01(0) = P1(0): D01(1) = P1(1) - Canh / 4
D02(0) = P1(0) + Canh / 4: D02(1) = P1(1)
D03(0) = P1(0): D03(1) = P1(1) + Canh / 4
D04(0) = P1(0) - Canh / 4: D04(1) = P1(1)
Xác định toạ độ 4 điểm D01, 02, 03, 04 căn cứ vào điểm P1
'Ve Duong thang
Set L01 = ThisDrawing.ModelSpace.AddLine(D01, D03)
- Vẽ đường thẳng L01 nối từ điểm D01 đến D03
Set L02 = ThisDrawing.ModelSpace.AddLine(D02, D04)
- Vẽ đường thẳng L02 nối từ điểm D02 đến D04
Dim A01 As AcadArc, A02 As AcadArc
Khai báo A01, 02 là các cung
Dim Tam(0 To 2) As Double, Bankinh As Double, Gocdau As Double, Goccuoi As Double
Khai báo tâm, bán kính, góc đầu, góc cuối của cung
Tam(0) = P1(0): Tam(1) = P1(1)
Lấy toạ độ x, y Tam theo P1 toại độ z bằng 0
Bankinh = Canh / 4
Gocdau = 90 * Pi / 180#
Goccuoi = 180 * Pi / 180#
Góc trong AutoCAD tính bằng radians 90° đổi ra radians = 90*Pi/180# (dấu # thể hiện là con số)
'Ve Cung 1
Set A01 = ThisDrawing.ModelSpace.AddArc(Tam, Bankinh, Gocdau, Goccuoi)
Thủ tục để vẽ cung A01
Gocdau = 270 * Pi / 180#
Goccuoi = 360 * Pi / 180#
'Ve Cung 2
Set A02 = ThisDrawing.ModelSpace.AddArc(Tam, Bankinh, Gocdau, Goccuoi)
Thủ tục để vẽ cung A02
Dim C01 As AcadCircle
Khai báo C01 là đường tròn
'Ve Hinh tron
Set C01 = ThisDrawing.ModelSpace.AddCircle(Tam, Canh)
Thủ thục vẽ đường tròn khi biết tâm và bán kính.
Exit_Vhvt:
Exit Sub
Dòng kết thúc hàm con
Err_Vhvt:
MsgBox "Loi, khong thuc hien duoc!", vbCritical, "Thong bao"
Hiển thị thông báo khi gặp lỗi
Resume Exit_Vhvt
Trở lại Exit_Vhvt để kết thúc
End Sub
Kết thúc hàm con