Thực hành lập trình VBA trong AutoCAD

ldt2007

Thành viên năng động
Tham gia
12/8/08
Bài viết
62
Điểm thành tích
16
Website
myTKN.blogspot.com
Lập trình VBA trong AutoCAD được sử dụng rộng rãi từ AutoCAD R14 (năm 1997), lúc đó các Fan hâm mộ AutoCAD ở Việt Nam đang vui mừng được sử dụng AutoCAD trong môi trường Windows (AutoCAD R13 màn hình mặc định màu xám và sử dụng không thân thiện lắm) và AutoLISP đang được ưa chuộng nên ít người tìm hiểu về VBA (Visual Basic for Application) trong môi trường AutoCAD, năm 1998 nhiều đơn vị tư vấn vẫn còn vẽ tay hoặc sử dụng AutoCAD R12 chạy trên môi trường DOS.

Lập trình VBA trong AutoCAD không hề đơn giản, để bắt đầu cũng cần kiến thức cơ bản về VBA, nhưng nếu làm chủ được VBA bạn sẽ tạo ra những tiện ích trợ giúp cho công việc thiết kế cũng như tạo ra những phần mềm ứng dụng thú vị...

Bài 1: Kết hợp AutoLISP và VBA tạo ra ứng dụng đơn giản đầu tiên vẽ hình vuông khi cho biết 1 điểm và chiều dài cạnh.

1. Tạo lệnh tắt:
- Tại màn hình Desktop bấm phải chuột, chọn New, Text Document.
- Nhập tên file bất kỳ, bấm kép mở file.
- Nhập dòng lệnh sau (có thể tải file ở dưới):

(Defun C:Vhv() (Command "Vbarun" "Vhv") (princ))
- Chọn Menu File, Save As, đặt tên file là 1_Vhv.lsp
- Như vậy bạn đã có Lệnh tắt Vhv, chạy 1 ứng dụng VBA tên là Vhv (vẽ hình vuông).

2. File 1_Vehinhvuong.dvb:
- Đây là file chứa nội dung lập trình VBA.
- Có thể copy ra file khác và viết thêm ứng dụng vào trong file.

Tải thư mục VBA đính kèm gồm 2 file 1_Vhv.lsp1_Vehinhvuong.dvb
Tải xong copy thư mục vào ổ C:\

3. Chạy ứng dụng:
- Khởi động AutoCAD.
- Gõ lệnh AP
- Chọn 2 file để load (hoặc bấm kép vào từng file): 1_Vhv.lsp1_Vehinhvuong.dvb

- Nhập lệnh: Vhv
- Chọn 1 điểm
- Nhập chiều dài cạnh, ví dụ bằng 50, kết quả như hình dưới.

1e86348a9acd51435331ad78a49c26aa2fad6ea39ab7b039c55abef01e997fa36g.jpg

http://www.mediafire.com/i/?4z
http://www.mediafire.com/i/?4z
Đây là nội dung toàn bộ file VBA:
-Trong AutoCAD nhấn Alt+F11 để xem

'**************************************
'VE HINH VUONG
'Design by LDT2007 - Tel : 091.304.9779
'**************************************


Public Sub Vhv()

On Error GoTo Err_Vhv

Dim P01 As Variant

Dim D1(0 To 2) As Double
Dim D2(0 To 2) As Double
Dim D3(0 To 2) As Double
Dim D4(0 To 2) As Double

Dim L1 As AcadLine
Dim L2 As AcadLine
Dim L3 As AcadLine
Dim L4 As AcadLine

P01 = ThisDrawing.Utility.GetPoint(, "Chon mot diem: ")

Dim Canh As Double
Canh = ThisDrawing.Utility.GetDistance(, "Nhap chieu dai canh:")

D1(0) = P01(0): D1(1) = P01(1): D1(2) = 0
D2(0) = P01(0) + Canh: D2(1) = P01(1): D2(2) = 0
D3(0) = P01(0) + Canh: D3(1) = P01(1) + Canh: D3(2) = 0
D4(0) = P01(0): D4(1) = P01(1) + Canh: D4(2) = 0

