Giáo trình Phát triển AutoCAD bằng ActiveX & VBA - Chương 4: Tạo và hiệu chỉnh thực thể AutoCAD

Trong chương này 4

ƒ Tạo đối tượng

ƒ Hiệu chỉnh đối tượng

ƒ Sử dụng Lớp, Màu sắc và

Kiểu đường

ƒ Thêm văn bản vào bản

vẽ

pdf 63 trang phuongnguyen 3480
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Phát triển AutoCAD bằng ActiveX & VBA - Chương 4: Tạo và hiệu chỉnh thực thể 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: Giáo trình Phát triển AutoCAD bằng ActiveX & VBA - Chương 4: Tạo và hiệu chỉnh thực thể AutoCAD

Giáo trình Phát triển AutoCAD bằng ActiveX & VBA - Chương 4: Tạo và hiệu chỉnh thực thể AutoCAD
 Phát triển ứng dụng ActiveX và VBA | 91 
TẠO VÀ HIỆU CHỈNH THỰC 
THỂ AutoCAD 
4
Trong chương này
ƒ Tạo đối tượng 
ƒ Hiệu chỉnh đối tượng 
ƒ Sử dụng Lớp, Màu sắc và 
Kiểu đường 
ƒ Thêm văn bản vào bản 
vẽ 
Ta có thể tạo rất nhiều đối tượng khác nhau, từ 
những đối tượng đơn giản như đường thẳng và 
đường tròn đến những đối tượng phức tạp hơn như 
đường cong, elip và vùng tô mẫu. Nhìn chung, ta có 
thể thêm các đối tượng vào không gian mô hình sử 
dụng phương thức Add. Ngoài ra, ta cũng có thể 
thêm các đối tượng trong không gian in hay trong 
một khối. 
Sau khi đã được tạo ra, ta có thể thay đổi thuộc tính 
lớp, màu sắc và kiểu đường của đối tượng đó. Ngoài 
ra, ta cũng có thể thêm ký tự để ghi chú cho bản vẽ. 
 92 | Chương 4: Tạo và hiệu chỉnh thực thể AutoCAD 
1. Tạo đối tượng 
Mặc dù có rất nhiều cách khác nhau để tạo một đối tượng đồ họa trong AutoCAD, 
nhưng ActiveX Automation chỉ có một phương thức thức để tạo đối tượng cho mỗi 
đối tượng. Chẳng hạn như trong AutoCAD, có 4 cách khác nhau để tạo một đường 
tròn: (1) xác định tâm và bán kính, (2) xác định 2 điểm là đường kính, (3) xác định 
3 điểm nằm trên chu vi đường tròn, (4) xác định hai đường tiếp tuyến và bán kính. 
Tuy nhiên, trong ActiveX Automation chỉ có một cách duy nhất để tạo đường tròn, 
đó là cách sử dụng 2 giá trị tâm và bán kính. 
CHÚ Ý: Các phương thức tạo đối tượng trong VB và VBA dùng CreateObject hoặc Dim với 
từ khóa New chỉ được sử dụng để tạo mới đối tượng Application trong AutoCAD. Tất cả các 
đối tượng khác của AutoCAD phải được tạo thông qua phương thức Add hoặc 
Add có trong giao tiếp AutoCAD. 
1.1. Xác định đối tượng bao động1 
Tất cả các đối tượng đồ họa đều được tạo trong tập đối tượng ModelSpace (không 
gian mô hình), tập đối tượng PaperSpace (không gian in) hoặc trong đối tượng 
Block (khối). 
Tập đối tượng ModelSpace trả về thông qua thuộc tính ModelSpace và tập đối 
tượng PaperSpace trả về thông qua thuộc tính PaperSpace. 
Có thể tham chiếu trực tiếp những đối tượng này hoặc có thể thông qua biến tự định 
nghĩa. Để tham chiếu trực tiếp, ta tạo đối tượng với toàn bộ cấu trúc phân nhánh. Ví 
dụ như khi tạo một đối tượng line trong không gian mô hình, ta sử dụng dòng lệnh 
sau: 
Set lineObj = ThisDrawing.ModelSpace.AddLine(startPoint,endPoint) 
Để tham chiếu đối tượng thông qua biến tự định nghĩa, ta sẽ định nghĩa biến có kiểu 
là AcadModelSpace và AcadPaperSpace, sau đó gán biến này với bản vẽ hiện hành 
thích hợp. Ví dụ sau sẽ định nghĩa hai biến và gán cho không gian mô hình và 
không gian in hiện hành: 
Dim moSpace As AcadModelSpace 
Dim paSpace As AcadPaperSpace 
Set moSpace = ThisDrawing.ModelSpace 
Set paSpace = ThisDrawing.PaperSpace 
Câu lệnh sau sẽ thêm đối tượng line vào không gian mô hình thông qua biến tự định 
nghĩa: 
Set lineObj = moSpace.AddLine(startPoint,endPoint) 
1 Đối tượng bao động (Container Object): là đối tượng chứa các đối tượng khác, và các đối tượng 
này có thể được lưu trữ hoặc tháo dỡ ngay trong thời gian thực thi chương trình. Khái niệm này 
ngược với khái niệm đối tượng bao tĩnh (composition), cũng chứa các đối tượng khác, nhưng 
những đối tượng này lại cố định trong quá trình dịch và thực thi chương trình. – Nguồn Wikipedia. 
 Phát triển AutoCAD bằng ActiveX và VBA | 93 
