Phát triển AutoCAD 6
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
Tóm tắt nội dung tài liệu: Phát triển AutoCAD 6
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 xác định trước vùng cần tô. Trước hết, cần phải tạo đối tượng Hatch. Sau đó ta sẽ xác định vòng khép kín, là đường biên ngoài cùng nhất của vùng tô mẫu. Sau đó ta có thể tiếp tục chọn bất kỳ vòng ... ewport MsgBox "The Text object is now aligned left" ’ Canh giữa đối tượng Text textObj.Alignment = acAlignmentCenter ’ Canh hàng văn bản so với điểm (cần cho ’ tất cả ngoại trừ canh trá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:
- phat_trien_autocad_6.pdf