Set L1 = ThisDrawing.ModelSpace.AddLine(D1, D2)
Set L2 = ThisDrawing.ModelSpace.AddLine(D2, D3)
Set L3 = ThisDrawing.ModelSpace.AddLine(D3, D4)
Set L4 = ThisDrawing.ModelSpace.AddLine(D4, D1)

'L1.Layer = "Tuong"
'L2.Layer = "Tuong"

Exit_Vhv:
Exit Sub

Err_Vhv:
MsgBox "Loi, khong thuc hien duoc!", vbCritical, "Thong bao"
Resume Exit_Vhv

End Sub
 

File đính kèm

  • VBA.rar
    16 KB · Đọc: 967
Last edited by a moderator:

ldt2007

Thành viên năng động
Tham gia
12/8/08
Bài viết
62
Điểm thành tích
16
Website
myTKN.blogspot.com
Giải thích các dòng lệnh, mục đích:
- Để tìm hiểu cơ chế làm việc của VBA
- Làm quen với ngôn ngữ lập trình
- Để tiếp tục viết các ứng dụng cơ bản khác
- Từ ứng dụng cơ bản => ứng dụng phức tạp hơn hỗ trợ cho công việc...

'**************************************
'VE HINH VUONG
'Design by LDT2007 - Tel : 091.304.9779
'**************************************
Vài dòng ghi chú, để viết ghi chú trước dòng phải có dấu nháy đơn (')

Public Sub Vhv()
Tên của hàm con, có thể đặt
Public Sub = Public Function để hàm hoạt động rộng rãi hơn
Vhv() tên hàm và đối số ở trong ngoặc nếu có

On Error GoTo Err_Vhv
Gặp lỗi thì chạy đến
Err_Vhv

Dim P01 As Variant
Đặt điểm P01 là một biến

Dim D1(0 To 2) As Double
Dim D2(0 To 2) As Double
Dim D3(0 To 2) As Double
Dim D4(0 To 2) As Double
Khai báo các điểm D1, 2, 3, 4:
Ta có D1(0) là giá trị tọa độ x của điểm D1
Ta có D1(1) là giá trị tọa độ y của điểm D1
Ta có D1(2) là giá trị tọa độ z của điểm D1, tương tự với các điểm khác

Dim L1 As AcadLine
Dim L2 As AcadLine
Dim L3 As AcadLine
Dim L4 As AcadLine
Khai báo L1, 2, 3, 4 là các đường thẳng

P01 = ThisDrawing.Utility.GetPoint(, "Chon mot diem: ")
Đây là thủ tục để lấy giá trị tọa độ của điểm P01, dòng nhắc trong dấu ngoặc sẽ xuất hiện trong AutoCAD

Dim Canh As Double
Đặt Canh là tên 1 biến số

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 sẽ xuất hiện trong AutoCAD

D1(0) = P01(0): D1(1) = P01(1): D1(2) = 0
Lấy tọa độ x, y, z của điểm D1 căn cứ vào điểm P01
Dồn 3 dòng lệnh trên 1 dòng thì cách nhau bởi dấu 2 chấm :) )

D2(0) = P01(0) + Canh: D2(1) = P01(1): D2(2) = 0
Lấy tọa độ x, y, z của điểm D2 căn cứ vào điểm P01
D02(0): tọa độ x của điểm D2
= P01(0) + Canh: bằng tọa độ x của điểm P01 cộng Canh

D3(0) = P01(0) + Canh: D3(1) = P01(1) + Canh: D3(2) = 0
D4(0) = P01(0): D4(1) = P01(1) + Canh: D4(2) = 0

Set L1 = ThisDrawing.ModelSpace.AddLine(D1, D2)
Vẽ đường thẳng L1 nối từ điểm D1 đến D2
Set L2 = ThisDrawing.ModelSpace.AddLine(D2, D3)
Vẽ đường thẳng L2 nối từ điểm D2 đến D3
Set L3 = ThisDrawing.ModelSpace.AddLine(D3, D4)
Vẽ đường thẳng L3 nối từ điểm D3 đến D4
Set L4 = ThisDrawing.ModelSpace.AddLine(D4, D1)
Vẽ đường thẳng L4 nối từ điểm D4 đến D1



