Tải bản đầy đủ (.doc) (24 trang)

Lập trình tự động hóa thiết kế Auto CAD bằng VBA

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (295.86 KB, 24 trang )

Bài tập lớn môn học: Tự động hóa thiết kế
TRƯỜNG ĐẠI HỌC HÀNG HẢI
KHOA CƠ KHÍ

NGÀNH:
CHUYÊN NGÀNH:

KỸ THUẬT TÀU THỦY
MÁY TÀU THỦY

SINH VIÊN:
LỚP:
G.V. HƯỚNG DẪN:

HOÀNG VĂN QUANG
MTT50–ĐHT
TRƯƠNG TIẾN PHÁT

BÀI TẬP LỚN
ĐỀ TÀI: XÂY DỰNG CHƯƠNG TRÌNH VBA TỰ ĐỘNG
ỘBNÍ CGH ĐHÔ IÓCAH O TỐ H
ẾHTÉ P K
T H I Ế TTKỰ
Ế MĐ
ẶT
N GI T
2 DẾT H E O
Sinh viên: Hoàng VănT
Quang
IÊU CHUẨN JIS (LOẠI 5K)


Trang 1


Bài tập lớn môn học: Tự động hóa thiết kế

Mục lục
PHẦN 1: GiỚI THIỆU CHUNG...............................................................................2
1.1 Mở đầu......................................................................................................... 2
1.1.1 Lý do chọn đề tài....................................................................................2
1.1.2 Mục đích đề tài.......................................................................................2
1.1.3 Đối tượng và phạm vi nghiên cứu..........................................................2
1.1.4 Ý nghĩa thực tiễn của đề tài....................................................................2
1.2 Cơ sở lý thuyết tính toán..............................................................................3
1.2.1 Tổng quan về bích..................................................................................3
1.2.2 Lý thuyết................................................................................................4
1.3 Sơ đồ thuật toán............................................................................................5
1.4 Giới thiệu các form và hướng dẫn sử dụng..................................................6
1.4.1 Form chính (bick5k)...............................................................................6
1.4.2 Form phụ(tác giả)...................................................................................7
1.4.3 Form phụ (DHSD).................................................................................7
1.5 Kết luận........................................................................................................ 8
PHẦN 2: CODE LỆNH.............................................................................................9
2.1 Code cho form chính....................................................................................9
2.2 Hàm cho form hướng dẫn sử dụng.............................................................21
PHẦN 3 THỬ BỘI SỐ............................................................................................22
3.1 Thông số thử...............................................................................................22
3.2 Kết quả chạy thử.........................................................................................22
3.3 Nhận xét..................................................................................................... 23

Sinh viên: Hoàng Văn Quang


Trang 2


Bài tập lớn môn học: Tự động hóa thiết kế

1 PHẦN 1: GiỚI THIỆU CHUNG
1.1 Mở đầu
1.1.1 Lý do chọn đề tài.
Ngày nay công việc thiết kế đòi hỏi tính hiệu quả và chính xác cao, do đó
rất cần phải được tự động hóa để đạt được điều đó. Máy tính là một thiết bị đã
và đang được sử dụng rộng rãi trong công việc cũng như giảng dạy và học tập,
do đó rất thuận tiện cho việc tự động hóa trong thiết kế. Trong rất nhiều phần
mềm có thể tự động hóa, thì một phần mềm đươc sử dụng nhiều nhất với người
thiết kế đó là autocad, trong autocad có chương trình tự động hóa cao là VBA.
Với VBA bạn có thể lập trình để vẽ ra những chi tiết từ đơn giản tới phức tạp,
có thể quản lý bản vẽ theo nhu cầu, load, xuất file nhanh chóng, gọn nhẹ. Ví
dụ: có thể dùng VBA để tự động vẽ các mặt bích, bu lông thậm chí chong
chóng tàu thủy hay các thiết bị phức tạp như máy chính, đường trục… Sở dĩ
VBA được ứng dụng nhiều vì sự đồng bộ hóa trong câu lệnh giữa VBA và
Autocad, nó kết hợp được khả năng vẽ mạnh mẽ của Autocad cùng khả năng
quản lý, tính toán của ngôn ngữ lập trình VB
1.1.2Mục đích đề tài.
Giúp cho sinh viên nắm bắt được cách lập trình 1 chương trình VBA để
ứng dụng vào học tập và công việc sau này. Cho phép người sử dụng đẩy
nhanh tốc độ vẽ, nâng cao độ chính xác trong công việc thiết kế.
1.1.3 Đối tượng và phạm vi nghiên cứu.
Đối tượng nghiên cứu là chương trình VBA, một chương trình tự động
hóa nằm trong phần mềm autocad. Trong môi trường học tập thì phạm vi
nghiên cứu của đề tài là lập trình ra một chương trình đơn giản để vẽ những chi

