Phát triển AutoCAD bằng ActiveX & VBA - Chương 3: Điều khiển môi trường AutoCAD

Chương này trình bày những vấn đề cơ bản cần biết

để xây dựng một ứng dụng trong AutoCAD cũng

như sẽ giải thích rõ cách thức điều khiển môi trường

AutoCAD và cách làm việc hiệu quả trong môi

trường này.

pdf 30 trang dienloan 4240
Bạn đang xem 20 trang mẫu của tài liệu "Phát triển AutoCAD bằng ActiveX & VBA - Chương 3: Điều khiển môi trường AutoCAD", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Phát triển AutoCAD bằng ActiveX & VBA - Chương 3: Điều khiển môi trường AutoCAD

Phát triển AutoCAD bằng ActiveX & VBA - Chương 3: Điều khiển môi trường AutoCAD
 Phát triển ứng dụng ActiveX và VBA | 61 
ĐIỀU KHIỂN MÔI TRƯỜNG 
AutoCAD 
3
Trong chương này
ƒ Mở, Lưu và Đóng các bản 
vẽ 
ƒ Thiết lập các lựa chọn 
trong AutoCAD 
ƒ Điều khiển cửa sổ ứng 
dụng 
ƒ Điều khiển cửa sổ bản vẽ 
ƒ Thiết lập lại các đối 
tượng hiện hành 
ƒ Gán và lấy biến hệ thống 
ƒ Vẽ với độ chính xác cao 
ƒ Nhắc người dùng nhập 
dữ liệu 
ƒ Truy xuất dòng lệnh của 
AutoCAD 
ƒ Thao tác khi không mở 
bản vẽ nào 
ƒ Nhập vào các định dạng 
khác 
ƒ Xuất sang các định dạng 
khác 
Chương này trình bày những vấn đề cơ bản cần biết 
để xây dựng một ứng dụng trong AutoCAD cũng 
như sẽ giải thích rõ cách thức điều khiển môi trường 
AutoCAD và cách làm việc hiệu quả trong môi 
trường này. 
 62 | Chương 3: Điều khiển môi trường AutoCAD 
1. Mở, Lưu và Đóng các bản vẽ 
Tập Documents và đối tượng Document cho phép thực hiện các hàm liên quan đến 
tệp trong AutoCAD. 
Để tạo một bản vẽ mới, hoặc mở một bản vẽ đã có, ta phải sử dụng các phương thức 
trong tập đối tượng Documents. Phương thức Add sẽ tạo một bản vẽ mới và thêm 
bản vẽ đó vào tập đối tượng Documents. Phương thức Open sẽ mở một bản vẽ đã 
có. Ngoài ra còn có phương thức Close trong tập đối tượng Documents dùng để 
đóng tất các các bản vẽ đang mở trong phiên làm việc của AutoCAD. 
Để lưu, nhập hoặc xuất một bản vẽ, ta sử dụng các phương thức của đối tượng 
Document: Save, Save As, Import và Export. 
1.1. Mở bản vẽ 
Ví dụ sau sử dụng phương thức Open để mở một bản vẽ đã có. Hàm Dir của 
Visual Basic dùng để kiểm tra sự tồn tại của tệp trước khi tiến hành mở bản vẽ. Ta 
nên thay đổi tên bản vẽ hoặc đường dẫn để chỉ đến một bản vẽ đã có trong hệ thống. 
Sub Ch3_OpenDrawing() 
Dim dwgName As String 
dwgName = "c:\Program Files\acad2000\sample\campus.dwg" 
If Dir(dwgName) "" Then 
ThisDrawing.Application.Documents.Open dwgName 
Else 
MsgBox "File " & dwgName & " does not exist." 
End If 
End Sub 
1.2. Tạo bản vẽ mới 
Ví dụ này sử dụng phương thức Add để tạo một bản vẽ mới dựa trên khuôn thức 
mặc định. 
Sub Ch3_NewDrawing() 
 Dim docObj As AcadDocument 
 Set docObj = ThisDrawing.Application.Documents.Add 
End Sub 
1.3. Lưu bản vẽ 
Có thể dụng phương thức Save hoặc Save As để lưu bản vẽ. 
Lưu bản vẽ hiện hành 
Ví dụ sau sẽ lưu bản vẽ hiện hành sử dụng tên tệp sẵn có đồng thời cũng lưu bản vẽ 
với một tên khác. 
Sub Ch3_SaveActiveDrawing() 
’ Lưu bản vẽ hiện hành sử dụng tên tệp sẵn có 
ThisDrawing.Save 
’ Lưu bản vẽ sử dụng tên khác 
ThisDrawing.SaveAs "MyDrawing.dwg" 
End Sub 
 Phát triển AutoCAD bằng ActiveX và VBA | 63 