1.2. Tạo đường thẳng – đối tượng line 
Đối tượng Line là đối tượng cơ bản nhất trong AutoCAD. Ta có thể tạo rất nhiều 
loại đường thẳng khác nhau: đường thẳng đơn hoặc nhiều đoạn thẳng có hoặc 
không bao gồm đoạn cong. Nhìn chung, ta có thể vẽ các đường thẳng bằng cách 
nhập vào tọa độ của các điểm. Kiểu đường mặc định là CONTINUOUS, là đường 
liền, nhưng cũng có rất nhiều kiểu đường khác nhau sử dụng dấu chấm hoặc dấu 
gạch đứt nét. 
Để tạo một đường thẳng, ta sử dụng một trong những phương thức sau: 
AddLine Tạo đường thẳng đi qua hai điểm. 
AddLightweightPolyline Tạo đường đa tuyến 2D có bề dày từ danh sách đỉnh 
của nó. 
AddMLine Tạo đường thẳng nét đôi. 
AddPolyline Tạo đường đa tuyến 2D hoặc 3D. 
Đối tượng Line và MLine tạo ra trong hệ tọa độ toàn cục (World Coordinate 
System-WCS). Còn các đối tượng Polyline và LightweightPolyline tạo ra trong hệ 
tọa độ địa phương (Object Coordinate System-OCS). Để có thêm thông tin về hệ 
tọa độ OSC, xem thêm mục “Chuyển trục tọa độ” trang 219. 
Tạo đối tượng Polyline 
Ví dụ sau sử dụng phương thức AddLightweightPolyline để tạo một đường đa tuyến 
có hai đoạn thẳng sử dụng hệ tọa độ 2D (2,4), (4,2) và (6,4). 
Sub Ch4_AddLightWeightPolyline() 
Dim plineObj As AcadLWPolyline 
Dim points(0 To 5) As Double 
’ Định nghĩa tọa độ 2D của đường đa tuyến 
points(0) = 2: points(1) = 4 
points(2) = 4: points(3) = 2 
points(4) = 6: points(5) = 4 
’ Tạo đối tượng LightweightPolyline trong không gian mô hình 
Set plineObj = ThisDrawing.ModelSpace. _ 
AddLightWeightPolyline(points) 
ThisDrawing.Application.ZoomAll 
End Sub 
1.3. Tạo đối tượng cong 
Ta có thể tạo rất nhiều loại đối tượng đường cong khác nhau trong AutoCAD, bao 
gồm đường cong spline, hình tròn, cung tròn, elip. Tất cả các đối tượng đường cong 
đều được tạo trong mặt phẳng XY của hệ tọa độ toàn cục hiện hành. 
Để tạo một đường cong, ta có thể sử dụng một trong những phương thức sau: 
AddArc Tạo một cung tròn khi cho trước tâm, bán kính, góc bắt đầu và góc 
kết thúc. 
AddCircle Tạo đường tròn khi cho trước tâm và bán kính. 
 94 | Chương 4: Tạo và hiệu chỉnh thực thể AutoCAD 
AddEllipse Tạo hình Ellipse khi cho trước tâm, một điểm trên trục chính và tỉ số 
bán kính. 
AddSpline Tạo đường cong NURBS (nonuniform rational B-spline – đường 
cong B-spline hữu tỉ không đều) bậc hai hoặc bậc ba. 
Tạo đối tượng Spline 
Ví dụ sau tạo một đường Spline trong không gian mô hình sử dụng ba điểm (0,0,0), 
(5,5,0) và (10,0,0). Đường Spline có tiếp tuyến đầu và cuối là (0.5,0.5,0.0). 
Sub Ch4_CreateSpline() 
’ Tạo đối tượng Spline trong không gian mô hình 
’ Khai báo biến cần thiết 
Dim splineObj As AcadSpline 
Dim noOfPoints As Integer 
Dim startTan(0 To 2) As Double 
Dim endTan(0 To 2) As Double 
Dim fitPoints(0 To 8) As Double 
’ Định nghĩa biến 
noOfPoints = 3 
startTan(0) = 0.5: startTan(1) = 0.5: startTan(2) = 0 
endTan(0) = 0.5: endTan(1) = 0.5: endTan(2) = 0 
fitPoints(0) = 1: fitPoints(1) = 1: fitPoints(2) = 0 
fitPoints(3) = 5: fitPoints(4) = 5: fitPoints(5) = 0 
fitPoints(6) = 10: fitPoints(7) = 0: fitPoints(8) = 0 
’ Tạo đối tượng spline 
Set splineObj = ThisDrawing.ModelSpace.AddSpline _ 
(fitPoints, startTan, endTan) 
ZoomAll 
End Sub 
Để có thêm thông tin về đối tượng Spline, xem thêm về đối tượng Spline và phương 
thức AddSpline trong tài liệu “ActiveX and VBA Reference”. 
1.4. Tạo đối tượng điểm 
Đối tượng Point đôi khi cũng rất hữu dụng, chẳng hạn như để tạo một nút hoặc là 
một điểm tham chiếu để từ đó ta tiến hành bắt điểm hoặc thực hiện lệnh Offset. Ta 
cũng có thể tạo kiểu cho đối tượng Point và thiết lập kích thước tương đối so với 
màn hình hoặc theo kích thước tuyệt đối. 
1.4.1. Điều chỉnh kiểu hiển thị của đối tượng Point 
Biến hệ thống PDMODE và PDSIZE điều khiển kiểu hiển thị của đối tượng Point. Giá 
trị của PDMODE là 0, 2, 3 và 4 quy định cách vẽ qua một điểm còn giá trị 1 nghĩa là 
không hiển thị gì cả. 
Cộng các giá trị 32, 64, 96 (quy định hình vẽ bao quanh điểm) với các giá trị trước 
sẽ tạo ra rất nhiều loại ký hiệu điểm khác nhau: 
 Phát triển AutoCAD bằng ActiveX và VBA | 95 
