Phát triển AutoCAD bằng ActiveX & VBA - Chương 4: Tạo và hiệu chỉnh thực thể AutoCAD
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ẽ
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 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: 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 đ ... 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:
phat_trien_autocad_bang_activex_vba_chuong_4_tao_va_hieu_chi.pdf