Thông thường, khi ta muốn kiểm tra xem bản vẽ hiện hành có lưu những thay đổi 
hay chưa trước khi thoát khỏi phiên làm việc của AutoCAD hoặc khi bắt đầu một 
bản vẽ mới, hãy sử dụng thuộc tính Saved để kiểm tra chắc chắn rằng bản vẽ đã lưu 
những thay đổi trước đó. 
Kiểm tra xem bản vẽ đã lưu hay chưa 
Ví dụ sau sẽ kiểm tra xem bản vẽ đã được lưu hay chưa và sẽ hỏi người dùng xem 
có đồng ý để lưu bản vẽ hay không (Nếu không đồng ý, sẽ thoát khỏi chương trình). 
Nếu đồng ý, sẽ sử dụng phương thức Save để lưu bản vẽ hiện hành. 
Sub Ch3_TestIfSaved() 
If Not (ThisDrawing.Saved) Then 
If MsgBox("Do you wish to save this drawing?", _ 
vbYesNo) = vbYes Then 
ThisDrawing.Save 
End If 
End If 
End Sub 
2. Thiết lập các lựa chọn trong AutoCAD 
Có chín đối tượng gắn với các lựa chọn khác nhau, mỗi đối tượng tương ứng với 
một thẻ trong hộp thoại Options. Thông qua các đối tượng này, ta có thể truy cập 
được tất cả các dữ liệu về lựa chọn được lưu giữ trong hộp thoại Options. Do vậy, 
người lập trình có thể tuỳ biến các thiết lập trong AutoCAD thông qua các thuộc 
tính có trong những đối tượng đó. Chín đối tượng này bao gồm: 
ƒ PreferencesDisplay 
ƒ PreferencesDrafting 
ƒ PreferencesFiles 
ƒ PreferencesOpenSave 
ƒ PreferencesOutPut 
ƒ PreferencesProFile 
ƒ PreferencesSelection 
ƒ PreferencesSystem 
ƒ PreferencesUser 
Tất cả các đối tượng trên đều có thể được truy xuất thông qua đối tượng 
Preferences. Để có được quyền truy cập đến đối tượng Preferences, ta sử dụng 
thuộc tính Preferences của đối tượng Application như sau: 
Truy xuất đối tượng Preference 
Dim acadPref As AcadPreferences 
Set acadPref = ThisDrawing.Application.Preferences 
Sau đó, người lập trình có thể truy xuất đến bất kỳ đối tượng Preferences nào sử 
dụng các thuộc tính Display, Drafting, Files, OpenSave, Output, Profile, Selection, 
 64 | Chương 3: Điều khiển môi trường AutoCAD 
System và User. Ví dụ: người lập trình có thể điều chỉnh kích thước của dấu thập 
con trỏ với thuộc tính CursorSize. 
Thiết lập kích thước dấu thập con trỏ thành toàn màn hình 
Ví dụ này thiết lập kích thước dấu thập con trỏ thành toàn màn hình 
acadPref.Display.CursorSize=100 
Người lập trình có thể muốn ứng dụng của mình kích hoạt hoặc vô hiệu hoá một số 
tính năng nào đó trong giao diện AutoCAD. 
Hiển thị screen menu1 và các thanh cuộn 
Ví dụ sau đây kích hoạt screen menu và vô hiệu hoá các thanh cuộn sử dụng thuộc 
tính DisplayScreenMenu và DisplayScrollBars 
acadPref.Display.DisplayScreenMenu = True 
acadPref.Display.DisplayScrollBars = False 
2.2. Lựa chọn về CSDL 
Ngoài 9 đối tượng Preferences, đối tượng DatabasePrefernces bao gồm những lựa 
chọn được lưu trong bản vẽ. Đối tượng tách biệt này được dùng để chứa các lựa 
chọn lưu cùng bản vẽ sử dụng cho các ứng dụng truy xuất vào trong bản vẽ 
AutoCAD mà không cần phải có trước chương trình AutoCAD (ứng dụng 
ObjectDBXTM 2). 
Đối tượng DatabasePreferences nằm trong đối tượng Document. 
3. Điều khiển cửa sổ ứng dụng 
Khả năng điều khiển cửa sổ ứng dụng đem đến cho người phát triển ứng dụng tính 
linh hoạt để tạo ra những chương trình thật hiệu quả và thông minh. Sẽ có những 
lúc ứng dụng cần phải thu nhỏ cửa sổ AutoCAD, có lẽ là lúc chương trình thực hiện 
các thao tác trong các chương trình khác, chẳng hạn như Excel. Thêm nữa, ta cũng 
cần phải thường xuyên kiểm tra trạng thái của cửa sổ ứng dụng AutoCAD trước khi 
thực hiện các thao tác, chẳng hạn như nhắc nhập liệu từ người dùng. 
Bằng cách sử dụng các phương thức và thuộc tính trong đối tượng Application, ta 
có thể thay đổi vị trí, kích thước và tính nhìn thấy của cửa sổ ứng dụng. Ngoài ra ta 
cũng có thể thu nhỏ hoặc phóng to cửa sổ ứng dụng, kiểm tra trạng thái hiện hành 
của cửa sổ. 
1 Screen menu: là một dạng trình đơn được tổ chức theo phương thẳng đứng của màn hình (thường 
ở bên phải) để thực hiện các chức năng hỗ trợ cho lệnh đang thực thi của AutoCAD. 
2 ObjectDBXTM, hiện nay đã được đổi tên thành RealDWG, là thư viện phần mềm cho phép người 
phát triển C++ và .NET thực hiện các thao tác đọc và ghi tệp AutoCAD DWG và DXF mà không 
cần phải cài đặt chương trình AutoCAD. 
 Phát triển AutoCAD bằng ActiveX và VBA | 65 