Biến PDSIZE điều khiển kích thước của ký hiệu điểm, trừ khi giá trị PDMODE là 0 
và 1. Khi giá trị PDSIZE bằng 0 thì điểm sẽ có kích thước 5% so với chiều cao của 
vùng đồ họa. Giá trị PDSIZE dương sẽ xác định kích thước tuyệt đối của ký hiệu 
điểm, còn giá trị âm sẽ xác định phần trăm so với kích thước khung nhìn. Kích 
thước của tất cả các điểm đều được tính toán lại mỗi khi tái tạo lại bản vẽ. 
Sau khi thay đổi giá trị PDMODE và PDSIZE, hình dạng của ký hiệu điểm sẽ thay 
đổi sau khi bản vẽ được tái tạo lại. 
Để thiết lập giá trị cho biến PDMODE và PDSIZE, ta sử dụng phương thức 
SetVariable. 
Tạo đối tượng Point và thay đổi kiểu hiển thị 
Đoạn mã sau sẽ tạo một đối tượng Point trong không gian mô hình ở tọa độ (5,5,0), 
và sau đó cập nhật lại giá trị biến PDMODE và PDSIZE. 
Sub Ch4_CreatePoint() 
Dim pointObj As AcadPoint 
Dim location(0 To 2) As Double 
’ Xác định vị trí điểm 
location(0) = 5#: location(1) = 5#: location(2) = 0# 
’ Tạo điểm mới 
Set pointObj = ThisDrawing.ModelSpace.AddPoint(location) 
ThisDrawing.SetVariable "PDMODE", 34 
ThisDrawing.SetVariable "PDSIZE", 1 
ZoomAll 
End Sub 
1.5. Tạo vùng tô đặc 
Ta có thể tạo một hình tam giác hoặc tứ giác rồi sau đó tô cho vùng đó. Để có hiệu 
quả nhanh hơn, ta nên tạo đối tượng khi đã tắt biến hệ thống FILLMODE và sau đó 
bật biến FILLMODE khi đã vẽ xong. 
 96 | Chương 4: Tạo và hiệu chỉnh thực thể AutoCAD 
Vùng tô 
đặc 
Khi tạo hình tứ giác được tô đặc, trình tự các điểm thứ 3 và 4 sẽ xác định hình dạng 
cuối cùng. So sánh 2 ví dụ sau: 
Để tạo vùng được tô đặc, ta sử dụng phương thức AddSolid. 
Tạo đối tượng tô đặc 
Đoạn mã ví dụ sau tạo hình tứ giác tô đặc trong không gian mô hình sử dụng hệ tọa 
độ sau (0,0,0), (5,0,0), (5,8,0) và (0,8,0). 
Sub Ch4_CreateSolid() 
Dim solidObj As AcadSolid 
Dim point1(0 To 2) As Double 
Dim point2(0 To 2) As Double 
Dim point3(0 To 2) As Double 
Dim point4(0 To 2) As Double 
’ Xác định vùng tô đặc 
point1(0) = 0#: point1(1) = 0#: point1(2) = 0# 
point2(0) = 5#: point2(1) = 0#: point2(2) = 0# 
point3(0) = 5#: point3(1) = 8#: point3(2) = 0# 
point4(0) = 0#: point4(1) = 8#: point4(2) = 0# 
’ Tạo đối tượng trong không gian mô hình 
Set solidObj = ThisDrawing.ModelSpace.AddSolid _ 
(point1, point2, point3, point4) 
ZoomAll 
End Sub 
1.6. Tạo miền 
Miền là khu vực bao kín được tạo từ các đối tượng khép kín gọi là các vòng kín. 
Vòng kín là một đường cong hoặc chuỗi đường cong xác định một vùng trên mặt 
phẳng có đường bao không cắt nhau. Vòng kín có thể là sự kết hợp giữa các đối 
tượng Line, Lightweight, Polyline, Circle, Arc, Elliptical arc (cung elip), Spline, 3D 
face, Trace và Solid. Các đối tượng cấu thành vòng kín phải là đối tượng khép kín 
hoặc tạo thành vùng khép kín bằng cách sử dụng chung điểm cuối cùng với các đối 
tượng khác. Tất cả những đối tượng này phải đồng phẳng (nằm trên cùng một mặt 
phẳng). 
 Phát triển AutoCAD bằng ActiveX và VBA | 97 