tiết không quá phức tạp và được tiêu chuẩn hóa.
1.1.4Ý nghĩa thực tiễn của đề tài.
VBA giúp cho người thiết kế thao tác nhanh và chính xác hơn nhiều so
với thao tác trực tiếp bằng tay để vẽ. Qua đó đẩy nhanh tốc độ công việc nhưng
vẫn đảm bảo tính chính xác. Rút ngắn thời gian thiết kế qua đó tăng được năng
suất lao động.
Sinh viên: Hoàng Văn Quang

Trang 3


Bài tập lớn môn học: Tự động hóa thiết kế
1.2 Cơ sở lý thuyết tính toán
1.2.1 Tổng quan về bích
Mặt bích, hay còn được biết đến như là đĩa bích, được gắn với đầu ống và
sử dụng để kết nối nó với ống khác. Mối liên kết mặt bích là tháo lắp được và
cấu trúc chống thấm, là sự kết hợp của bích nối, đệm và bu lông. Mặt bích nối
ốn thép là loại mặt bích đặc biệt được dùng cho đường ống và mặt bích ống nạp
- ống xả được trang bị. Có các lỗ khoan trên mặt bích để bắt bu lông liên kết 2
mặt bích với nhau. Một vòng đệm giữa 2 mặt bích nhằm bảo vệ tránh hiện tượng
rò gỉ.
Ngày nay con người sử dụng ống rất nhiều trong cuộc sống cũng như trong
nền công nghiệp, đặc biệt là trong đóng tàu. Do đó bích nối cũng được phát triển
để phù hợp với sự phát triển của đường ống. Có thể nói ống có mặt ở đâu thì mặt
bích có mặt ở đó, từ những đường ống dẫn khí, dẫn dầu rất lớn và dài, tới những
đường ống nhỏ dùng để dẫn nước … Ngày nay công nghiệp đóng tàu cũng sử
dụng ống rất nhiều cho trang trí do đó phát triển bích nối là 1 điều bắt buộc.
Bích nối thường được tiêu chuẩn hóa để tiện cho việc gia công chế tạo,
tăng tính lắp lẫn cho bích. Một số trường hợp còn để đảm bảo an toàn khi xảy ra
sự cố, đặc biệt những bích kiểu này thường là bích ở hệ thống chữa cháy trên

các con tàu, theo công ước SOLAR về an toàn hỏa hoạn trên biển. Tiêu chuẩn
JIS là 1 trong những bộ tiêu chuẩn về mặt bích ống, ở đó người ta đưa ra các số
hiệu mặt bích sẵn để tiện cho việc chế tạo cũng như là sử dụng. Trong đề tài này
chúng ta sẽ nghiên cứu cách vẽ 1 loại mặt bích thuộc tiêu chuẩn này, đó là mặt
bích đôi loại 5k.

Hình 1-1:

Sinh viên: Hoàng Văn Quang

Mặt bích đôi tiêu chuản JIS 5k

Trang 4


Bài tập lớn môn học: Tự động hóa thiết kế
Mặt bích đôi là một chi tiết thường được dùng trong các hệ thống nước trên
tàu.
Khi ta muốn công chất trong đường ống chảy vào hệ thống ta sẽ cho mặt
bích có lỗ ở giữa vào trông mối lắp ghép, lỗ này được thiết kế có đường kính
bằng đường kính trong của ống.
Khi muốn ngắt công chất ta quay ngược phía bích còn lại và lắp vào hệ
thống, lúc này bích sẽ ngăn cản sự trao đổi công chất trong đường ống đi qua
bích.
1.2.2 Lý thuyết
Để thiết kế bích đôi ta sử dụng bảng số liệu về bích đôi 5k tiêu chuẩn jis
sau:

Hình 1-2:


Sinh viên: Hoàng Văn Quang

Thông số của mặt bích

Trang 5


Bài tập lớn môn học: Tự động hóa thiết kế
Như vậy ta đă đủ các số liệu để tính toán và vẽ bích đôi theo tiêu chuẩn jis
Để thuận tiện trong quá tŕnh tính toàn và kết xuất bản vẽ ta sử dụng phần
mềm VBA trong AutoCad để thực hiện chương tŕnh này.
1.3 Sơ đồ thuật toán