'L1.Layer = "Tuong"
'L2.Layer = "Tuong"
Nếu trong file CAD của bạn có lớp tường thì đổi lớp cho đối tượng
bằng cách trên


Exit_Vhv:
Exit Sub
Dòng kết thúc hàm con

Err_Vhv:
MsgBox "Loi, khong thuc hien duoc!", vbCritical, "Thong bao"
Hiển thị thông báo khi gặp lỗi

Resume Exit_Vhv
Trở lại
Exit_Vhv để kết thúc

End Sub

Kết thúc hàm con
 
Last edited by a moderator:

ldt2007

Thành viên năng động
Tham gia
12/8/08
Bài viết
62
Điểm thành tích
16
Website
myTKN.blogspot.com
Bài 2: Vẽ hình vuông, hình tròn, cung như hình dưới trái
khi cho biết điểm P1 và chiều dài cạnh là a.

a776b34e86d456e3e135208843a9319e1f083ee91c46ef0f67d6735aaedd4cec6g.jpg


1. Tạo lệnh tắt:
- Mở file 1_Vhv.lsp (đã tải ở bài trước).
- Chọn Menu File, Save As đặt tên mới là 2_Vhvt.lsp

- Nhập dòng lệnh sau (có thể tải file ở dưới):
(Defun C:Vhvt() (Command "Vbarun" "Vhvt") (princ))
- Như vậy bạn đã có thêm Lệnh tắt Vhvt, chạy 1 ứng dụng VBA tên là Vhvt (vẽ hình vuông tròn).

2. File 2_Vehinhvuongtron.dvb:
- Đây là file chứa nội dung lập trình VBA.
Tải file đính kèm gồm 2 file 2_Vhvt.lsp2_Vehinhvuongtron.dvb
Tải xong copy thư mục vào ổ C:\VBA\

3. Chạy ứng dụng:
- Khởi động AutoCAD.
- Gõ lệnh AP
- Chọn 2 file để load (hoặc bấm kép vào từng file): 2_Vhvt.lsp2_Vehinhvuongtron.dvb

- Nhập lệnh: Vhvt
- Chọn 1 điểm
- Nhập chiều dài cạnh, ví dụ bằng 50, kết quả như hình trên phải.


Nội dung file VBA
Trong AutoCAD nhấn Alt+F11 để xem

'**************************************
'VE HINH VUONG TRON
'Design by LDT2007 - Tel : 091.304.9779
'**************************************


Public Sub Vhvt()


On Error GoTo Err_Vhvt

Dim Pi
Pi = 4 * Atn(1)

Dim P1 As Variant

Dim Canh As Double

P1 = ThisDrawing.Utility.GetPoint(, "Chon mot diem: ")

Canh = ThisDrawing.Utility.GetDistance(, "Nhap chieu dai canh:")

Dim PL01 As AcadPolyline

Dim P01(11) As Double

Dim L01 As AcadLine, L02 As AcadLine

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

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
'Ve Hinh vuong polyline
Set PL01 = ThisDrawing.ModelSpace.AddPolyline(P01)
PL01.Closed = True

Dim PL02 As Variant

'Ve Hinh vuong polyline offset
PL02 = PL01.Offset(Canh / 2)
'PL01.Layer = "Tuong"

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)
'Ve Duong thang
Set L01 = ThisDrawing.ModelSpace.AddLine(D01, D03)
Set L02 = ThisDrawing.ModelSpace.AddLine(D02, D04)

Dim A01 As AcadArc, A02 As AcadArc

Dim Tam(0 To 2) As Double, Bankinh As Double, Gocdau As Double, Goccuoi As Double

Tam(0) = P1(0): Tam(1) = P1(1)

Bankinh = Canh / 4
Gocdau = 90 * Pi / 180#
Goccuoi = 180 * Pi / 180#
'Ve Cung 1
Set A01 = ThisDrawing.ModelSpace.AddArc(Tam, Bankinh, Gocdau, Goccuoi)


Gocdau = 270 * Pi / 180#