Không thể tạo thành miền nếu đường cong hở có giao điểm ở bên trong. 
Các đối tượng như đường 3DPolyline và mặt lưới có thể được chuyển thành miền 
sau khi tiến hành bung các đối tượng. Miền cũng không thể được cấu thành từ 
những đối tượng giao cắt nhau tạo thành vùng kín, chẳng hạn như các cung tròn 
giao nhau hoặc các đường cong giao nhau. 
Các vòng kín tạo thành miền phải được định nghĩa ở dạng mảng đối tượng. 
Ngoài ra, ta cũng có thể tạo vùng tô mẫu hoặc tạo bóng cho miền và có thể tính toán 
một số thuộc tính như diện tính hay mô men quán tính của miền đó. Ta cũng có thể 
tạo các hình dạng khác nhau, sau đó chọn các đối tượng đó để tạo miền. 
Để tạo miền, ta sử dụng phương thức AddRegion. Phương thức này sẽ tạo ra một 
miền mới ứng với mỗi vòng kín có trong mảng đường cong đầu vào. AutoCAD sẽ 
chuyển các đối tượng Polyline 2D hoặc 3D đồng phẳng thành các miền riêng biệt, 
sau đó sẽ chuyển các đối tượng Polyline, Line và Curve tạo thành vòng kín đồng 
phẳng. Nếu có nhiều hơn hai đường cong sử dụng cùng một điểm đầu thì sẽ tạo 
miền có hình dạng bất kỳ. Chính vì lý do này mà một số miền chỉ được thực sự tạo 
ra khi sử dụng phương thức AddRegion. Nên sử dụng biến variant để lưu mảng 
miền vừa mới tạo được. 
Để xác định tổng số đối tượng Region đã tạo được, ta sử dụng hai hàm VBA là 
UBound và LBound. Ví dụ sau minh họa cách sử dụng hàm này: 
UBound(objRegions) - LBound(objRegions) + 1 
Trong đó biến objRegion là biến variant chứa giá trị trả về khi gọi phương thức 
AddRegion. Phương thức này sẽ tính tổng số miền đã được tạo ra. 
Tạo một miền đơn giản 
Ví dụ sau tạo miền từ một hình tròn. 
Sub Ch4_CreateRegion() 
’ Tạo mảng chứa biên của miền. 
Dim curves(0 To 0) As AcadCircle 
’ Tạo vòng tròn để làm biên cho miền. 
Dim center(0 To 2) As Double 
Dim radius As Double 
center(0) = 2 
center(1) = 2 
center(2) = 0 
radius = 5# 
Set curves(0) = ThisDrawing.ModelSpace.AddCircle _ 
(center, radius) 
’ Tạo miền 
Dim regionObj As Variant 
regionObj = ThisDrawing.ModelSpace.AddRegion(curves) 
ZoomAll 
End Sub 
 98 | Chương 4: Tạo và hiệu chỉnh thực thể AutoCAD 
1.6.1. Tạo miền phức hợp 
Ta có thể tạo miền phức hợp bằng cách trừ, nối hoặc tìm giao của các miền hoặc đối 
tượng 3DSolid. Sau đó, ta có thể tiến hành dập nổi hoặc dập nổi theo đường sinh để 
tạo nên các đối tượng đặc phức tạp hơn. Để tạo miền phức hợp, ta sử dụng phương 
thức Boolean. 
Nếu muốn trừ một miền ra khỏi một miền khác, ta gọi phương thức Boolean từ 
miền đầu tiên, là miền mà ta muốn bị trừ đi một phần. Ví dụ như để tính diện tích 
rải thảm cho sàn nhà, ta tiến hành gọi phương thức Boolean từ đối tượng chứa 
đường bao ngoài của sàn nhà và sử dụng các diện tích không cần rải thảm làm tham 
số cho phương thức Boolean, chẳng hạn như diện tích cột quầy hàng. 
Tạo miền phức hợp 
Sub Ch4_CreateCompositeRegions() 
’ Tạo hai vòng tròn, một biểu diễn sàn nhà, 
’ một biểu diển cột nhà ở giữa sàn nhà. 
Dim RoomObjects(0 To 1) As AcadCircle 
Dim center(0 To 2) As Double 
Dim radius As Double 
center(0) = 4 
center(1) = 4 
center(2) = 0 
radius = 2# 
Set RoomObjects(0) = ThisDrawing.ModelSpace. _ 
AddCircle(center, radius) 
radius = 1# 
Set RoomObjects(1) = ThisDrawing.ModelSpace. _ 
AddCircle(center, radius) 
’ Tạo vùng mới từ hai vòng tròn 
Dim regions As Variant 
regions = ThisDrawing.ModelSpace.AddRegion(RoomObjects) 
’ Sao chép miền vào các biến chứa miền để dễ sử dụng 
Dim RoundRoomObj As AcadRegion 
Dim PillarObj As AcadRegion 
If regions(0).Area > regions(1).Area Then 
’ The first region is the room 
Set RoundRoomObj = regions(0) 
Set PillarObj = regions(1) 
Else 
’ The first region is the pillar 
Set PillarObj = regions(0) 
Set RoundRoomObj = regions(1) 
End If 
’ Đặt màu phòng là đỏ và cột là xanh lục lam 
RoundRoomObj.Color = acRed 
PillarObj.Color = acCyan 
ZoomAll 
’ Trừ diện tích cột khỏi diện tích sàn 
’ để xác định diện tích rải thảm thực 
RoundRoomObj.Boolean acSubtraction, PillarObj 
’ Sử dụng thuộc tính Area để tính diện tích rải thảm 
MsgBox "The carpet area is: " & RoundRoomObj.Area 
End Sub 
Tính diện tích của miền được tạo thành thông qua thuộc tính Area. 
 Phát triển AutoCAD bằng ActiveX và VBA | 99 