Hình 1-3:

Sinh viên: Hoàng Văn Quang

Sơ đồ thuật toán

Trang 6


Bài tập lớn môn học: Tự động hóa thiết kế

1.4

Giới thiệu các form và hướng dẫn sử dụng
Chương trình đơn giản nên ta chỉ cần làm một số form.

1.4.1 Form chính (bick5k)


Hình 1-4:

Form chính

Trên form có:
Combobox1 để lựa chọn đường kính danh nghĩa
Com bobox2 để lựa chọn có hay không ghi kích thước
Combobox3 để lựa chọn mặt cắt muốn vẽ đứng hay là cạnh
Combobox4 để lựa chọn phương vẽ bằng click chuột hay nhập giá trị góc
Nếu bằng click chuột thì khi nhấn nút vẽ chương trình sẽ yêu cầu nhập 2
điểm để chọn phương
Nếu nhập giá trị góc thì chương trình sẽ hiển thị một textbox yêu cầu nhập
giá trị của góc
Nút vẽ để vẽ bích sau khi lựa chọn đủ các thông số
Nút lệnh thoát dùng để rời khỏi chương trình.
Nút lệnh tác giả để xem thông tin tác giả
Nút lệnh HDSD đẻ xem cách dùng

Sinh viên: Hoàng Văn Quang

Trang 7


Bài tập lớn môn học: Tự động hóa thiết kế
1.4.2 Form phụ(tác giả)

Hình 1-5:
Form tác giả
Form này chứa thông tin về tác giả, được hiện nên khi người dùng nhấn

vào nút tác giả từ form chính hay từ form DHSD
Các nút:
Quay lại để trở về form chính
DHSD để xem hướng dẫn sử dụng
Thoát để rời khỏi chương trình
1.4.3 Form phụ (DHSD)

Hình 1-6:
Form hướng dẫn sử dụng
Form này chứa thông tin về cách thức sử dụng chương trình, được hiện nên
khi người dùng nhấn vào nút HDSD từ form chính hay từ form tác giả
Các nút:
Quay lại để trở về form chính

Sinh viên: Hoàng Văn Quang

Trang 8


Bài tập lớn môn học: Tự động hóa thiết kế
Tác giả để xem thông tin về tác giả
Thoát để rời khỏi chương trình
1.5 Kết luận
Dù được sự hướng dẫn tận tình của giáo viên hướng dẫn nhưng do vốn hiểu
biết về VBA cũng như AutoCad còn hạn chế, thời gian thực hiện ngắn cho nên
chương trình sẽ có nhiều khuyết điểm, lỗi.
Trong quá trình sử dụng chương trình nếu có bất kì lỗi nào phát sinh hay ý
kiến đóng góp xin liên hệ Hoàng Văn Quang - MTT50DHT
Tôi xin chân thành cảm ơn!


Sinh viên: Hoàng Văn Quang

Trang 9


Bài tập lớn môn học: Tự động hóa thiết kế

2 PHẦN 2: CODE LỆNH
2.1 Code cho form chính
Private Sub ComboBoxpv_Change()
Select Case ComboBoxpv.Value
Case 0: TextBoxgoc.Visible = False: Labelgoc.Visible = False
Case 1: TextBoxgoc.Visible = True: Labelgoc.Visible = True
End Select
End Sub
Private Sub TextBoxgoc_change()
If IsNumeric(TextBoxgoc.Value) Then
Exit Sub
Else
A = MsgBox("momen phai la DANG SO, vui long nhap lai!", vbOKOnly,
"Thong Bao")
TextBoxgoc.BackColor = &H80000001
Exit Sub
End If
End Sub
Private Sub UserForm_initialize()
ComboBoxdk.AddItem "10" '0
ComboBoxdk.AddItem "15" '1
ComboBoxdk.AddItem "20" '2
ComboBoxdk.AddItem "25" '3

ComboBoxdk.AddItem "32" '4
ComboBoxdk.AddItem "40" '5
ComboBoxdk.AddItem "50" '6
ComboBoxdk.AddItem "65" '7
ComboBoxdk.AddItem "80" '8
ComboBoxdk.AddItem "100" '9
ComboBoxdk.AddItem "125" '10
ComboBoxdk.AddItem "150" '11
ComboBoxdk.AddItem "200" '12
Sinh viên: Hoàng Văn Quang

Trang 10