Goccuoi = 360 * Pi / 180#
'Ve Cung 2
Set A02 = ThisDrawing.ModelSpace.AddArc(Tam, Bankinh, Gocdau, Goccuoi)

Dim C01 As AcadCircle

'Ve Hinh tron
Set C01 = ThisDrawing.ModelSpace.AddCircle(Tam, Canh)

Exit_Vhvt:

Exit Sub

Err_Vhvt:

MsgBox "Loi, khong thuc hien duoc!", vbCritical, "Thong bao"
Resume Exit_Vhvt

End Sub
 

File đính kèm

  • VBA2.rar
    17,8 KB · Đọc: 538
Last edited by a moderator:

ldt2007

Thành viên năng động
Tham gia
12/8/08
Bài viết
62
Điểm thành tích
16
Website
myTKN.blogspot.com
Giải thích các dòng lệnh Bài 2:


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


- Sau 2 bài ta đã vẽ được đường thẳng, cung, đường tròn, hình vuông với "vốn liếng" như vậy có thể áp dụng vào AutoCAD được rồi (bản vẽ AutoCAD cũng chỉ có đường thẳng và cong :) ).
- Trình tự vẽ đối tượng:
1. Khai báo đối tượng bắt đầu bởi Dim...
2. Xác định toạ độ đối tượng bằng cách lấy toạ độ 1 điểm gốc nào đó
3. Xác định các biến khác của đối tượng
4. Vẽ, offset, copy, mirror, array... đối tượng.
 

ldt2007

Thành viên năng động
Tham gia
12/8/08
Bài viết
62
Điểm thành tích
16
Website
myTKN.blogspot.com
Bài 3: Vẽ trục trên mặt bằng

8dfc37561a8c3b0a1ee8ac8d2c9f4fc122479f73cfb6cf89e6909e3d8bef43696g.jpg


- Ta có hình vẽ bên trái và kết quả bên phải.

1. Tạo lệnh tắt bằng file LSP, xem bài 1:
- Tên file là 3_Vtr.lsp,
bao gồm 2 lệnh tắt:
- Vtr1: Vẽ trục bắt đầu từ 1, 2, 3 ....
- VtrA:
Vẽ trục bắt đầu từ A, rồi B, C....Z
- Nội dung file LSP như sau (có thể tải file đính kèm)

;;; Ve truc
(Defun C:Vtr1() (Command "Vbarun" "Vtr1") (princ))
(Defun C:VtrA() (Command "Vbarun" "VtrA") (princ))
2. File lập trình DVB tên là 3_VeTruc.dvb (tải ở dưới)
- Đây là file chứa nội dung lập trình VBA.
- Tải file đính kèm gồm 2 file 3_Vtr.lsp3_Vetruc.dvb
- Tải xong copy thư mục VBA vào ổ C:\

3. Chạy ứng dụng:
- Khởi động AutoCAD.
- Gõ lệnh AP
- Chọn 2 file để load (hoặc bấm kép vào từng file): 3_Vtr.lsp3_Vetruc.dvb
- Nhập lệnh: Vtr1 vẽ tên trục bắt đầu bởi số 1, 2, 3.....
- Chọn 1 điểm P1, điểm P1 chọn chính xác vào đường gióng kích thước
- Chọn các điểm khác tại đường kích thước hoặc thậm chí tại đường tim cũng được. Các trục sau sẽ lấy tọa độ y của điểm đầu P1.
- Nhập lệnh: VtrA vẽ tên trục bắt đầu bởi số A, B, C..... Z
- Chọn 1 điểm P1, điểm P1 chọn chính xác vào đường gióng kích thước
- Chọn các điểm khác tại đường kích thước hoặc thậm chí tại đường tim cũng được. Các trục sau sẽ lấy tọa độ x của điểm đầu P1.
 

File đính kèm

  • VBA3.rar
    18 KB · Đọc: 560

ldt2007

Thành viên năng động
Tham gia
12/8/08
Bài viết
62
Điểm thành tích
16
Website
myTKN.blogspot.com
Nội dung file lập trình VBA Bài 3:

- Lưu ý nếu 1 đơn vị vẽ AutoCAD của bạn = 1mm thì sửa dòng lệnh:
Const Tile = 1 >>>> bằng >>>> Const Tile = 1000
- Còn đơn vị chúng tôi hay dùng: 1đơn vị AutoCAD = 1m (dùng trong quy hoạch - kiến trúc).
- Vẽ trục bao gồm 1 hình tròn d= 0,35cm và Text cao 0,5cm đơn giản nhưng viết lập trình đến 30 dòng.
- Ứng dụng đã áp dụng được vào công việc thực tế và viết Code đã khó hơn. Ta tìm hiểu kỹ hơn các dòng lệnh vào bài sau.

'*************************************************
'VE TRUC
'Design by LDT2007 - Tel : 091.304.9779 - NEW YEAR 2011!
'*************************************************


Public Sub Vtr1()

On Error GoTo Err_Vtr1


Const Tile = 1
'neu 1 don vi ve = 1mm thi tile = 1000
'tile = 1000

Dim i
i = 0

Dim P1 As Variant, P2 As Variant
P1 = ThisDrawing.Utility.GetPoint(, "Chon diem dat ten truc: ")

Dim Tam(0 To 2) As Double
Dim C01 As AcadCircle, Bankinh As Double, T01 As AcadText


Do
i = i + 1

If i = 1 Then
Tam(0) = P1(0): Tam(1) = P1(1) + 0.7 * Tile
Else
Tam(1) = P1(1) + 0.7 * Tile
P2 = ThisDrawing.Utility.GetPoint(, "Chon diem dat ten truc: ")
Tam(0) = P2(0)
End If

Bankinh = 0.35 * Tile

Set C01 = ThisDrawing.ModelSpace.AddCircle(Tam, Bankinh)
C01.Layer = "0"
Set T01 = ThisDrawing.ModelSpace.AddText(i, Tam, 0.5 * Tile)
T01.Alignment = acAlignmentMiddleCenter
T01.TextAlignmentPoint = Tam

Loop


Exit_Vtr1:
Exit Sub

Err_Vtr1:
'MsgBox "OK!", vbCritical, "Thong bao"
Resume Exit_Vtr1

End Sub


Public Sub VtrA()

On Error GoTo Err_VtrA


Const Tile = 1
'neu 1 don vi ve = 1mm thi tile = 1000
'tile = 1000

Dim i
i = 64

Dim P1 As Variant, P2 As Variant
P1 = ThisDrawing.Utility.GetPoint(, "Chon diem dat ten truc: ")

Dim Tam(0 To 2) As Double
Dim C01 As AcadCircle, Bankinh As Double, T01 As AcadText


Do
i = i + 1

If i = 65 Then
Tam(0) = P1(0) - 0.7 * Tile: Tam(1) = P1(1)
Else
Tam(0) = P1(0) - 0.7 * Tile
P2 = ThisDrawing.Utility.GetPoint(, "Chon diem dat ten truc: ")
Tam(1) = P2(1)
End If

Bankinh = 0.35 * Tile

Set C01 = ThisDrawing.ModelSpace.AddCircle(Tam, Bankinh)
C01.Layer = "0"
Set T01 = ThisDrawing.ModelSpace.AddText(Chr(i), Tam, 0.5 * Tile)
T01.Alignment = acAlignmentMiddleCenter
T01.TextAlignmentPoint = Tam

Loop


Exit_VtrA:
Exit Sub

Err_VtrA:
'MsgBox "OK!", vbCritical, "Thong bao"
Resume Exit_VtrA

End Sub
 

boybghaui

Thành viên mới
Tham gia
13/4/14
Bài viết
1
Điểm thành tích
1
hay quá, cảm ơn bạn nhé !!!
mình đang tìm hiểu về cái này lf0_n.jpg
 

Tải bộ cài phần mềm Dự toán GXD, Đấu thầu GXD, Thanh Quyết toán GXD, Quản lý chất lượng GXD. Dành cho người mua bản quyền
Kích để xem khóa học Dự toán công trình
Kích để xem khóa học Dự toán công trình
Phần mềm quản lý chất lượng công trình QLCL GXD
Tìm hiểu khóa học Thanh Quyết toán GXD

Các bài viết mới

Top