Để nối các miền lại với nhau, ta gọi phương thức Boolean và sử dụng hằng số 
acUnion thay vì sử dụng hằng số acSubtraction. Để tìm phần giao của hai miền, 
ta sử dụng hằng số acIntersection. 
Ví dụ sau minh họa cách thức nối hai miền với nhau: 
Ví dụ sau minh họa phần giao của 3 miền: 
1.7. Tạo vùng tô mẫu 
Vùng tô mẫu là vùng đặc biệt trong bản vẽ được tô đặc theo các mẫu có sẵn. 
Khi muốn tạo vùng tô mẫu, ta không cần phải  ... textObj.TextAlignmentPoint = alignmentPoint 
ThisDrawing.Regen acActiveViewport 
MsgBox "The Text object is now centered" 
’ Canh phải đối tượng Text 
textObj.Alignment = acAlignmentRight 
ThisDrawing.Regen acActiveViewport 
MsgBox "The Text object is now aligned right" 
End Sub 
4.2.4. Thay đổi văn bản đơn 
Cũng giống như các đối tượng khác, ta có thể di chuyển, xoay, xóa và sao chép đối 
tượng văn bản. Ngoài ra, ta còn có thể lấy đối xứng đối tượng Text. Để đối tượng 
văn bản không bị đảo ngược khi lấy đối xứng, cần phải gán biến hệ thống 
MIRRTEXT bằng 0. 
Dưới đây liệt kê các phương thức có trong đối tượng Text dùng để hiệu chỉnh đối 
tượng. Để có danh sách đầy đủ hơn, xin xem thêm tài liệu “AutoCAD ActiveX and 
VBA Reference”. 
 146 | Chương 4: Tạo và hiệu chỉnh thực thể AutoCAD 
ArrayPolar Nhân bản dạng cực. 
ArrayRectangular Nhân bảng dạng chữ nhật. 
Copy Sao chép đối tượng Text. 
Erase Xóa đối tượng Text. 
Mirror Lấy đối xứng đối tượng Text. 
Move Di chuyển đối tượng Text. 
Rotate Xoay đối tượng Text. 
4.3. Sử dụng Văn bản nhiều dòng 
Đối với các đoạn văn bản dài và phức tạp, ta nên tạo đối tượng văn bản nhiều dòng 
– Mtext. Văn bản nhiều dòng có thể nằm trọn trong một bề rộng nhất định nhưng lại 
có thể mở rộng vô hạn theo chiều đứng. Đối tượng Mtext còn có thể được định dạng 
chi tiết đến từng từ hoặc từng ký tự. 
Đối tượng văn bản nhiều dòng bao gồm nhiều dòng văn bản hoặc đoạn văn bản nằm 
trọn trong một bề rộng đã định trước. Mặc dù có nhiều dòng nhưng các đoạn văn 
được tạo trong một lần soạn thảo chỉ tạo thành một đối tượng. Đối tượng này có thể 
di chuyển, xoay, xóa, sao chép, lấy đối xứng, co giãn hoặc thay đổi tỷ lệ. 
Văn bản nhiều dòng cung cấp nhiều lựa chọn trong quá soạn thảo hơn so với văn 
bản đơn. Ví dụ như ta có thể thiết lập đường gạch chân, phông, màu và chiều cao 
chữ cho từng ký tự, từng từ hoặc cụm từ trong một đoạn văn. 
4.3.1. Tạo văn bản nhiều dòng 
Ta có thể tạo đối tượng văn bản nhiều dòng (đối tượng Mtext) bằng cách sử dụng 
phương thức AddMtext. Phương thức này cần phải nhập vào ba tham số: chuỗi ký 
tự, điểm chèn trong bản vẽ và chiều rộng của hình chữ nhật bao văn bản. 
Chuỗi ký tự là đoạn văn bản sẽ thực sự được hiển thị. Ta có thể nhập các ký tự đặc 
biệt, mã điều khiển và ký tự Unicode. Điểm chèn là mảng gồm 3 phần tử kiểu 
double thể hiện tọa độ toàn cục của điểm, nơi sẽ chèn văn bản trong bản vẽ. Chiều 
rộng văn bản là một số dương thể hiện phần bề rộng của hình chữ nhật bao văn bản. 
Chiều rộng được đo theo hệ đơn vị hiện hành. 
Sau khi đã tạo xong đối tượng Mtext, ta có thể thay đổi chiều cao chữ, chế độ canh 
hàng, góc nghiêng và kiểu văn bản cho đối tượng Mtext, hoặc có thể thiết lập định 
dạng cho từng ký tự. Chế độ canh hàng điều khiển cách phân bố văn bản tương đối 
so với hình chữ nhật bao. 
Canh trái Canh phải Canh giữa
 Phát triển AutoCAD bằng ActiveX và VBA | 147 