Bài tập lớn môn học: Tự động hóa thiết kế
ComboBoxdk.AddItem "250" '13
ComboBoxdk.AddItem "300" '14
ComboBoxdk.AddItem "350" '15
ComboBoxdk.AddItem "400" '16
ComboBoxdk.AddItem "450" '17
ComboBoxdk.AddItem "500" '18
ComboBoxdk.Style = fmStyleDropDownList
ComboBoxdk.BoundColumn = 0
ComboBoxdk.ListIndex = 0
ComboBoxgkt.AddItem "khong" '0
ComboBoxgkt.AddItem "co" '1
ComboBoxgkt.Style = fmStyleDropDownList
ComboBoxgkt.BoundColumn = 0
ComboBoxgkt.ListIndex = 0
ComboBoxhc.AddItem "dung" '0

ComboBoxhc.AddItem "canh" '1
ComboBoxhc.Style = fmStyleDropDownList
ComboBoxhc.BoundColumn = 0
ComboBoxhc.ListIndex = 0
ComboBoxpv.AddItem "click chon phuong" '0
ComboBoxpv.AddItem "nhap goc" '1
ComboBoxpv.Style = fmStyleDropDownList
ComboBoxpv.BoundColumn = 0
ComboBoxpv.ListIndex = 0
End Sub
'tạo hàm tính sin
Function ArcSin(X As Double) As Double
ArcSin = Atn(X / Sqr(-X * X + 1))
End Function

Sinh viên: Hoàng Văn Quang

Trang 11


Bài tập lớn môn học: Tự động hóa thiết kế

' hàm cho button ve
Private Sub cmbve_Click()
'thiết lập số pi
pi = 4 * Atn(1)
'khai báo biến
Dim B As Double
Dim D As Double
Dim K As Double

Dim T As Double
Dim H As Double
Dim R As Double
Dim D1 As Double
Dim Kt As Double
Dim Hc As Double
Dim Pv As Double
Dim PlineObj As AcadLWPolyline
Dim C As AcadCircle
Dim L As AcadLine
Dim Arc As AcadArc
Dim Anpha As Double
Dim Dimobj As AcadDimAligned
Dim Dimcir As AcadDimDiametric
Dim Dimobj1 As AcadDimRadial
Dim P1(0 To 2) As Double
Dim P2(0 To 2) As Double
Dim O1(0 To 2) As Double
Dim O2(0 To 2) As Double
Dim O3(0 To 2) As Double

Sinh viên: Hoàng Văn Quang

Trang 12


Bài tập lớn môn học: Tự động hóa thiết kế
Dim O4(0 To 2) As Double
Dim Location1(0 To 2) As Double
Dim Location2(0 To 2) As Double

Dim Location3(0 To 2) As Double
Dim Location4(0 To 2) As Double
Dim I(0 To 2) As Double
Dim Nx(0 To 2) As Double
' chuyển đổi dữ liệu vào sang kích thước theo tiêu chuẩn
Select Case ComboBoxdk.Value
Case 0: D = 41: D1 = 17: K = 55: B = 0: T = 6: H = 12: R = 0
Case 1: D = 46: D1 = 22: K = 60: B = 0: T = 6: H = 12: R = 0
Case 2: D = 51: D1 = 27: K = 65: B = 0: T = 6: H = 12: R = 0
Case 3: D = 61: D1 = 34: K = 75: B = 0: T = 6: H = 12: R = 0
Case 4: D = 71: D1 = 43: K = 90: B = 0: T = 6: H = 15: R = 0
Case 5: D = 78: D1 = 49: K = 95: B = 0: T = 6: H = 15: R = 0
Case 6: D = 88: D1 = 61: K = 105: B = 0: T = 6: H = 15: R = 0
Case 7: D = 113: D1 = 77: K = 130: B = 0: T = 6: H = 15: R = 0
Case 8: D = 124: D1 = 90: K = 145: B = 0: T = 6: H = 19: R = 0
Case 9: D = 144: D1 = 115: K = 165: B = 90: T = 6: H = 19: R = 15
Case 10: D = 179: D1 = 141: K = 200: B = 120: T = 8: H = 19: R = 20
Case 11: D = 209: D1 = 166: K = 230: B = 140: T = 8: H = 19: R = 20
Case 12: D = 255: D1 = 218: K = 280: B = 170: T = 8: H = 23: R = 20
Case 13: D = 320: D1 = 269: K = 345: B = 140: T = 10: H = 23: R = 20
Case 14: D = 365: D1 = 321: K = 390: B = 160: T = 10: H = 23: R = 20
Case 15: D = 408: D1 = 358: K = 435: B = 190: T = 12: H = 25: R = 20
Case 16: D = 468: D1 = 409: K = 495: B = 160: T = 13: H = 25: R = 20
Case 17: D = 528: D1 = 460: K = 555: B = 180: T = 14: H = 25: R = 20
Case 18: D = 578: D1 = 511: K = 605: B = 155: T = 16: H = 25: R = 20
End Select