3.1. Thay đổi vị trí và kích thước của cửa sổ ứng dụng 
Người lập trình còn có thể sử dụng đối tượng Application để điều chỉnh vị trí và 
kích thước của cửa sổ ứng dụng AutoCAD. 
Định vị trí cửa sổ ứng dụng 
Ví dụ dưới đây sử dụng thuộc tính WindowTop, WindowLeft, Width, và Height để 
định vị trí của cửa sổ ứng dụng AutoCAD ở góc trên bên trái của màn hình và định 
kích thước của cửa sổ là 400 điểm theo chiều rộng và 400 điểm theo chiều cao. 
Sub Ch3_PositionApplicationWindow() 
 ThisDrawing.Application.WindowTop = 0 
 ThisDrawing.Application.WindowLeft = 0 
 ThisDrawing.Application.Width = 400 
 ThisDrawing.Application.Height = 400 
End Sub 
3.2. Thu phóng cửa sổ ứng dụng AutoCAD 
Cửa sổ AutoCAD có thể được thu nhỏ hoặc phóng to bằng cách sử dụng thuộc tính 
WindowState. Những ví dụ sau minh hoạ điều này. 
Phóng to cửa sổ ứng dụng 
ThisDrawing.Application.WindowState = acMax 
Thu nhỏ cửa sổ ứng dụng 
ThisDrawing.Application.WindowState = acMin 
3.3. Xác định trạng thái hiện hành của cửa sổ AutoCAD 
Trạng thái hiện hành của cửa sổ AutoCAD có thể xác định được bằng cách sử dụng 
thuộc tính WindowState. 
Xác định trạng thái hiện hành của cửa sổ ứng dụng 
Ví dụ sau sẽ truy vấn trạng thái của cửa sổ ứng dụng và hiển thị trạng thái cửa sổ 
trong một hộp thông báo. 
Sub Ch3_CurrentWindowState() 
 Dim CurrWindowState As Integer 
 Dim msg As String 
 CurrWindowState = ThisDrawing.Application.WindowState 
 msg = Choose _ 
 (CurrWindowState, "Bình thường", "Thu nhỏ", "Phóng to") 
 MsgBox "Trạng thái hiện hành của cửa sổ là: " + msg 
End Sub 
3.4. Ẩn cửa sổ ứng dụng 
Có thể ẩn cửa sổ ứng dụng khỏi màn hình của người dùng. 
Ẩn cửa sổ ứng dụng 
Đoạn mã sau sử dụng thuộc tính Visible để ẩn cửa sổ ứng dụng: 
ThisDrawing.Application.Visible = False 
 66 | Chương 3: Điều khiển môi trường AutoCAD 