Chiều cao của đối tượng MText phụ thuộc vào số ký tự trong chuỗi ký tự. 
Tạo đối tượng Mtext 
Đoạn mã sau tạo đối tượng Mtext trong không gian mô hình tại điểm (2,2,0). 
Sub Ch4_CreateMText() 
Dim mtextObj As AcadMText 
Dim insertPoint(0 To 2) As Double 
Dim width As Double 
Dim textString As String 
insertPoint(0) = 2:insertPoint(1) = 2:insertPoint(2) = 0 
width = 4 
textString = "This is a text string for the mtext object." 
’ Tạo đối tượng Mtext trong không gian mô hình 
Set mtextObj = ThisDrawing.ModelSpace. _ 
AddMText(insertPoint, width, textString) 
ZoomAll 
End Sub 
4.3.2. Định dạng văn bản nhiều dòng 
Văn bản mới được tạo sẽ tự động nhận các thuộc tính của kiểu văn bản hiện hành, 
mặc định là kiểu STANDARD. Ta có thể thay đổi định dạng ban đầu bằng cách thiết 
lập định dạng cho từng ký tự và gán các thuộc tính cho đối tượng Text. Ta cũng có 
thể chỉ ra định dạng và các ký tự đặc biệt sử dụng một số phương thức sẽ được trình 
bày dưới đây. 
Các lựa chọn định dạng, chẳng hạn chữ gạch chân, văn bản đặc biệt1, phông chữ có 
thể được áp dụng cho từng ký tự hoặc từng từ trong văn bản. Những lựa chọn chung 
như kiểu văn bản, chế độ canh hàng, bề rộng và góc xoay có tác động đến toàn thể 
đối tượng Mtext. Ta có thể thay đổi cả hai loại định dạng trên sử dụng các thuộc 
tính và phương thức của đối tượng Mtext. 
1 Văn bản đặc biệt – Stack text: là văn bản hoặc phân số hiển thị dung sai hoặc số đo nào đó. Cần 
phải nhập vào các ký tự đặc biệt trong đoạn văn bản để hiển thị văn bản đặc biệt, bao gồm dấu (/), 
(#) và (^). Dấu (/) thể hiện phân số dạng gạch ngang. Dấu (#) thể hiện phân số dạng gạch chéo. Dấu 
(^) thể hiện phần dung sai (văn bản nằm trên 2 dòng) hoặc thể hiện số mũ. Hình dưới đây là minh 
hoạ các loại văn bản đặc biệt 
 148 | Chương 4: Tạo và hiệu chỉnh thực thể AutoCAD 
4.3.2.1. Định dạng từng ký tự, từng từ 
Ta có thể thiết lập định dạng cho từng từ hoặc từng ký tự bằng cách nhập vào ký tự 
ASCII tương đương với mã định dạng văn bản. Ta có thể: gạch chân văn bản, thêm 
một đường thẳng phía trên văn bản và tạo văn bản đặc biệt. Ngoài ra, ta còn có thể 
thay đổi màu, phông và chiều cao chữ hoặc có thể thêm vào khoảng trắng giữa các 
ký tự, tăng bề rộng của ký tự. Để thiết lập định dạng, ta phải sử dụng ký tư ASCII 
tương đương với mã định dạng: 
Định dạng đối tượng Mtext 
Mã định dạng Mục đích Nhập vào sẽ có kết quả là 
\0...\o Bật/Tắt đường 
gạch trên 
Autodesk 
\OAutoCAD\o 2000 
\L...\l Bật/Tắt đường 
gạch dưới 
Autodesk 
\LAutoCAD\l 2000 
\~ Chèn dấu trắng 
không bị xuống 
dòng 
Autodesk 
AutoCAD\~2000 
\\ Chèn dấu gạch 
ngược 
Autodesk \\AutoCAD 
\{...\} Chèn dấu ngoặc 
móc 
Autodesk 
\{AutoCAD\} 2000 
\File name; Thay đổi thành 
phông chữ có tên 
tệp như đã chỉ 
định 
Autodesk \Ftimes; 
AutoCAD 2000 
\Hvalue; Thay đổi chiều cao 
chữ theo giá trị 
đơn vị vẽ 
Autodesk 
\H2;AutoCAD 
\Hvaluex; Thay chiều cao 
chữ gấp x lần 
chiều cao hiện tại 
Autodesk AutoCAD 
\H3x;2000 
\S...^...; Chèn văn bản 
chồng với chữ đi 
kèm ký tự \, # và 
^ 
1.000\S+0.010^- 
0.000; 
\Tvalue; Điều chỉnh khoảng 
cách các ký tự từ 
0.75 đến 4 
\T2;Autodesk 
 Phát triển AutoCAD bằng ActiveX và VBA | 149 
Định dạng đối tượng Mtext 
Mã định dạng Mục đích Nhập vào sẽ có kết quả là 
\Qangle; Thay đổi góc xiên \Q20;Autodesk 
\Wvalue; Thay đổi hệ số bề 
rộng để tạo chữ 
rộng 
\W2;Autodesk 
\A Thiết lập chế độ 
canh hàng theo 
chiều đứng; các 
giá trị: 0, 1, 2 
(dưới, giữa, trên) 
\A1;1\S1/2 
Sử dụng dấu ngoặc móc ({}) để thiết lập định dạng chỉ cho đoạn văn bản bên trong 
dấu ngoặc. Có thể lồng được đến 8 cấp. 
Ta cũng có thể nhập vào các ký tự ASCII tương đương với các ký tự điều khiển 
trong một dòng hoặc một đoạn văn để chỉ ra định dạng hoặc các ký tự đặc biệt, 
chẳng hạn như dung sai hoặc ký tự kích thước. 
Các ký tự điều khiển sau sử dụng để tạo đoạn văn bản như trong minh họa ở dưới. 
{{\H1.5x; Big text} \A2; over text\A1;/\A0; under text} 
Sử dụng các ký tự điều khiển để định dạng văn bản 
Ví dụ sau tạo một đối tượng Mtext có văn bản được định dạng như ở minh họa trên. 
Sub Ch4_FormatMText() 
Dim mtextObj As AcadMText 
Dim insertPoint(0 To 2) As Double 
Dim width As Double 
Dim textString As String 
insertPoint(0) = 2 
insertPoint(1) = 2 
insertPoint(2) = 0 
width = 4 
’ Định nghĩa các ký tự ASCII làm ký tự điều khiển 
Dim OB As Long ’ Mở ngoặc { 
Dim CB As Long ’ Đóng ngoặc} 
Dim BS As Long ’ Gạch ngược \ 
Dim FS As Long ’ Gạch xuôi / 
Dim SC As Long ’ Chấm phẩy ; 
OB = Asc("{") 
CB = Asc("}") 
BS = Asc("\") 
FS = Asc("/") 
SC = Asc(";") 
’ Gán chuỗi văn bản các ký tự điều khiển và các ký tự thông thường 
’ đó là: {{\H1.5x; Big text}\A2; over text\A1;/\A0; under text} 
textString = Chr(OB) + Chr(OB) + Chr(BS) + "H1.5x" _ 
+ Chr(SC) + "Big text" + Chr(CB) + Chr(BS) + "A2" _ 
 150 | Chương 4: Tạo và hiệu chỉnh thực thể AutoCAD 
+ Chr(SC) + "over text" + Chr(BS) + "A1" + Chr(SC) _ 
+ Chr(FS) + Chr(BS) + "A0" + Chr(SC) + "under text" _ 
+ Chr(CB) 
’ Tạo đối tượng Mtext trong không gian mô hình 
Set mtextObj = ThisDrawing.ModelSpace. _ 
AddMText(insertPoint, width, textString) 
ZoomAll 
End Sub 
4.3.2.2. Định dạng đối tượng văn bản nhiều dòng 
Ta có thể thiết lập các thuộc tính điều khiển kiểu văn bản, chế độ canh lề, kích 
thước và góc xoay của văn bản. Những thiết lập này sẽ tác động lên tất cả văn bản 
bên trong đường bao văn bản chứ không phải chỉ tác động đến một từ hoặc một ký 
tự riêng lẻ nào cả. 
Thuộc tính StyleName thiết lập phông chữ và các đặc tính định dạng mặc định 
cho văn bản mới. Khi tạo đối tượng văn bản, ta có thể chọn kiểu văn bản mà mình 
cần dùng trong danh sách các kiểu văn bản hiện có. 
Khi thay đổi kiểu văn bản của đối tượng Mtext có sử dụng định dạng riêng cho một 
phần nào đó của đoạn văn bản thì kiểu văn bản mới sẽ được áp cho toàn bộ đối 
tượng, và do đó định dạng riêng của một số ký tự nào đó có thể sẽ không được giữ 
nguyên. Ví dụ như khi ta thay đổi kiểu phông từ TrueType sang kiểu SHX hoặc một 
kiểu phông TrueType khác thì phông chữ mới đó sẽ được gán cho toàn bộ đối tượng 
văn bản và các định dạng riêng của các ký tự sẽ bị thay thế. 
Chế độ canh lề điều khiển sự sắp xếp của văn bản dựa trên một điểm canh lề nào 
đó. Đoạn văn bản sẽ được canh đều dựa trên biên trái và phải của đường bao, còn 
các dòng văn bản sẽ được canh giữa, trên hoặc canh dưới dựa trên đường biên trên 
và dưới của đường bao văn bản. Đường biên trên và dưới được xác định dựa trên 
đường thẳng trên và dưới của đối tượng văn bản nhiều dòng. AutoCAD cung cấp 
cho người dùng 9 thiết lập về chế độ canh lề, bao gồm: Trên Trái (TL), Trên Giữa 
(TC), Trên Phải (TR), Giữa Trái (ML), Giữa Giữa (MC), Giữa Phải (MR), Dưới 
Trái (BL), Dưới Giữa (BC), Dưới Phải (BR). 
 Phát triển AutoCAD bằng ActiveX và VBA | 151 
Sử dụng thuộc tính AttachmentPoint để thay đổi chế độ canh lề của đối tượng 
Mtext. 
Thuộc tính Rotation điều khiển góc xoay của đường bao văn bản. 
4.4. Sử dụng ký tự Unicode, Ký tự điều khiển và Ký tự đặc 
biệt. 
Ta có thể sử dụng các ký tự Unicode, ký tự điều khiển và ký tự đặc biệt trong chuỗi 
văn bản để hiển thị các ký hiệu. (Tất cả các ký tự không có trong bảng chữ cái buộc 
phải được nhập vào bằng mã ASCII tương đương). 
Ta có thể tạo các ký tự đặc biệt sử dụng các chuỗi ký tự Unicode sau: 
Ký tự Unicode 
Ký tự Unicode Mô tả 
\U+00B0 Ký hiệu độ 
\U+00B1 Ký hiệu dung sai dấu cộng/trừ 
\U+2205 Ký hiệu ghi kích thước đường kính 
Ngoài cách sử dụng các ký tự Unicode, ta có thể thể hiện các ký tự đặc biệt bằng 
cách thêm các thông tin điều khiển vào chuỗi ký tự văn bản bằng cách sử dụng cặp 
ký hiệu phần trăm (%%) để bắt đầu chuỗi điều khiển. 
Mã điều khiển kiểu này tương thích với văn bản AutoCAD chuẩn và phông 
PostScript: 
%%nnn hiển thị ký tự số nnn. 
Trong VB hoặc VBA, chuỗi trên có thể nhập như sau 
Dim percent as Long 
percent = ASC(“%”) 
TextString = chr(percent) + chr(percent) + “nnn” 
Các mã điều khiển sau chỉ tương thích với phông AutoCAD chuẩn: 
Mô tả mã điều khiển 
Mã điều khiển Mô tả 
 152 | Chương 4: Tạo và hiệu chỉnh thực thể AutoCAD 
%%o Bật/tắt chế độ gạch trên 
%%u Bật/tắt chế độ gạch dưới 
%%d Ký hiệu độ 
%%p Ký hiệu dung sai (dấu cộng/trừ) 
%%c Ký hiệu kích thước đường kính 
%%% Ký hiệu phần trăm 
4.5. Thay thế phông chữ 
Ta có thể chỉ định một phông chữ để thay thế cho các phông chữ khác hoặc để làm 
phông chữ mặc định khi AutoCAD không thể tìm thấy phông chữ nào đó trong bản 
vẽ. 
Phông chữ sử dụng cho các văn bản trong bản vẽ được xác định dựa trên kiểu văn 
bản, và với đối tượng Mtext là dựa trên định dạng phông riêng biệt cho từng ký tự. 
Đôi lúc, để đảm bảo rằng bản vẽ chỉ sử dụng một số phông chữ nào đó, hoặc khi 
muốn chuyển các phông chữ đã sử dụng thành các phông chữ khác, ta có thể sử 
dụng các bộ soạn thảo văn bản để tạo bảng ánh xạ phông. 
Ta có thể sử dụng bảng ánh xạ phông khi muốn chỉ sử dụng một bộ phông tiêu 
chuẩn, hoặc để tạo sự thuận tiện khi in. Ví dụ như khi chia sẽ bản vẽ với các nhà tư 
vấn, ta sẽ sử dụng bảng ánh xạ phông để xác định những phông chữ mà AutoCAD 
sẽ thay thế khi có những đoạn văn bản tạo với phông chữ khác. Tương tự, khi muốn 
soạn thảo bản vẽ sử dụng bộ phông hiển thị nhanh SHX và sau đó chuyển ngược lại 
thành các phông chữ khác để in ấn thì ta phải thiết lập bảng ánh xạ phông chữ để 
chuyển từng phông chữ SHX thành một phông chữ tương đương khác. 
Bảng ánh xạ phông chữ là một tệp văn bản ASCII thuần túy chứa một ánh xạ phông 
trên một dòng. Mỗi dòng bao gồm: tên cơ sở của phông chữ (không bao gồm đường 
dẫn hoặc thư mục), tiếp sau đó là dấu chấm phẩy (;) và tên phông chữ thay thế. Tên 
phông chữ thay thế phải bao gồm cả phần mở rộng, chẳng hạn như .ttf. 
Lấy ví dụ, ta có thể sử dụng mục sau trong bảng ánh xạ phông để chỉ ra rằng phông 
TrueType times.ttf sẽ thay thế cho phông romanc.shx: 
Romanc.shx; times.ttf 
AutoCAD luôn có một bảng ánh xạ phông chữ mặc định. Ta có thể hiệu chỉnh tệp 
này bằng cách sử dụng một chương trình soạn thảo văn bản ASCII thông thường. 
Ta cũng có thể chỉ định một bảng ánh xạ phông khác bằng cách sử dụng thuộc tính 
FontFileMap trong đối tượng Preferences. 
4.5.1. Chỉ định phông thay thế mặc định 
Nếu trong bản vẽ có chứa phông chữ không có trong hệ thống, AutoCAD sẽ tự 
động thay thế bằng phông chữ đã được chỉ định trước. Mặc định, AutoCAD sử 
dụng tệp simplex.shx. Tuy nhiên, ta cũng có thể chỉ định một phông chữ khác khi 
 Phát triển AutoCAD bằng ActiveX và VBA | 153 
cần bằng cách sử dụng thuộc tính AltFontFile của đối tượng Preferences để thiết lập 
tên tệp chứa phông chữ thay thế. 
Nếu dùng kiểu văn bản có sử dụng Big Font, ta có thể ánh xạ sang một phông chữ 
khác sử dụng thuộc tính AltFontFile. Biến hệ thống này sử dụng một đôi tệp chứa 
tên phông là txt.shx và bigfont.shx. 
Bảng sau thể hiện quy tắc thay thế phông chữ trong AutoCAD khi không tìm thấy 
phông chữ khi mở một bản vẽ. 
Quy tắc thay thế phông chữ 
Thứ tự ánh xạ Phần mở 
rộng 1 2 3 4 
TTF Sử dụng giá trị 
FONTMAP 
Sử dụng phông 
định nghĩa trong 
kiểu văn bản 
Windows thay 
thế một phông 
chữ tương tự 
SHX Sử dụng giá trị 
FONTMAP 
Sử dụng phông 
định nghĩa trong 
kiểu văn bản 
Sử dụng 
FONTALT 
Nhắc người 
dùng nhập 
phông mới 
PFB Sử dụng giá trị 
FONTMAP 
Sử dụng 
FONTALT 
Nhắc người 
dùng nhập 
phông mới 
4.6. Kiểm tra chính tả 
Trong suốt quá trình kiểm tra chính tả, AutoCAD so sánh từ trong bản vẽ với từ 
trong từ điển chính hiện hành. Bất kỳ từ nào người dùng thêm vào đều được lưu vào 
trong từ điển tùy biến hiện hành trong lúc kiểm tra chính tả. Ví dụ, ta có thể thêm 
vào một số tên thường dùng để AutoCAD không còn xem đó là những từ bị sai 
chính tả nữa. 
Để kiểm tra chính tả với một ngôn ngữ khác, ta phải thay đổi sang một bộ từ điển 
chính khác. 
AutoCAD ActiveX Automation không hỗ trợ các phương thức để thực hiện kiểm 
tra chính tả. Tuy nhiên, ta vẫn có thể gán tên của từ điển chính thông qua thuộc tính 
MainDictionary hoặc tên từ điển tùy biến thông qua thuộc tính CustomDictionary 
có trong đối tượng Preferences. 

File đính kèm:

  • pdfgiao_trinh_phat_trien_autocad_bang_activex_vba_chuong_4_tao.pdf