Sinh viên: Hoàng Văn Quang

Trang 13



Bài tập lớn môn học: Tự động hóa thiết kế
If B = 0 Then
B = D1
R = 10
End If
Select Case ComboBoxgkt.Value
Case 0: Kt = 0
Case 1: Kt = 1
End Select
Select Case ComboBoxhc.Value
Case 0: Hc = 0
Case 1: Hc = 1
End Select
Select Case ComboBoxpv.Value
Case 0: Pv = 0
Case 1: Pv = 1
End Select
Me.Hide
Dim Dkt As Variant
Dkt = ThisDrawing.Utility.GetPoint(, "nhap diem de ve ")
Dim Dbd(0 To 2) As Double
Dbd(0) = 0: Dbd(1) = 0: Dbd(2) = 0
Dim Goc As Double
If Pv = 0 Then
Dim Goc1 As Variant
Dim Goc2 As Variant
Goc1 = ThisDrawing.Utility.GetPoint(, "nhap diem thu nhat de chon phuong ")
Goc2 = ThisDrawing.Utility.GetPoint(, "nhap diem thu hai de chon phuong: ")

Set L = ThisDrawing.ModelSpace.AddLine(Goc1, Goc2)
Goc = L.Angle
L.Delete

Sinh viên: Hoàng Văn Quang

Trang 14


Bài tập lớn môn học: Tự động hóa thiết kế
Else
Goc = TextBoxgoc.Text * pi / 180
End If
O1(0) = 0: O1(1) = 0: O1(2) = 0
O2(0) = O1(0) + K / 2: O2(1) = O1(1): O2(2) = 0
O3(0) = O1(0) + K + D / 2 + 3 * T: O3(1) = O1(1): O3(2) = 0
O4(0) = O1(0) + K: O4(1) = O1(1): O4(2) = 0
Anpha = ArcSin((R + B / 2) / (R + D / 2))
'tạo các layer
Dim LayerObj As AcadLayer
Dim LayertypeName As String
LayertypeName = "continuous"
Set LayerObj = ThisDrawing.Layers.Add("netlien")
LayerObj.color = acRed
LayerObj.Linetype = LayertypeName
On Error Resume Next
LayertypeName = "dashdot"
ThisDrawing.Linetypes.Load LayertypeName, "acad.lin"
Set LayerObj = ThisDrawing.Layers.Add("duongtam")
LayerObj.color = acYellow

LayerObj.Linetype = LayertypeName
On Error Resume Next
LayertypeName = "continuous"
ThisDrawing.Linetypes.Load LayertypeName, "acad.lin"
Set LayerObj = ThisDrawing.Layers.Add("kichthuoc")
LayerObj.color = acGreen
LayerObj.Linetype = LayertypeName

Sinh viên: Hoàng Văn Quang

Trang 15


Bài tập lớn môn học: Tự động hóa thiết kế
'thực hiện ghi kích thước
If Kt = 1 Then
'thiết lập layer kích thước làm layer hiện hành
ThisDrawing.ActiveLayer = ThisDrawing.Layers("kichthuoc")
Dim objDimStyle As AcadDimStyle
Set objDimStyle = ThisDrawing.DimStyles.Add("newdimstyle")
ThisDrawing.SetVariable "DIMSCALE", 1 'will control size of dim text
ThisDrawing.SetVariable "DIMASZ", 2.5 'arrowhead size
ThisDrawing.SetVariable "DIMATFIT", 2 'arrow-text arrangement
ThisDrawing.SetVariable "DIMAZIN", 3 '0 suppression before/after angular
ThisDrawing.SetVariable "DIMBLK", "" 'special arrow blk
ThisDrawing.SetVariable "DIMDEC", 2 'Sets the number of decimal places
ThisDrawing.SetVariable "DIMDLE", 0 'dim line extension past extension
ThisDrawing.SetVariable "DIMDLI", 10 'dist between baseline dims
ThisDrawing.SetVariable "DIMDSEP", "." 'decimal separator
ThisDrawing.SetVariable "DIMEXE", 1.5 'dim line extension past extension