4. Điều khiển cửa sổ bản vẽ 
Cũng giống như cửa sổ ứng dụng AutoCAD, ta có thể thu nhỏ, phóng to, định lại vị 
trí, thay đổi kích thước và kiểm tra trạng thái của bất kỳ một cửa sổ bản vẽ nào. Tuy 
nhiên, ta còn có thể thay đổi cách thức thể hiện bản vẽ trong cửa sổ bằng cách sử 
dụng các phương thức về cảnh nhìn (views), khung nhìn (viewports) và thu phóng 
(zooming). 
AutoCAD ActiveX cung cấp nhiều cách thức thể hiện bản vẽ. Ta có thể điều khiển 
sự hiển thị của bản vẽ để di chuyển nhanh đến những vùng khác nhau của bản vẽ 
trong khi có thể theo dõi toàn bộ hiệu ứng của các thay đổi. Ngoài ra cũng có thể 
thay đổi độ phóng đại của bản vẽ hoặc trượt bản vẽ để định lại vị trí quan sát trong 
vùng đồ hoạ, lưu cảnh nhìn và khôi phục lại khi cần để in hoặc tham khảo đến một 
chi tiết cụ thể nào đó, hoặc thể hiện vài cảnh nhìn cùng một lúc bằng cách phân màn 
hình thành vài khung nhìn xếp cạnh nhau. 
4.1. Thay đổi vị trí và kích thước của cửa sổ bản vẽ 
Sử dụng đối tượng Document để điều chỉnh vị trí và kích thước của các cửa sổ bản 
vẽ. 
Định vị trí của cửa sổ bản vẽ 
Ví dụ sau sử dụng thuộc tính Width và Height để thiết lập kích thước cửa sổ bản vẽ 
hiện hành với bề rộng 400 điểm và chiều cao 400 điểm. 
ThisDrawing.Width = 400 
ThisDrawing.Height = 400 
4.2. Thu phóng cửa sổ bản vẽ 
Cửa sổ bản vẽ có thể được thu nhỏ hoặc phóng to sử dụng thuộc tính WindowState. 
Phóng to cửa sổ bản vẽ hiện hành 
ThisDrawing.WindowState = acMax 
Thu nhỏ cửa sổ bản vẽ hiện hành 
ThisDrawing.WindowState = acMin 
4.3. Xác định trạng thái hiện hành của cửa sổ bản vẽ 
Có thể xác định cửa sổ hiện hành của cửa sổ bản vẽ bằng cách sử dụng thuộc tính 
WindowState. 
Xác định trạng thái hiện hành của cửa sổ bản vẽ hiện hành 
Sub Ch3_CurrentWindowState() 
 Dim CurrWindowState As Integer 
 Dim msg As String 
 CurrWindowState = ThisDrawing.WindowState 
 msg = Choose(CurrWindowState, "Bình thường", "Thu nhỏ", "Phóng 
to") 
 MsgBox "Trạng thái hiện hành của cửa sổ bản vẽ là " + msg 
End Sub 
 Phát triển AutoCAD bằng ActiveX và VBA | 67 
4.4. Sử dụng chức năng thu phóng 
Cảnh nhìn là sự quan sát bản vẽ với độ phóng đại, vị trí và hướng nhất định. Cách 
phổ biến nhất để thay đổi cảnh nhìn là sử dụng một trong rất nhiều lựa chọn trong 
lệnh Zoom để tăng hay giảm kích thước hình ảnh hiển thị trong vùng đồ hoạ. 
Phóng hình ảnh ra để quan sát chi tiết gọi là phóng to. Còn thu hình ảnh lại để quan 
sát tổng quát hơn gọi là thu nhỏ. 
 Thu nhỏ (Zoom out) Phóng to (Zoom in) 
Phóng to không thay đổi kích thước tuyệt đối của bản vẽ, chỉ thay đổi kích thước 
thể hiện trong vùng đồ hoạ. AutoCAD đưa ra nhiều cách để thay đổi cảnh nhìn, bao 
gồm xác định vùng hiển thị, phóng đại đến một tỷ lệ nhất định và thể hiện toàn bộ 
bản vẽ. 
4.4.1. Xác định cửa sổ phóng đại 
Người lập trình có thể nhanh chóng phóng đại một vùng trên bản vẽ bằng cách xác 
định góc định vị cho vùng đó. 
Cửa sổ 
phóng đại 
 Cảnh nhìn ban đầu Cảnh nhìn mới 
Vùng được xác định bằng góc định vị đã lựa chọn sẽ được canh vào giữa vùng đồ 
hoạ nếu vùng phóng đại không có kích thước tỷ lệ với khung nhìn hiện hành. 
Để thực hiện phóng đại một vùng theo đường bao cho trước, ta có thể sử dụng một 
trong hai phương thức ZoomWindow hoặc ZoomPickWindow. Phương thức 
ZoomWindow cho phép lập trình để định nghĩa hai điểm để làm cửa sổ bao. Còn 
phương thức ZoomPickWindow lại yêu cầu người dùng phải chọn hai điểm trên 
màn hình và hai điểm này sẽ trở thành điểm để làm cửa sổ bao. 
Phóng đại bản vẽ hiện hành theo một cửa sổ bao xác định bởi hai điểm 
Sub Ch3_ZoomWindow() 
 MsgBox "Dùng phương thức ZoomWindow với:" & vbCrLf & _ 
 "1.3, 7.8, 0" & vbCrLf & _ 
 "13.7, -2.6, 0", , "ZoomWindow" 
 Dim point1(0 To 2) As Double 
 Dim point2(0 To 2) As Double 
 point1(0) = 1.3: point1(1) = 7.8: point1(2) = 0 
 68 | Chương 3: Điều khiển môi trường AutoCAD 
 point2(0) = 13.7: point2(1) = -2.6: point2(2) = 0 
 ThisDrawing.Application.ZoomWindow point1, point2 
 MsgBox " Dùng phương thức ZoomPickWindow", , "ZoomPickWindow" 
 ThisDrawing.Application.ZoomPickWindow 
End Sub 
4.4.2. Tỷ lệ của cảnh nhìn 
Nếu cần tăng hoặc giảm mức phóng đại của hình ảnh theo một tỷ lệ chính xác, ta có 
thể thực hiện theo 3 cách: 
ƒ Tương đối so với vùng giới hạn vẽ 
ƒ Tương đối so với cảnh nhìn hiện hành 
ƒ Tương đối so với đơn vị trang in 
Khi thay đổi tỷ lệ cảnh nhìn tương đối so với vùng giới hạn vẽ, chỉ cần nhập giá trị 
bằng 1 để hiện tất cả giới hạn của vùng vẽ trong vùng đồ hoạ và tất cả sẽ được canh 
giữa theo điểm giữa của cảnh nhìn trước đó. Để phóng to hay thu nhỏ, chỉ cần nhập 
vào số lớn hơn hoặc nhỏ hơn 1. Ví dụ, nhập vào số 2 sẽ cho cảnh nhìn lớn gấp 2 lần 
so với khi quan sát toàn bộ bản vẽ hoặc 0.5 khi cảnh nhìn chỉ bằng một nửa so với 
khi quan sát toàn bộ bản vẽ. 
Khi thay đổi tỷ lệ cảnh nhìn tương đối so với cảnh nhìn hiện hành, chỉ cần nhập vào 
số 2 để nhân đôi hay 0.5 để hiện chỉ một nửa kích thước so với cảnh nhìn hiện hành. 
Và đương nhiên nhập vào số 1 thì sẽ không có hiệu ứng gì. 
Khi thay đổi tỷ lệ cảnh nhìn tương đối so với đơn vị trang in, giá trị tỷ lệ nhập vào 
sẽ có thể tăng hoặc giảm cảnh nhìn tương đối so với tỷ lệ hiện tại trong không gian 
in và được sử dụng để thay đổi tỷ lệ của khung nhìn trước khi in. 
4.4.2.1. Tạo cảnh nhìn theo tỷ lệ 
Để tạo cảnh nhìn theo tỷ lệ, phải sử dụng phương thức ZoomScaled. Phương thức 
này cần có hai thông số đầu vào: tỷ lệ và loại tỷ lệ. Tỷ lệ: đơn giản chỉ là một con 
số. Việc xử lý con số này trong AutoCAD phụ thuộc vào loại tỷ lệ được lựa chọn. 
Loại tỷ lệ sẽ xác định cách thức cần thể hiện theo tỷ lệ, bao gồm: tương đối so với 
vùng giới hạn vẽ, so với cảnh nhìn hiện hành, hay so với đơn vị trang in. Để thay 
đổi tỷ lệ tương đối so với vùng giới hạn vẽ, ta sử dụng hằng số 
acZoomScaledAbsolute. Để thay đổi tỷ lệ so với cảnh nhìn hiện hành, sử dụng 
hằng số acZoomScaledRelative. Để thay đổi tỷ lệ so với đơn vị trang in, sử 
dụng hằng số acZoomScaledRelativePSpace. 
Phóng đại bản vẽ hiện hành với tỷ lệ cho trước 
Sub Ch3_ZoomScaled() 
MsgBox "Perform a ZoomScaled using:" & vbCrLf & _ 
"Scale Type: acZoomScaledRelative" & vbCrLf & _ 
"Scale Factor: 2", , "ZoomScaled" 
Dim scalefactor As Double 
Dim scaletype As Integer 
scalefactor = 2 
scaletype = acZoomScaledRelative  ... 
không gian 2D và 3D do người dùng nhập vào. Các điểm này cần phải nằm trên 
cùng một mặt phẳng. 
Để xác định diện tích vùng dựa trên các điểm do người dùng nhập vào: 
ƒ Sử dụng phương thức GetPoint trong vòng lặp để cho người dùng nhập các 
điểm 
ƒ Tạo đường đa tuyến có bề dày từ các điểm do người dùng nhập vào. Sử 
dụng phương thức AddLightweightPolyline để tạo đường đa tuyến 
 84 | Chương 3: Điều khiển môi trường AutoCAD 
ƒ Sử dụng thuộc tính Area để xác định diện tích của đường đa tuyến vừa mới 
tạo ra 
ƒ Xóa đường đa tuyến sử dụng phương thức Erase. 
Tính diện tích từ các điểm do người dùng nhập vào 
Ví dụ sau nhắc người dùng nhập vào 5 điểm. Sau đó ta tạo một đường đa tuyến từ 
các điểm nói trên. Sau đó đường đa tuyến sẽ được khép kín, và diện tích của đường 
đa tuyến sẽ được hiển thị trong hộp thông báo. 
Sub Ch3_CalculateDefinedArea() 
Dim p1 As Variant 
Dim p2 As Variant 
Dim p3 As Variant 
Dim p4 As Variant 
Dim p5 As Variant 
’ Nhập vào các điểm 
p1 = ThisDrawing.Utility.GetPoint(, vbCrLf & "First point: ") 
p2 = ThisDrawing.Utility.GetPoint(p1, vbCrLf & "Second point: ") 
p3 = ThisDrawing.Utility.GetPoint(p2, vbCrLf & "Third point: ") 
p4 = ThisDrawing.Utility.GetPoint(p3, vbCrLf & "Fourth point: ") 
p5 = ThisDrawing.Utility.GetPoint(p4, vbCrLf & "Fifth point: ") 
’ Tạo đường đa tuyến 2D từ các điểm vừa nhập 
Dim polyObj As AcadLWPolyline 
Dim vertices(0 To 9) As Double 
vertices(0) = p1(0): vertices(1) = p1(1) 
vertices(2) = p2(0): vertices(3) = p2(1) 
vertices(4) = p3(0): vertices(5) = p3(1) 
vertices(6) = p4(0): vertices(7) = p4(1) 
vertices(8) = p5(0): vertices(9) = p5(1) 
Set polyObj = ThisDrawing.ModelSpace.AddLightWeightPolyline _ 
(vertices) 
polyObj.Closed = True 
ThisDrawing.Application.ZoomAll 
’ Tính diện tích đường đa tuyến 
MsgBox "The area defined the by points is " & _ 
polyObj.Area, , "Calculate Defined Area" 
End Sub 
8. Nhắc người dùng nhập liệu 
Đối tượng Utility, đối tượng con của đối tượng Document, định nghĩa các phương 
thức nhập liệu từ người dùng. Các phương thức nhập liệu từ người dùng sẽ hiện thị 
ở dấu nhắc dòng lệnh AutoCAD yêu cầu người sử dụng nhập vào rất nhiều dạng dữ 
liệu khác nhau. Loại dữ liệu từ người dùng kiểu này là cách hữu dụng nhất để nhập 
các dữ liệu tương tác như hệ tọa độ màn hình, chọn các đối tượng, các giá trị kiểu 
short-string hoặc kiểu số. Nếu ứng dụng đòi hỏi phải nhập rất nhiều lựa chọn và số 
liệu khác nhau thì ta nên sử dụng một hộp thoại nhập liệu tốt hơn là việc sử dụng 
từng dấu nhắc dòng lệnh đơn lẻ như vậy. 
Mỗi phương thức nhập dữ liệu từ người dùng đều hiển thị dấu nhắc trên dòng lệnh 
AutoCAD và trả về giá trị phù hợp với kiểu giá trị cần nhập vào. Ví dụ, phương 
 Phát triển AutoCAD bằng ActiveX và VBA | 85 
thức GetString trả về kiểu string, phương thức GetPoint trả về biến kiểu variant (sẽ 
là mảng có ba phần tử kiểu double) và phương thức GetInteger trả về giá trị kiểu số 
nguyên (integer). Ta còn có thể kiểm soát nhiều hơn nữa việc nhập dữ liệu từ người 
dùng bằng cách sử dụng phương thức InitializedUserInput. Phương thức này cho 
phép ta điều khiển được nhiều thứ hơn, chẳng hạn như các giá trị NULL (khi người 
dùng nhấn phím ENTER), nhập vào số 0 hoặc giá trị âm, và nhập vào một đoạn chữ 
bất kỳ. 
Để cho dấu nhắc chỉ hiển thị trên một dòng riêng, sử dụng hằng vbCrLf ở phía đầu 
đoạn chuỗi chứa dấu nhắc. 
8.1. Phương thức GetString 
Phương thức GetString nhắc người dùng nhập vào một chuỗi ở dòng lệnh của 
AutoCAD. Phương thức này cần có 2 tham số. Tham số đầu điều khiển việc nhập 
dấu cách (khoảng trắng) trong chuỗi nhập vào. Nếu được gán là 0, không được nhập 
dấu cách (khi nhấn phím SPACE sẽ kết thúc nhập liệu); nếu gán là 1, chuỗi có thể 
chứa dấu cách (nhấn phím ENTER sẽ kết thúc nhập liệu). Tham số thứ hai là chuỗi 
nhằm nhắc người dùng nhập liệu. 
Nhập một chuỗi từ người dùng trong dòng lệnh AutoCAD 
Ví dụ sau hiển thị dòng nhắc “Enter Your Name”, và yêu cầu người dùng kết thúc 
nhập liệu khi nhấn phím ENTER (dấu cách cũng được cho phép nhập trong chuỗi). 
Giá trị sau đó được lưu trong biến retVal và được hiển thị thông qua hộp thông báo. 
Sub Ch3_GetStringFromUser() 
Dim retVal As String 
retVal = ThisDrawing.Utility.GetString _ 
(1, vbCrLf & "Enter your name: ") 
MsgBox "The name entered was: " & retVal 
End Sub 
Phương thức GetString không cần phải thực hiện trước lời gọi phương thức 
InitializeUserInput. 
8.2. Phương thức GetPoint 
Phương thức GetPoint nhắc người dùng nhập vào điểm trên dòng lệnh AutoCAD. 
Phương thức này cần có 2 tham số, một là điểm trước điểm cần nhập (có thể có) và 
một là chuỗi nhắc người dùng nhập liệu. Nếu có điểm trước đó, sẽ xuất hiện đường 
nối từ điểm đó với vị trí con trỏ chuột. Để điều khiển nhập liệu của người dùng, 
phương thức này có thể thực hiện sau khi thực hiện lời gọi đến phương thức 
InitializeUserInput. 
Nhập điểm từ người dùng 
Ví dụ sau nhắc người dùng nhập vào 2 điểm, sau đó vẽ một đường thẳng nối hai 
điểm này lại. 
Sub Ch3_GetPointsFromUser() 
Dim startPnt As Variant 
Dim endPnt As Variant 
Dim prompt1 As String 
Dim prompt2 As String 
 86 | Chương 3: Điều khiển môi trường AutoCAD 
prompt1 = vbCrLf & "Enter the start point of the line: " 
prompt2 = vbCrLf & "Enter the end point of the line: " 
’ Chọn điểm đầu tiên không có điểm cơ sở 
startPnt = ThisDrawing.Utility.GetPoint(, prompt1) 
’ Sử dụng điểm đã nhập ở trên làm điểm cơ sở 
endPnt = ThisDrawing.Utility.GetPoint(startPnt, prompt2) 
’ Tạo đường thẳng nối hai điểm trên 
ThisDrawing.ModelSpace.AddLine startPnt, endPnt 
ThisDrawing.Application.ZoomAll 
End Sub 
8.3. Phương thức GetKeyword 
Phương thức GetKeyword nhắc người dùng nhập vào từ khóa ở dấu nhắc dòng lệnh 
AutoCAD. Phương thức này chỉ cần có một tham số, là chuỗi chứa nội dung dòng 
nhắc lệnh. Từ khóa và các tham số đầu vào được định nghĩa khi thực hiện lời gọi 
phương thức InitializeUserInput. 
Nhập từ khóa từ dòng lệnh AutoCAD 
Ví dụ sau sẽ bắt người dùng nhập vào một từ khóa bằng cách thiết lập tham số cho 
phương thức InitializeUserInput là 1 (nghĩa là không cho phép người dùng nhập vào 
một giá trị NULL. Tham số thứ hai thiết lập danh sách các từ khóa. 
Sub Ch3_KeyWord() 
Dim keyWord As String 
ThisDrawing.Utility.InitializeUserInput 1, "Line Circle Arc" 
keyWord = ThisDrawing.Utility.GetKeyword _ 
(vbCrLf & "Enter an option (Line/Circle/Arc): ") 
MsgBox keyWord, , "GetKeyword Example" 
End Sub 
Một kiểu nhắc nhập từ khóa thân thiện hơn là kiểu cài đặt một giá trị mặc định nếu 
người dùng nhấn phím ENTER (nhập giá trị NULL). Chú ý một thay đổi nhỏ trong 
ví dụ sau: 
Sub Ch3_KeyWord2() 
Dim keyWord As String 
ThisDrawing.Utility.InitializeUserInput 0, "Line Circle Arc" 
keyWord = ThisDrawing.Utility.GetKeyword _ 
(vbCrLf & "Enter an option (Line/Circle/): ") 
If keyWord = "" Then keyWord = "Arc" 
MsgBox keyWord, , "GetKeyword Example" 
End Sub 
8.4. Điều khiển quá trình nhập liệu của người dùng 
Ta có thể sử dụng phương thức InitializeUserInput để định nghĩa các từ khóa hoặc 
hạn chế kiểu nhập liệu trong các phương thức nhập liệu từ người dùng. Cách sử 
dụng và các tham số cũng tương tự như hàm initget trong AutoLISP. Phương 
thức InitializeUserInput có thể được sử dụng cho các phương thức sau: GetAngle, 
GetCorner, GetDistance, GetInteger, GetKeyword, GetOrientation, GetPoint, and 
GetReal. Phương thức InitializeUserInput không được sử dụng trong phương thức 
 Phát triển AutoCAD bằng ActiveX và VBA | 87 
GetString. Ta có thể sử dụng phương thức GetInput lấy giá trị kiểu string (từ khóa 
hoặc một giá trị bất kỳ) khi người sử dụng không nhập vào một giá trị kiểu string. 
Phương thức InitializeUserInput nhận 2 tham số. Tham số đầu tiên là một giá trị 
định ra lựa chọn cho phương thức mà người dùng sẽ nhập dữ liệu. Tham số thứ hai 
là một chuỗi định nghĩa các từ khóa. 
Nhập một giá trị Integer hoặc một từ khóa từ dòng lệnh AutoCAD 
Ví dụ sau nhắc người dùng nhập vào một số nguyên dương hoặc một từ khóa: 
Sub Ch3_UserInput() 
’ Tham số đầu tiên của InitializeUserInput (6) 
’ giới hạn việc nhập các số nguyên dương, không âm 
’ Tham số thứ 2 là danh sách các từ khóa 
ThisDrawing.Utility.InitializeUserInput 6, "Big Small Regular" 
’ Gán biến promptStr 
Dim promptStr As String 
promptStr = vbCrLf & "Enter the size or (Big/Small/):" 
’ Nhập vào một từ khóa khi dùng phương thức GetInetger sẽ gây lỗi 
’ vì thế cần phải cho phép chương trình tiếp tục và kiểm tra 
’ thông báo lỗi và thiết lập bộ xử lý lỗi để tiếp tục 
’ thực hiện khi gặp lỗi. 
On Error Resume Next 
’ Gán giá trị do người dùng nhập vào 
Dim returnInteger As Integer 
returnInteger = ThisDrawing.Utility.GetInteger(promptStr) 
’ Kiểm tra lỗi. Nễu lỗi trùng với giá trị như ở dưới 
’ thì sử dụng phương thức GetInput để nhận lại giá 
’ trị kiểu string được trả về; trong trường hợp khác, 
’ sử dụng giá trị của biến returnInteger 
If Err.Description = "User input is a keyword" Then 
Dim returnString As String 
returnString = ThisDrawing.Utility.GetInput() 
Err.Clear 
Else 
If returnInteger = 0 Then ’Nếu nhấn phím ENTER 
returnString = "Regular" ’Gán giá trị mặc định 
Else ’Nếu không, 
returnString = returnInteger 
’Sử dụng giá trị nhập vào 
End If 
End If 
’ Hiển thị kết quả 
MsgBox returnString, , "InitializeUserInput Example" 
End Sub 
9. Truy xuất dòng lệnh của AutoCAD 
Ta có thể gửi một lệnh trực tiếp đến dòng lệnh AutoCAD bằng cách sử dụng 
phương thức SendCommand. Phương thức SendCommand sẽ gửi một chuỗi đơn 
đến dòng lệnh AutoCAD. Chuỗi này phải chứa các đầy đủ các tham số theo trình tự 
thực thi của lệnh cần thực hiện. Dấu cách hoặc mã ASCII tương đương với phím 
 88 | Chương 3: Điều khiển môi trường AutoCAD 
ENTER trong chuỗi tương đương với việc nhấn phím ENTER trên bàn phím. 
Không giống như môi trường AutoLISP, việc thực hiện phương thức 
SendCommand mà không có tham số là không hợp lệ. 
Gửi một lệnh đến dòng lệnh AutoCAD 
Ví dụ sau tạo một vòng tròn có tâm (2,2,0) và bán kính là 4. Sau đó thực hiện phóng 
đại lên tất cả bản vẽ (lệnh ZoomAll). Chú ý rằng có một dấu cách ở cuối mỗi chuỗi 
thể hiện việc nhấn phím ENTER khi kết thúc dòng lệnh. 
Sub Ch3_SendACommandToAutoCAD() 
ThisDrawing.SendCommand "_Circle 2,2,0 4 " 
ThisDrawing.SendCommand "_zoom a " 
End Sub 
10. Thao tác khi không mở bản vẽ nào 
Lúc nào AutoCAD cũng khởi động với một bản vẽ mới hoặc một bản vẽ đã có. Tuy 
nhiên, cũng có lúc mà không có bản vẽ nào được mở trong suốt phiên làm việc của 
AutoCAD. 
Nếu ta đóng tất cả các bản vẽ trong giao diện người dùng AutoCAD, ta sẽ chú ý 
thấy có một vài thay đổi trong cửa sổ ứng dụng. Các trình đơn có hiệu lực được 
giảm thiểu chỉ còn File, View, Window, và Help. Trong các trình đơn này, các lựa 
chọn cũng được giảm thiểu. Cũng cần phải chú ý rằng không còn dòng lệnh trong 
giao diện của AutoCAD. 
Tương tự như vậy, giao tiếp ActiveX chỉ cho phép một số thao tác sau khi không có 
bản vẽ nào được mở: 
ƒ Mở một bản vẽ 
ƒ Tạo một bản vẽ mới 
ƒ Nhập một bản vẽ 
ƒ Thoát khỏi AutoCAD 
Những thao tác này đều có trong tập đối tượng Documents. Bên cạnh tập phương 
thức và thuộc tính khá hạn chế của đối tượng Application, các phương thức và 
thuộc tính trong tập đối tượng Documents là giao tiếp duy nhất có hiệu lực khi 
không có bản vẽ nào được mở. Nếu thực hiện các thao tác khác, chẳng hạn như cố 
tình truy cập vào các lựa chọn của người dùng, thì sẽ phát sinh lỗi. 
Ta sử dụng thuộc tính Count trong tập đối tượng Documents để kiểm tra xem 
AutoCAD có ở trạng thái không có bản vẽ nào không. Nếu Documents.Count=0 
có nghĩa là AutoCAD ở trạng thái không có bản vẽ nào. Nếu 
Documents.Count>0 thì có nghĩa là đã có ít nhất một bản vẽ được mở. 
Cần phải đặc biệt lưu ý rằng trong VBA, đối tượng ThisDrawing không được định 
nghĩa khi AutoCAD ở trạng thái không có bản vẽ nào. Đó là do đối tượng 
ThisDrawing tham chiếu đến bản vẽ hiện hành và do vậy khi ở trạng thái không 
có bản vẽ nào mở thì việc cố gắng thực hiện lời gọi đến một Macro nào đó sử dụng 
đối tượng ThisDrawing sẽ làm phát sinh lỗi khi chạy chương trình (lỗi run-time). 
 Phát triển AutoCAD bằng ActiveX và VBA | 89 
Để tránh lỗi này, ta sử dụng một hàm VBA là GetObject để tạo kết nối với 
AutoCAD khi không có bản vẽ nào được mở. 
11. Nhập vào các định dạng khác 
Ta có thể nhập các bản vẽ hoặc hình ảnh của các ứng dụng khác bằng cách thực 
hiện quá trình mở theo một định dạng nào đó. AutoCAD có thể xử lý một số dạng 
thức chuyển đổi các tệp DXF, SAT, BMP, và PostScript. Trong tất cả các phiên bản 
AutoCAD, ta đều có thể thực hiện quá trình nhập một tệp nào đó bằng cách thực 
hiện phương thức Import. Phương thức này cần có 3 tham số đầu vào: tên của tệp 
cần nhập, điểm chèn vào bản vẽ, và hệ số tỷ lệ khi chèn vào bản vẽ hiện hành. 
12. Xuất sang các định dạng khác 
Khi cần sử dụng bản vẽ AutoCAD trong các chương trình khác, ta có thể chuyển 
đổi bản vẽ sang một định dạng khác sử dụng phương thức Export. Phương thức này 
sẽ xuất bản vẽ AutoCAD sang các định dạng WMF, SAT, DXF, DWF hoặc BMP. 
Phương thức Export nhận 3 tham số đầu vào: tên của tệp mới cần tạo, phần mở rộng 
của tệp mới, và tập các đối tượng được lựa chọn để xuất (nếu cần). 
Khi xuất sang các định dạng WMF, SAT hoặc BMP thì tập lựa chọn phải khác 
rỗng. Tập lựa chọn này sẽ xác định rõ đối tượng nào sẽ được xuất sang định dạng 
khác. Nếu không lựa chọn đối tượng nào, sẽ chẳng có gì được xuất ra ngoài cả và sẽ 
mắc phải lỗi đối số không hợp lệ. 
Khi xuất sang các định dạng EPS và DXF, ta không thể chọn được tập đối tượng. 
Toàn bộ bản vẽ sẽ được tự động xuất sang các định dạng này. 
Xuất bản vẽ sang định dạng DXF và nhập ngược lại 
Ví dụ sau sẽ tạo ra một hình tròn trong bản vẽ hiện hành, sau đó được xuất ra tệp 
DXFExport.DXF. Tiếp theo, chương trình sẽ mở một bản vẽ mới và nhập lại tệp 
vừa xuất. 
Sub Ch3_ImportingAndExporting() 
’ Tạo một đường tròn 
Dim circleObj As AcadCircle 
Dim centerPt(0 To 2) As Double 
Dim radius As Double 
centerPt(0) = 2: centerPt(1) = 2: centerPt(2) = 0 
radius = 1 
Set circleObj = ThisDrawing.ModelSpace.AddCircle _ 
(centerPt, radius) 
ThisDrawing.Application.ZoomAll 
’ Tạo một tập đối tượng rỗng 
Dim sset As AcadSelectionSet 
Set sset = ThisDrawing.SelectionSets.Add("NEWSSET") 
’ Xuất bản vẽ hiện tại thành tệp chỉ định từ trước. 
Dim exportTệp As String 
exportTệp = "C:\AutoCAD\DXFExprt" 
ThisDrawing.Export exportTệp, "DXF", sset 
 90 | Chương 3: Điều khiển môi trường AutoCAD 
’ Mở bản vẽ mới 
ThisDrawing.Application.Documents.Add "acad.dwt" 
’ Xác định tệp cần nhập vào 
Dim importTệp As String 
Dim insertPoint(0 To 2) As Double 
Dim scalefactor As Double 
importTệp = "C:\AutoCAD\DXFExprt.dxf" 
insertPoint(0) = 0: insertPoint(1) = 0: insertPoint(2) = 0 
scalefactor = 2# 
’ Nhập vào 
ThisDrawing.Import importTệp, insertPoint, scalefactor 
ThisDrawing.Application.ZoomAll 
End Sub 

File đính kèm:

  • pdfphat_trien_autocad_bang_activex_vba_chuong_3_dieu_khien_moi.pdf