ThisDrawing.SetVariable "DIMEXO", 0 'dim offset from origin
ThisDrawing.SetVariable "DIMFIT", 5 'control fit if not enough space
ThisDrawing.SetVariable "DIMGAP", 2 'gap around text
ThisDrawing.SetVariable "DIMJUST", 0 'text placement - above centered
ThisDrawing.SetVariable "DIMLFAC", 1 'length scaling
ThisDrawing.SetVariable "DIMTAD", 1 'text to dim placement - above
ThisDrawing.SetVariable "DIMTIH", 0 'aligned with dim
ThisDrawing.SetVariable "DIMTIX", 0 'force inside
ThisDrawing.SetVariable "DIMTMOVE", 0 'dim moves with text
ThisDrawing.SetVariable "DIMTOFL", 1 'Draw dim line between ext lines
ThisDrawing.SetVariable "DIMTOH", 0 'Aligns text with the dimension line
ThisDrawing.SetVariable "DIMTSZ", 0 'draw arrowheads
ThisDrawing.SetVariable "DIMTXT", 3.5 'text height
ThisDrawing.SetVariable "DIMTZIN", 12 '0 suppression before/after tol
ThisDrawing.SetVariable "DIMUNIT", 2 'unit format - decimal
ThisDrawing.SetVariable "DIMZIN", 12 '0 suppression before/after

Sinh viên: Hoàng Văn Quang

Trang 16


Bài tập lớn môn học: Tự động hóa thiết kế
objDimStyle.CopyFrom ThisDrawing
ThisDrawing.ActiveDimStyle = objDimStyle
Location1(0) = K / 4: Location1(1) = D / 2 + 2 * H: Location1(2) = 0
Location2(0) = K / 2: Location2(1) = D / 2 + 4 * H: Location2(2) = 0
Location3(0) = O3(0) + T / 2: Location3(1) = O3(1) - 2 * T - D / 2: Location3(2)
=0
Location4(0) = O1(0) + D / 4: Location4(1) = 0: Location4(2) = 0

If Hc = 0 Then
Set Dimobj = ThisDrawing.ModelSpace.AddDimAligned(O1, O2, Location1)
Dimobj.Move Dbd, Dkt
Dimobj.Rotate Dkt, Goc
Set Dimobj = ThisDrawing.ModelSpace.AddDimAligned(O1, O4, Location2)
Dimobj.Move Dbd, Dkt
Dimobj.Rotate Dkt, Goc
P1(0) = O4(0) + D / 2 / Sqr(2): P1(1) = O4(1) - D / 2 / Sqr(2): P1(2) = 0
P2(0) = O4(0) - D / 2 / Sqr(2): P2(1) = O4(1) + D / 2 / Sqr(2): P2(2) = 0
Set Dimcir = ThisDrawing.ModelSpace.AddDimDiametric(P1, P2, 3)
Dimcir.Move Dbd, Dkt
Dimcir.Rotate Dkt, Goc
P1(0) = O1(0) + D1 / 2 / Sqr(2): P1(1) = O1(1) - D1 / 2 / Sqr(2): P1(2) = 0
P2(0) = O1(0) - D1 / 2 / Sqr(2): P2(1) = O1(1) + D1 / 2 / Sqr(2): P2(2) = 0
Set Dimcir = ThisDrawing.ModelSpace.AddDimDiametric(P1, P2, 3)
Dimcir.Move Dbd, Dkt
Dimcir.Rotate Dkt, Goc
P1(0) = O2(0) + H / 2 / Sqr(2): P1(1) = O2(1) - H / 2 / Sqr(2): P1(2) = 0
P2(0) = O2(0) - H / 2 / Sqr(2): P2(1) = O2(1) + H / 2 / Sqr(2): P2(2) = 0
Set Dimcir = ThisDrawing.ModelSpace.AddDimDiametric(P1, P2, 3)
Dimcir.Move Dbd, Dkt
Dimcir.Rotate Dkt, Goc
I(0) = O4(0) - (D / 2 + R) * Cos(Anpha): I(1) = O1(1) + B / 2 + R: I(2) = 0
Nx(0) = I(0) + R * Sqr(2) / 2: Nx(1) = I(1) - R * Sqr(2) / 2: I(2) = 0

Sinh viên: Hoàng Văn Quang

Trang 17



Bài tập lớn môn học: Tự động hóa thiết kế
Set Dimobj1 = ThisDrawing.ModelSpace.AddDimRadial(I, Nx, 3)
Dimobj1.Move Dbd, Dkt
Dimobj1.Rotate Dkt, Goc
P1(0) = O2(0): P1(1) = O2(1) - B / 2: P1(2) = 0
P2(0) = O2(0): P2(1) = O2(1) + B / 2: P2(2) = 0
Set Dimobj = ThisDrawing.ModelSpace.AddDimAligned(P1, P2, Location4)
Dimobj.Move Dbd, Dkt
Dimobj.Rotate Dkt, Goc
Else
P1(0) = O3(0): P1(1) = O3(1) - D / 2: P1(2) = 0
P2(0) = O3(0) + T: P2(1) = O3(1) - D / 2: P2(2) = 0
Set Dimobj = ThisDrawing.ModelSpace.AddDimAligned(P1, P2, Location3)
Dimobj.Move Dbd, Dkt
Dimobj.Move O3, Dbd
Dimobj.Rotate Dkt, Goc
End If
End If
'Thiết lập lớp hiện hành là duongtam
ThisDrawing.ActiveLayer = ThisDrawing.Layers("duongtam")
If Hc = 0 Then
P1(0) = O1(0): P1(1) = O1(1) + D / 2 + T: P1(2) = 0
P2(0) = O1(0): P2(1) = O1(1) - D / 2 - T: P2(2) = 0
Set L = ThisDrawing.ModelSpace.AddLine(P1, P2)
L.Move Dbd, Dkt
L.Rotate Dkt, Goc
P1(0) = O4(0): P1(1) = O4(1) + D / 2 + T: P1(2) = 0
P2(0) = O4(0): P2(1) = O4(1) - D / 2 - T: P2(2) = 0
Set L = ThisDrawing.ModelSpace.AddLine(P1, P2)
L.Move Dbd, Dkt

L.Rotate Dkt, Goc
P1(0) = O1(0) - D / 2 - T: P1(1) = O1(1): P1(2) = 0

Sinh viên: Hoàng Văn Quang

Trang 18


Bài tập lớn môn học: Tự động hóa thiết kế
P2(0) = O4(0) + D / 2 + T: P2(1) = O1(1): P2(2) = 0
Set L = ThisDrawing.ModelSpace.AddLine(P1, P2)
L.Move Dbd, Dkt
L.Rotate Dkt, Goc
P1(0) = O2(0): P1(1) = O2(1) + H / 2 + T / 2: P1(2) = 0
P2(0) = O2(0): P2(1) = O2(1) - H / 2 - T / 2: P2(2) = 0
Set L = ThisDrawing.ModelSpace.AddLine(P1, P2)
L.Move Dbd, Dkt
L.Rotate Dkt, Goc
Else
P1(0) = O3(0) - T / 2: P1(1) = O3(1): P1(2) = 0
P2(0) = O3(0) + 3 * T / 2: P2(1) = O3(1): P2(2) = 0
Set L = ThisDrawing.ModelSpace.AddLine(P1, P2)
L.Move Dbd, Dkt
L.Move O3, Dbd
L.Rotate Dkt, Goc
End If

' vẽ bích
'Thiết lập lớp hiện hành là netlien
ThisDrawing.ActiveLayer = ThisDrawing.Layers("netlien")

If Hc = 0 Then
Set C = ThisDrawing.ModelSpace.AddCircle(O1, D1 / 2)
C.Move Dbd, Dkt
C.Rotate Dkt, Goc
Set C = ThisDrawing.ModelSpace.AddCircle(O2, H / 2)
C.Move Dbd, Dkt
C.Rotate Dkt, Goc
Set Arc = ThisDrawing.ModelSpace.AddArc(O1, D / 2, Anpha, 2 * pi - Anpha)
Arc.Move Dbd, Dkt
Arc.Rotate Dkt, Goc

Sinh viên: Hoàng Văn Quang

Trang 19


Bài tập lớn môn học: Tự động hóa thiết kế
Set Arc = ThisDrawing.ModelSpace.AddArc(O4, D / 2, pi + Anpha, 3 * pi Anpha)
Arc.Move Dbd, Dkt
Arc.Rotate Dkt, Goc
I(0) = O1(0) + (D / 2 + R) * Cos(Anpha): I(1) = O1(1) + B / 2 + R: I(2) = 0
Set Arc = ThisDrawing.ModelSpace.AddArc(I, R, pi + Anpha, 3 * pi / 2)
Arc.Move Dbd, Dkt
Arc.Rotate Dkt, Goc
I(0) = O1(0) + (D / 2 + R) * Cos(Anpha): I(1) = O1(1) - B / 2 - R: I(2) = 0
Set Arc = ThisDrawing.ModelSpace.AddArc(I, R, pi / 2, pi - Anpha)
Arc.Move Dbd, Dkt
Arc.Rotate Dkt, Goc
I(0) = O4(0) - (D / 2 + R) * Cos(Anpha): I(1) = O1(1) + B / 2 + R: I(2) = 0
Set Arc = ThisDrawing.ModelSpace.AddArc(I, R, 3 * pi / 2, 2 * pi - Anpha)

Arc.Move Dbd, Dkt
Arc.Rotate Dkt, Goc
I(0) = O4(0) - (D / 2 + R) * Cos(Anpha): I(1) = O1(1) - B / 2 - R: I(2) = 0
Set Arc = ThisDrawing.ModelSpace.AddArc(I, R, Anpha, pi / 2)
Arc.Move Dbd, Dkt
Arc.Rotate Dkt, Goc
P1(0) = O1(0) + (D / 2 + R) * Cos(Anpha): P1(1) = O1(1) + B / 2: P1(2) = 0
P2(0) = O4(0) - (D / 2 + R) * Cos(Anpha): P2(1) = O1(1) + B / 2: P2(2) = 0
Set L = ThisDrawing.ModelSpace.AddLine(P1, P2)
L.Move Dbd, Dkt
L.Rotate Dkt, Goc
P1(0) = O1(0) + (D / 2 + R) * Cos(Anpha): P1(1) = O1(1) - B / 2: P1(2) = 0
P2(0) = O4(0) - (D / 2 + R) * Cos(Anpha): P2(1) = O1(1) - B / 2: P2(2) = 0
Set L = ThisDrawing.ModelSpace.AddLine(P1, P2)
L.Move Dbd, Dkt
L.Rotate Dkt, Goc
Else
Dim Points(0 To 9) As Double
Points(0) = O3(0): Points(1) = O3(1) - D / 2

Sinh viên: Hoàng Văn Quang

Trang 20


Bài tập lớn môn học: Tự động hóa thiết kế
Points(2) = Points(0) + T: Points(3) = Points(1)
Points(4) = Points(2): Points(5) = Points(3) + D
Points(6) = Points(0): Points(7) = Points(5)
Points(8) = Points(0): Points(9) = Points(1)

Set PlineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(Points)
PlineObj.Move Dbd, Dkt
PlineObj.Move O3, Dbd
PlineObj.Rotate Dkt, Goc
End If
' xác định giá trị goc nghieng
Dim zxc, zxc1 As Integer
zxc = ThisDrawing.ModelSpace.Count
For zxc1 = 0 To zxc - 1
ThisDrawing.ModelSpace.Item(zxc1).Linetype = "BYLAYER"
ThisDrawing.ModelSpace.Item(zxc1).Lineweight = acLnWtByLayer
ThisDrawing.ModelSpace.Item(zxc1).Update
Next zxc1
ZoomExtents
Me.Show
End Sub
' hàm cho button thoát
Private Sub cmbthoat_Click()
End
End Sub
'hiển thị form hdsd
Private Sub CommandButton1_Click()
Me.Hide
hdsd.Show
End Sub
'hiển thị form tác giả
Private Sub CommandButton2_Click()

Sinh viên: Hoàng Văn Quang


Trang 21


Bài tập lớn môn học: Tự động hóa thiết kế
Me.Hide
tacgia.Show
End Sub
2.2 Hàm cho form hướng dẫn sử dụng
'quay về form chính
Private Sub CommandButton1_Click()
Me.Hide
bick5k.Show
End Sub
'thoát
Private Sub CommandButton2_Click()
End
End Sub
'đến form tác giả
Private Sub CommandButton3_Click()
Me.Hide
tacgia.Show
End Sub

Sinh viên: Hoàng Văn Quang

Trang 22


Bài tập lớn môn học: Tự động hóa thiết kế


3 PHẦN 3 THỬ BỘI SỐ
3.1 Thông số thử
Sau khi chạy chương trình ta nhập các thông số để vẽ như sau:

Hình 3-1:

Thông số chạy thử

3.2 Kết quả chạy thử
Sau khi nhấn nút vẽ ta nhận được kết quả:

Sinh viên: Hoàng Văn Quang

Trang 23


Bài tập lớn môn học: Tự động hóa thiết kế

0
20

0
10

R20

Ø179

Ø19


0
12
Ø141

Hình 3-2:

Kết quả chạy thử

3.3 Nhận xét
Kết quả thu được từ việc vẽ bằng chương trình giống với số liệu từ bảng
các thông số ứng với bích đã chọn.

Sinh viên: Hoàng Văn Quang

Trang 24



×