Giáo trình Phát triển AutoCAD bằng ActiveX & VBA - Chương 10: Kỹ thuật vẽ nâng cao và tổ chức bản vẽ
Trong chương này 10
Làm việc với ảnh Raster
Sử dụng Khối và Thuộc
tính
Sử dụng Tham chiếu
ngoài
Kết nối và Khôi phục lại
dữ liệu mở rộng
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 10: Kỹ thuật vẽ nâng cao và tổ chức bản vẽ", để 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 10: Kỹ thuật vẽ nâng cao và tổ chức bản vẽ
Phát triển ứng dụng ActiveX và VBA | 247 KỸ THUẬT VẼ NÂNG CAO VÀ TỔ CHỨC BẢN VẼ 10 Trong chương này Làm việc với ảnh Raster Sử dụng Khối và Thuộc tính Sử dụng Tham chiếu ngoài Kết nối và Khôi phục lại dữ liệu mở rộng Khi có nhiều kinh nghiệm với AutoCAD, có thể sử dụng các hỗ trợ nâng cao của chương trình để tăng cường khả năng của các ứng dụng. Bản vẽ tạo ra có thể chứa: ảnh hàng không, ảnh vệ tinh, ảnh đồ hoạ cũng như các ảnh do máy tính tạo ra. Bên cạnh đó AutoCAD cũng cung cấp một số tính năng trợ giúp tổ chức dữ liệu, cho phép bổ sung thêm thông tin cho các đối tượng trong bản vẽ. 248 | Chương 10: Kỹ thuật vẽ nâng cao và tổ chức bản vẽ 1. Làm việc với ảnh Raster Có thể chèn ảnh raster1 vào bản vẽ AutoCAD (là bản vẽ dạng vector2 ), sau đó lưu lại. Có rất nhiều lý do cần kết hợp ảnh dạng Raster với tệp dạng véc tơ, bao gồm cả tài liệu được quét lại, bản fax, sử dụng ảnh kỹ thuật số, ảnh hàng không, ảnh vệ tinh, tạo các hiệu ứng như các hình mờ và lô gô, chèn ảnh do máy tính tạo ra từ các chương trình biểu diễn hình ảnh trực quan như AutoVision. 1.1. Ảnh Raster trong bản vẽ Ảnh Raster bao gồm một lưới ô hình vuông có kích thước nhỏ hay là các điểm được biết đến là các điểm ảnh (pixel). Ví dụ ảnh của một ngôi nhà gồm hàng loạt các điểm màu biểu diễn hình ảnh của nó. Mỗi ảnh Raster tương ứng với các điểm ảnh trong một lưới nhất định. Ảnh Raster cũng giống như các đối tượng khác trong bản vẽ AutoCAD có thể sao chép, dịch chuyển hay cắt xén. Ảnh có thể được thay đổi, điều chỉnh độ tương phản hay cắn xén ảnh theo đường bao hình chữ nhật hoặc một đa giác. AutoCAD hỗ trợ 1 Ảnh Raster: là ảnh kiểu ánh xạ bit hay ảnh dạng mành, các hình ảnh được thể hiện bởi các chấm nhỏ riêng biệt. 2 Bản vẽ Vector: là bản vẽ thể hiện theo kiểu đồ họa hướng đối tượng, trong đó các đối tượng hình học được lưu trữ và xử lý bởi các phương trình, công thức toán học. Phát triển AutoCAD bằng ActiveX và VBA | 249 hầu hết các định dạng của tệp ảnh được sử dụng phổ biến trong các ứng dụng kỹ thuật ảnh chủ yếu như: đồ hoạ máy tính, quản lý bản vẽ, bản đồ, các hệ thống thông tin địa lý (GIS). Các ảnh có thể là Bitonal1, xám 8-bit, màu 8-bit, hoặc màu 24-bit. Một số định dạng tệp ảnh hỗ trợ ảnh tạo bởi các chấm điểm trong suốt. Khi ảnh trong suốt được mở, AutoCAD có thể nhận ra các điểm ảnh đó và cho phép các đối tượng đồ họa trên màn hình AutoCAD được “nhìn xuyên” qua điểm ảnh. (Trong ảnh Bitonal, các điểm ảnh nền được coi như là trong suốt). Ảnh trong suốt thường có màu sắc hoặc thuộc dải màu xám. Mặc dù các phần đuôi mở rộng được liệt kê nhưng AutoCAD nhận dạng từ nội dung của tệp chứa ảnh chứ không phải từ phần mở rộng của tệp. Các định dạng ảnh được hỗ trợ trong AutoCAD Loại Mô tả và phiên bản Phần mở rộng BMP Windows and OS/2 bitmap format .bmp, .dib, .rle CALS-I Mil-R-Raster I .gp4, .mil, .rst, .cg4, .cal GeoSPOT GeoSPOT ( tệp .bil phải được đi kèm với tệp .hdr và .pal cùng với các tệp dữ liệu liên quan trong cùng một thư mục) .bil IG4 Image Systems Group 4 .ig4 IGS Image Systems Grayscale .igs JPEG Joint Photographics Expert Group .jpg FLIC FLIC Autodesk Animator Animation .flc, .fli PCX Picture PC Paintbrush Picture .pcx PICT Picture Macintosh Picture .pct PNG Portable Network Graphic .png RLC Run Length Compressed .rlc TARGA True Vision Raster-Based Data Format .tga TIF Tagged Image Format .tif 1.2. Đính kèm và đặt tỷ lệ ảnh Raster Ảnh có thể đặt trong tệp bản vẽ nhưng chúng thực sự không phải là một phần của bản vẽ. Chúng được liên kết với tệp bản vẽ thông qua đường dẫn hoặc ID của một 1 Bitonal: là loại ảnh có hai tông màu: tiền cảnh và màu nền. 250 | Chương 10: Kỹ thuật vẽ nâng cao và tổ chức bản vẽ tệp quản lý dữ liệu. Đường dẫn của tệp ảnh có thể bị thay đổi hoặc bị xoá bất cứ lúc nào. Sử dụng đường dẫn để gắn ảnh vào bản vẽ làm tăng không đáng kể dung lượng của bản vẽ. Để gắn ảnh, trước hết cần tạo ra đối tượng Raster trong bản vẽ bằng phương thức AddRaster. Phương thức này yêu cầu 4 tham số đầu vào: tên của tệp ảnh đính kèm, điểm chèn ảnh trong bản vẽ, tỷ lệ phóng đại và góc quay của ảnh. Chú ý rằng đối tượng Raster chỉ là một liên kết độc lập của ảnh chứ không phải là ảnh. Một ảnh Raster có thể đính kèm nhiều lần vào bản vẽ và mỗi lần đính kèm sẽ tương ứng cần tạo một đối tượng Raster mới. Mỗi phần đính kèm đó có đường bao riêng và các thông số về độ sáng tối, tương phản, độ đậm nhạt, độ trong suốt riêng. Một ảnh đơn có thể cắt được thành nhiều phần và sắp xếp lại một cách độc lập trong bản vẽ. Có thể gán tỷ lệ co giãn ảnh Raster khi tạo đối tượng Raster để tỷ lệ về hình học của ảnh phù hợp với tỷ lệ hình học trong bản vẽ. Khi chọn một ảnh để đính kèm, ảnh đó sẽ được chèn vào với tỷ lệ là 1 đơn vị đo của ảnh bằng 1 đơn vị bản vẽ. Để thiết lập tỷ lệ phóng đại cho ảnh cần biết đơn vị đo nào (inches, feet, metres) đang sử dụng là đơn vị vẽ của AutoCAD. Tệp ảnh nhất thiết phải có thông tin về độ phân giải xác định DPI (Dots Per Inche: số điểm trên một inch) và số các điểm trong ảnh. Nếu một ảnh có thông tin về độ phân giải, AutoCAD kết hợp giá trị đó với tỷ lệ co giãn và đơn vị đo của AutoCAD đang sử dụng trong bản vẽ. Ví dụ: nếu ảnh raster là một bản thiết kế đã được quét với tỷ lệ: 1 cm trên ảnh bằng 6m (600 cm) thực tế, tức là tỷ lệ 1:600; bản vẽ sử dụng đơn vị cm và 1 cm bằng 1 đơn vị vẽ thì tỷ số phóng đại của ảnh được lập bằng cách gán giá trị cho thông số ScaleFactor của phương thức AddRaster là 600. Khi đó AutoCAD sẽ chèn ảnh với tỷ lệ phù hợp với các đối tượng hình học trong bản vẽ vector. CHÚ Ý Nếu không có thông số về độ phân giải cho tệp ảnh đính kèm thì AutoCAD sẽ tính bề rộng gốc của ảnh bằng 1 đơn vị. Sau khi chèn ảnh, bề rộng của ảnh trong hệ đơn vị đo của AutoCAD bằng với hệ số phóng đại. Đính kèm ảnh Raster Ví dụ dưới đây sẽ chèn ảnh Raster vào không gian mô hình, ảnh này chứa trong tệp watch.jpg đặt trong thư mục Sample. Nếu không tìm được tệp ảnh này hoặc được đặt trong thư mục khác thì chỉ cần gán tên và đường dẫn đầy đủ một tệp ảnh bất kỳ nào đó có sẵn cho biến imageName. Sub Ch10_AttachingARaster() Dim insertionPoint(0 To 2) As Double Dim scalefactor As Double Dim rotationAngle As Double Dim imageName As String Dim rasterObj As AcadRasterImage imageName = "C:/Acad2000/sample/watch.jpg" insertionPoint(0) = 5 insertionPoint(1) = 5 insertionPoint(2) = 0 scalefactor = 2 rotationAngle = 0 On Error GoTo ERRORHANDLER ’ Gắn ảnh raster vào không gian mô hình Phát triển AutoCAD bằng ActiveX và VBA | 251 Set rasterObj = ThisDrawing.ModelSpace.AddRaster_ (imageName, insertionPoint,scalefactor, rotationAngle) ZoomAll Exit Sub ERRORHANDLER: MsgBox Err.Description End Sub 1.3. Quản lý ảnh Raster Có thể thay đổi tên ảnh, tên tệp và đường dẫn của tệp thông qua các thuộc tính của đối tượng Raster. 1.3.1. Thay đổi đường dẫn của tệp Đường dẫn và tên tệp của ảnh có thể lấy hoặc thay đổi được bằng thuộc tính ImageFile. Đường dẫn được tạo bởi thuộc tính này là đường dẫn thật để AutoCAD tìm kiếm ảnh. Nếu AutoCAD không thể định vị được bản vẽ (ví dụ trong trường hợp bản vẽ bị chuyển đi chỗ khác sau khi tên của tệp đã được gán cho thuộc tính ImageFile) thì nó sẽ xoá các thông tin về đường dẫn tương đối hay tuyệt đối chứa trong tên tệp (ví dụ, \images\tree.tga hoặc c:\myproject\images\tree.tga sẽ chuyển thành tree.tga) và tìm đường dẫn mới được định nghĩa bởi phương thức SetProjectFilePath của đối tượng Preferences. Nếu bản vẽ không được định vị theo các đường dẫn, nó sẽ dùng đường dẫn đầu tiên tìm lại được. Có thể xoá đường dẫn trong tên tệp hoặc chỉ ra một đường dẫn tương đối bằng cách gán lại thuộc tính ImageFile. Thay đổi đường dẫn trong thuộc tính ImageFile không ảnh hưởng đến thiết lập tìm kiếm đường dẫn của các tệp trong dự án. 1.3.2. Đặt tên ảnh Tên của ảnh không nhất thiết trùng với tên của tệp ảnh đó. Khi đính kèm ảnh vào bản vẽ, AutoCAD sử dụng tên tệp không bao gồm phần mở rộng làm tên của ảnh. Có thể thay đổi tên của ảnh mà không làm ảnh hưởng đến tên của tệp ảnh đó. Tệp ảnh được thể hiện thông qua thuộc tính ImageFile của đối tượng Raster. Thay đổi thuộc tính ImageFile sẽ dẫn đến thay đổi ảnh trong bản vẽ. Tên ảnh được thể hiện bởi thuộc tính Name và khi thay đổi thuộc tính Name thì chỉ thay đổi tên của ảnh mà không ảnh hưởng đến tệp liên kết với ảnh đó. 1.4. Hiệu chỉnh ảnh và đường biên Tất cả các ảnh đều có đường biên. Khi đính một ảnh vào bản vẽ, đường biên của ảnh sẽ kế thừa các thuộc tính thiết lập hiện tại bao gồm: màu, lớp, kiểu đường và tỷ lệ của kiểu đường. Nếu định dạng ảnh là bitonal thì màu của ảnh và màu của đường biên là như nhau. Cũng như các đối tượng khác của AutoCAD, có thể hiệu chỉnh ảnh và các thuộc tính của đường biên như sau: Hiển thị hoặc dấu đường biên Hiệu chỉnh lớp của ảnh, màu và kiểu đường của đường biên Thay đổi vị trí của ảnh 252 | Chương 10: Kỹ thuật vẽ nâng cao và tổ chức bản vẽ Đặt tỷ lệ, góc quay và thay đổi chiều cao, chiều rộng của ảnh Bật tắt chế độ hiển thị của ảnh Thay đổi độ trong suốt của ảnh Thay đổi độ sáng tối, tương phản và độ mờ Thay đổi chất lượng và tốc độ hiển thị ảnh 1.4.1. Hiển thị và che giấu đường biên ảnh Giấu đường biên sẽ đảm bảo rằng ảnh không thể bị dịch chuyển hay hiệu chỉnh một cách ngẫu nhiên và đường biên sẽ không được in ra hoặc hiển thị. Khi đường biên bị giấu đi, phần ảnh cắt ra vẫn được biểu diễn theo giới hạn do đường biên xác định, chỉ có đường biên là chịu ảnh hưởng. Khi chọn hiển thị hay không hiển thị đường biên của một ảnh tức là hiển thị hoặc không hiển thị đường biên của toàn bộ các ảnh trong bản vẽ. Để hiển thị hoặc dấu đường biên ảnh, sử dụng thuộc tính ClippingEnabled. CHÚ Ý Thuộc tính này chỉ tác động lên đường biên của ảnh. Để nhìn thấy sự thay đổi trên ảnh khi bật tắt thuộc tính này cần quan sát kỹ đường viền nhỏ xung quanh ảnh. 1.4.2. Thay đổi lớp của ảnh, màu và kiểu đường của đường biên Có thể thay đổi màu và kiểu đường của đường biên ảnh cũng như lớp của ảnh bằng cách sử dụng các thuộc tính sau: Layer Xác định layer của ảnh Color Xác định màu của đường biên Linetype Xác định kiểu đường của đường biên 1.4.3. Thay đổi tỷ lệ, góc quay, vị trí, bề rộng và chiều cao của ảnh Có thể thay đổi tỷ lệ, góc quay, vị trí, bề rộng và chiều cao của ảnh bằng cách sử dụng các phương thức và thuộc tính sau: ScaleEntity Đặt tỷ lệ ảnh Rotate Quay ảnh Origin Xác định vị trí của ảnh Phát triển AutoCAD bằng ActiveX và VBA | 253 Width Xác định bề rộng của ảnh theo pixel Height Xác định chiều cao của ảnh theo pixel ImageWidth Xác định bề rộng của ảnh theo đơn vị trong cơ sở dữ liệu ImageHeight Xác định bề rộng của ảnh theo đơn vị trong cơ sở dữ liệu ShowRotation Quyết định ảnh raster được hiển thị quay hay không 1.4.4. Thay đổi chế độ nhìn thấy của ảnh Chế độ nhìn thấy của ảnh tác động tới tốc độ vẽ lại bằng việc không thể hiện ảnh trong bản vẽ hiện tại. Các ảnh bị giấu đi sẽ không được thể hiện hay in ra mà chỉ thể hiện đường biên của ảnh. Gán giá trị FALSE cho thuộc tính ImageVisibility để không hiển thị ảnh và gán TRUE để hiển thị ảnh trở lại. 1.4.5. Thay đổi màu của ảnh Bitonal và độ trong suốt Ảnh Raster dạng Bitonal là những ảnh chỉ gồm màu tiền cảnh và màu nền. Khi đính một ảnh dạng này vào bản vẽ, các điểm tiền cảnh trong ảnh đó sẽ kế thừa toàn bộ các thiết lập về màu sắc của lớp hiện tại. Bên cạnh những thay đổi có thể thực hiện với các ảnh đính kèm, có thể thay đổi các ảnh Bitonal bằng cách chuyển màu chữ và bật tắt chế độ trong suốt của màu nền. CHÚ Ý Ảnh Bitonal và đường biên của nó luôn có cùng màu. Để thay đổi màu tiền cảnh của ảnh Bitonal, sử dụng thuộc tính Color. Để bật và tắt chế độ trong suốt, sử dụng thuộc tính Transparency. 1.4.6. Điều chỉnh độ sáng tối, tương phản và độ mờ Có thể điều chỉnh độ sáng tối, tương phản và độ mờ trong AutoCAD để biểu diễn ảnh và in ảnh mà không làm ảnh hưởng đến tệp ảnh Raster ban đầu. Điều chỉnh độ sáng tối để thay đổi độ sáng của ảnh. Điều chỉnh độ tương phản để làm cho các ảnh có chất lượng kém dễ xem hơn. Điều chỉnh độ mờ để các hình học biểu diễn theo dạng Vector dễ nhìn hơn so với ảnh và tạo các hiệu ứng vệt nước khi in ra. Sử dụng các thuộc tính sau để thực hiện các điều chỉnh đó: Brightness Xác đinh mức sáng tối của ảnh Contrast Xác đinh mức độ tương phản của ảnh Fade Xác đinh mức độ mờ của ảnh 1.5. Cắt xén ảnh Ảnh có thể được biểu diễn hoặc in ra chỉ một phần cần thiết bằng cách cắt riêng phần đó. Đường biên của phần cắt riêng đó là một hình đa giác phẳng hoặc là hình chữ nhật với các đỉnh của chúng phải nằm bên trong khung của ảnh. Từ một ảnh có thể cắt ra nhiều ảnh nhỏ bằng cách dùng các đường biên cắt khác nhau. 254 | Chương 10: Kỹ thuật vẽ nâng cao và tổ chức bản vẽ Cắt ảnh bằng đường bao cắt hình chữ nhật Ảnh nhận được sau khi cắt Các bước thực hiện cắt ảnh 1 Bật đường biên của ảnh bằng thuộc tính ClippingEnabled. 2 Xác định đường biên cắt và thực hiện cắt với phương thức ClipBoundary. Phương thức này yêu cầu một tham số đầu vào là mảng kiểu variant1 của các toạ độ trong hệ toạ độ 2D WCS để xác định đường biên cắt ảnh. 1.5.1. Thay đổi đường biên cắt Để đổi một đường biên cắt có sẵn chỉ cần lặp lại các bước nêu trên, khi đó đường biên cũ sẽ bị xoá đi và đường biên mới sẽ thay thế đường biên cũ. 1.5.2. Hiển thị và không hiển thị đường biên cắt Ảnh được cắt ra từ ảnh ban đầu có thể được hiển thị cùng với đường biên cắt; hoặc giấu đi đường bao cắt và hiển thị các đường biên của ảnh gốc. Để giấu đi đường biên cắt và hiển thị ảnh gốc, thực hiện gán thuộc tính ClippingEnabled là FALSE. Và ngược lại để biểu diễn ảnh được cắt thì gán thuộc tính trên thành TRUE. Cắt đường biên của ảnh Raster Ví dụ này sẽ chèn một ảnh raster vào không gian mô hình. Sau đó sẽ thực hiện cắt ảnh bằng một đường biên cắt. Ví dụ sử dụng tệp ảnh có tên downtown.jpg lưu trong thư mục Sample của chương trình. Nếu không tìm thấy tệp này trong thư mục nói trên thì có thể tệp đó được lưu trong thư mục khác hoặc dùng một tệp ảnh khác bằng cách gán tên và đường dẫn của tệp đó cho biến imageName. Sub Ch10_ClippingRasterBoundary() Dim insertionPoint(0 To 2) As Double Dim scalefactor As Double Dim rotationAngle As Double Dim imageName As String Dim rasterObj As AcadRasterImage imageName = "C:\AutoCAD\sample\downtown.jpg" insertionPoint(0) = 5 insertionPoint(1) = 5 insertionPoint(2) = 0 1 Kiểu variant: kiểu biến thể là kiểu có thể chứa mọi loại dữ liệu Phát triển AutoCAD bằng ActiveX và VBA | 255 scalefactor = 2 rotationAngle = 0 On Error GoTo ERRORHANDLER ’ Tạo một ảnh raster trong không gian mô hình Set rasterObj = ThisDrawing.ModelSpace.AddRaster _ (imageName, insertionPoint,scalefactor, rotationAngle) ZoomAll ’ Xây dựng đường biên cắt bằng một mảng điểm Dim clipPoints(0 To 9) As Double c ... cao và tổ chức bản vẽ Có thể đính kèm các tham chiếu ngoài với số lượng bao nhiêu tuỳ theo yêu cầu sử dụng và mỗi tham chiếu ngoài khi chèn cần có vị trí, tỷ lệ và góc quay riêng. Ngoài ra có thể điều khiển được các thuộc tính kiểu đường, lớp đã được định nghĩa trong tham chiếu ngoài. Sử dụng phương thức AttachExternalReference để đính kèm tham chiếu ngoài. Phương thức này yêu cầu thông số đầu vào bao gồm các thông tin về: tên của tệp bản vẽ được tham chiếu, tên của xref được sử dụng trong bản vẽ hiện hành, điểm chèn, tỷ lệ, và góc quay của Xref. Phương thức này sẽ trả về đối tượng ExternalReference mới được tạo. Đính kèm tham chiếu ngoài vào bản vẽ Ví dụ này sẽ hiển thị toàn bộ các khối trong bản vẽ hiện tại trước và sau khi thêm tham chiếu ngoài. Trong ví dụ này sử dụng tệp City map.dwg tìm trong thư mục sample. Nếu không có hoặc tệp được lưu ở thư mục khác thì chỉ cần thêm tên và đường dẫn có thực cho biến PathName dưới đây: Sub Ch10_AttachingExternalReference() On Error GoTo ERRORHANDLER Dim InsertPoint(0 To 2) As Double Dim insertedBlock As AcadExternalReference Dim tempBlock As AcadBlock Dim msg As String, PathName As String ’ Định nghĩa tham chiếu ngoài sẽ được chèn InsertPoint(0) = 1 InsertPoint(1) = 1 InsertPoint(2) = 0 PathName = "c:/acad2000/sample/City map.dwg" ’ Hiển thị thông tin về các khối trên bản vẽ GoSub ListBlocks ’ Thêm tham chiếu ngoài cho bản vẽ Set insertedBlock = ThisDrawing.ModelSpace. _ AttachExternalReference(PathName, "XREF_IMAGE", _ InsertPoint, 1, 1, 1, 0, False) ZoomAll ’ Hiển thị thông tin của khối mới của bản vẽ GoSub ListBlocks Exit Sub ListBlocks: msg = vbCrLf ’ Reset message For Each tempBlock In ThisDrawing.Blocks msg = msg & tempBlock.Name & vbCrLf Next MsgBox "The current blocks in this drawing are: " & msg Return ERRORHANDLER: MsgBox Err.Description End Sub 3.2.2. Tham chiếu một lần Tham chiếu một lần tương tự như tham chiếu lặp, trừ khi bản vẽ đã có tham chiếu lặp hay tham chiếu một lần từ trước. Bất cứ tham chiếu một lần nào gắn vào bản vẽ cũng sẽ bị bỏ qua và do đó không được hiển thị trong bản vẽ tham chiếu. Nói cách khác, tham chiếu một lần sẽ không được đọc vào. Phát triển AutoCAD bằng ActiveX và VBA | 269 Lưu ý là ta chỉ nên sử dụng tham chiếu một lần khi đối tượng hình học được tham chiếu không giúp ích cho người dùng khác khi họ tham chiếu đến bản vẽ của ta. Ví dụ khi cần thiết kế hệ thống dây điện trong nhà và cần tham khảo thiết kế sàn nhà. Nếu sử dụng tham chiếu một lần (tốt hơn là tham chiếu lặp) tới bản vẽ thiết kế sàn thì một người thiết kế khác không cần tham khảo thiết kế sàn có thể tham chiếu đến bản vẽ thiết kế hệ thống dây điện mà không phải kèm theo bản vẽ thiết kế sàn nhà. Tham chiếu một lần được thiết kế để chia sẻ dữ liệu. Bằng cách đó có thể nhìn được bản vẽ liên hệ với các bản vẽ khác như thế nào. Tham chiếu một lần cũng làm giảm đi việc tham chiếu lòng vòng Để tạo tham chiếu một lần, gán giá trị TRUE cho tham số bOverlay của phương thức AttachExternalReference. 3.3. Tách các tham chiếu ngoài Có thể tách các tham chiếu ngoài ra khỏi bản vẽ hoàn toàn và cũng có thể tách riêng từng tham chiếu ngoài một. Gỡ bỏ tham chiếu ngoài sẽ xoá tất cả các ký hiệu phụ thuộc được liên kết với tham chiếu ngoài đó. Nếu tất cả các đối tượng của tham chiếu ngoài đều bị xoá khỏi bản vẽ thì AutoCAD sẽ loại bỏ định nghĩa tham chiếu ngoài khi mở bản vẽ lần sau. Sử dụng phương thức Detach để gỡ bỏ tham chiếu ngoài và phương thức này không thể gỡ bỏ các tham chiếu ngoài được lồng vào. Tách tham chiếu ngoài Ví dụ này sẽ gắn một tham chiếu ngoài và sau đó tách nó khỏi bản vẽ. Trong ví dụ này sử dụng tệp City map.dwg tìm trong thư mục sample. Nếu không có hoặc tệp được lưu ở thư mục khác thì chỉ cần thêm tên và đường dẫn có thực cho biến PathName dưới đây. Sub Ch10_DetachingExternalReference() On Error GoTo ERRORHANDLER ’ Định nghĩa tham chiếu ngoài sẽ được chèn Dim xrefHome As AcadBlock Dim xrefInserted As AcadExternalReference Dim insertionPnt(0 To 2) As Double Dim PathName As String insertionPnt(0) = 1 insertionPnt(1) = 1 insertionPnt(2) = 0 PathName = "c:/AutoCAD/sample/City map.dwg" ’ Thêm tham chiếu ngoài Set xrefInserted = ThisDrawing.ModelSpace. _ AttachExternalReference(PathName, "XREF_IMAGE", _ insertionPnt, 1, 1, 1, 0, False) ZoomAll MsgBox "The external reference is attached." ’ Gỡ bỏ tham chiếu ngoài Dim name As String name = xrefInserted.name ThisDrawing.Blocks.Item(name).Detach 270 | Chương 10: Kỹ thuật vẽ nâng cao và tổ chức bản vẽ MsgBox "The external reference is detached." Exit Sub ERRORHANDLER: MsgBox Err.Description End Sub 3.4. Tải lại tham chiếu ngoài Nếu có sự thay đổi trong bản vẽ tham chiếu ngoài thì có thể cập nhật nội dung thay đổi đó trong bản vẽ tham chiếu đến nó bằng phương thức Reload. Khi tải lại bản vẽ, tham chiếu ngoài được lựa chọn sẽ được cập nhật trên bản vẽ tham chiếu nó. Nếu đã bỏ tham chiếu ngoài thì nó có thể được tải lại bất cứ lúc nào. Tải lại tham chiếu ngoài Ví dụ này sẽ gắn một tham chiếu ngoài và sau đó sẽ tải lại tham chiếu đó. Trong ví dụ này sử dụng tệp City map.dwg trong thư mục sample. Nếu không có hoặc tệp được lưu ở thư mục khác thì chỉ cần thêm tên và đường dẫn có thực cho biến PathName dưới đây. Sub Ch10_ReloadingExternalReference() On Error GoTo ERRORHANDLER ’ Định nghĩa tham chiếu ngoài sẽ được chèn Dim xrefHome As AcadBlock Dim xrefInserted As AcadExternalReference Dim insertionPnt(0 To 2) As Double Dim PathName As String insertionPnt(0) = 1 insertionPnt(1) = 1 insertionPnt(2) = 0 PathName = "c:/AutoCAD/sample/City map.dwg" ’ Thêm tham chiếu ngoài Set xrefInserted = ThisDrawing.ModelSpace. _ AttachExternalReference(PathName, "XREF_IMAGE", _ insertionPnt, 1, 1, 1, 0, False) ZoomAll MsgBox "The external reference is attached." ’ Tải lại tham chiếu ngoài ThisDrawing.Blocks.Item(xrefInserted.name).Reload MsgBox "The external reference is reloaded." Exit Sub ERRORHANDLER: MsgBox Err.Description End Sub 3.5. Loại bỏ các tham chiếu ngoài Sử dụng phương thức Unload để loại bỏ một tham chiếu ngoài. Khi loại bỏ một tham chiếu không còn được sử dụng trong bản vẽ hiện tại thì sự làm việc của AutoCAD sẽ được tăng cường nhờ việc không phải đọc và biểu diễn các thông tin hình học hay các ký hiệu không cần thiết. Các đối tượng hình học của tham chiếu ngoài và những đối tượng tham chiếu ngoài được ghép sẽ không được thể hiện trong bản vẽ hiện tại cho đến khi tham chiếu ngoài được tải lại. Phát triển AutoCAD bằng ActiveX và VBA | 271 Loại bỏ tham chiếu ngoài Ví dụ này sẽ gắn một tham chiếu ngoài và sau đó loại bỏ tham chiếu đó. Trong ví dụ này sử dụng tệp City map.dwg trong thư mục sample. Nếu không có hoặc tệp được lưu ở thư mục khác thì chỉ cần thêm tên và đường dẫn có thực cho biến PathName dưới đây. Sub Ch10_UnloadingExternalReference() On Error GoTo ERRORHANDLER ’ Định nghĩa tham chiếu ngoài sẽ được chèn Dim xrefHome As AcadBlock Dim xrefInserted As AcadExternalReference Dim insertionPnt(0 To 2) As Double Dim PathName As String insertionPnt(0) = 1 insertionPnt(1) = 1 insertionPnt(2) = 0 PathName = "c:/AutoCAD/sample/City map.dwg" ’ Thêm tham chiếu ngoài Set xrefInserted = ThisDrawing.ModelSpace. _ AttachExternalReference(PathName, "XREF_IMAGE", _ insertionPnt, 1, 1, 1, 0, False) ZoomAll MsgBox "The external reference is attached." ’ Bỏ tham chiếu ngoài ThisDrawing.Blocks.Item(xrefInserted.name).Unload MsgBox "The external reference is unloaded." Exit Sub ERRORHANDLER: MsgBox Err.Description End Sub 3.6. Ràng buộc tham chiếu ngoài Ràng buộc một tham chiếu ngoài vào bản vẽ khi sử dụng phương thức Bind sẽ làm cho tham chiếu ngoài trở thành bộ phận cố định của bản vẽ và không còn là tham chiếu ngoài nữa. Các thông tin của tham chiếu ngoài sẽ trở thành khối thông thường. Khi bản vẽ được tham chiếu bị thay đổi thì tham chiếu ngoài được liên kết sẽ không được cập nhật. Quá trình này sẽ liên kết toàn bộ cơ sở dữ liệu trong bản vẽ bao gồm cả bảng ký hiệu của nó. Bảng ký hiệu là các đối tượng phi hình học, ví dụ như khối, kiểu kích thước, lớp, kiểu chữ. Liên kết với tham chiếu ngoài cho phép các đối tượng phi hình học trong tham chiếu ngoài được sử dụng trong bản vẽ hiện hành. Phương thức Bind chỉ yêu cầu một tham số là bPrefixName. Nếu tham số này được gán giá trị TRUE thì tên trong bảng ký hiệu của bản vẽ tham chiếu ngoài sẽ được thêm tiền tố $x$ trong bản vẽ hiện tại, trong đó x : là số nguyên bất kỳ được tự động tăng để tránh ghi đè lên định nghĩa khối đã có. Nếu tham số này nhận giá trị FALSE thì tên trong bảng ký hiệu sẽ được ghép chung vào bản vẽ hiện tại mà không có tiền tố. Nếu có các tên trùng nhau thì AutoCAD sẽ sử dụng ký hiệu vừa được định nghĩa trong bản vẽ. Nếu không chắc chắn liệu trong bản vẽ có trùng tên trong bảng ký hiệu hay không thì nên gán bPrefixName là TRUE. 272 | Chương 10: Kỹ thuật vẽ nâng cao và tổ chức bản vẽ Ràng buộc tham chiếu ngoài Ví dụ này sẽ gắn một tham chiếu ngoài và sau đó liên kết nó với bản vẽ. Trong ví dụ này sử dụng tệp City map.dwg trong thư mục sample. Nếu không có hoặc tệp được lưu ở thư mục khác thì chỉ cần thêm tên và đường dẫn có thực cho biến PathName dưới đây. Sub Ch10_BindingExternalReference() On Error GoTo ERRORHANDLER ’ Định nghĩa tham chiếu ngoài cần chèn vào Dim xrefHome As AcadBlock Dim xrefInserted As AcadExternalReference Dim insertionPnt(0 To 2) As Double Dim PathName As String insertionPnt(0) = 1 insertionPnt(1) = 1 insertionPnt(2) = 0 PathName = "c:/AutoCAD/sample/City map.dwg" ’ Thêm tham chiếu ngoài vào bản vẽ Set xrefInserted = ThisDrawing.ModelSpace. _ AttachExternalReference(PathName, "XREF_IMAGE", _ insertionPnt, 1, 1, 1, 0, False) ZoomAll MsgBox "The external reference is attached." ’ Ràng buộc tham chiếu ngoài vào bản vẽ ThisDrawing.Blocks.Item(xrefInserted.name).Bind False MsgBox "The external reference is bound." Exit Sub ERRORHANDLER: MsgBox Err.Description End Sub 3.7. Cắt xén các Khối và Tham chiếu ngoài Không có phương thức nào được cung cấp trong ActiveX Automation để cắt xén đường bao của các khối và tham chiếu ngoài. Sử dụng lệnh XCLIP của AutoCAD hoặc gửi dòng lệnh XCLIP tới AutoCAD bằng phương thức SendCommand. 3.7.1. Tải vào theo nhu cầu và nâng cao tốc độ xử lý tham chiếu ngoài Ta có thể cải thiện tốc độ thao tác với bản vẽ có sử dụng tham chiếu ngoài bằng cách kết hợp giữa việc tải theo nhu cầu và lưu bản vẽ với chỉ mục thông qua các biến hệ thống là XLOADCTL và INDEXCTL. Khi bật chế độ tải theo nhu cầu, và nếu có lưu chỉ mục trong bản vẽ được tham chiếu, AutoCAD chỉ tải vào bộ nhớ phần dữ liệu cần thiết để tái tạo trong bản vẽ hiện hành. Hay nói cách khác, bản vẽ được tham chiếu sẽ được đọc “theo nhu cầu”. Để thấy rõ lợi ích to lớn của tính năng này, ta cần phải lưu bản vẽ được tham chiếu với các chỉ mục lớp và chỉ mục không gian. Lợi ích của chế độ tải theo nhu cầu sẽ thể hiện rõ nhất khi: Ta cắt xén khối tham chiếu ngoài để thể hiện chỉ một phần của bản vẽ được tham chiếu, và chỉ mục không gian cũng được lưu trong bản vẽ tham chiếu ngoài; Phát triển AutoCAD bằng ActiveX và VBA | 273 Ta làm đông một số lớp trong tham chiếu ngoài, và chỉ mục lớp cũng được lưu trong bản vẽ tham chiếu ngoài. Để bật chế độ tải theo nhu cầu, ta sử dụng thuộc tính XRefDemandLoad. Nếu ta bật chế độ này với lựa chọn acDemandLoadEnabledWithCopy, AutoCAD sẽ tạo ra một bản sao tạm thời của tệp được tham chiếu và sẽ tham chiếu đến bản sao tạm thời đó. Khi đó, ta có thể vừa tải tham chiếu ngoài vừa cho phép thay đổi tệp bản vẽ được tham chiếu. Khi tắt chế độ tải theo nhu cầu, AutoCAD sẽ đọc toàn bộ bản vẽ được tham chiếu mà không cần quan tâm đến tính nhìn thấy của lớp hay những vùng được cắt xén. Để bật chỉ mục lớp và chỉ mục không gian, ta sẽ thiết lập biến hệ thống INDEXCTL sử dụng phương thức SetVariable. Ta có thể gán một trong những giá trị sau cho biến INDEXCTL: 0 = không tạo chỉ mục 1 = tạo chỉ mục lớp 2 = tạo chỉ mục không gian 3 = tạo cả chỉ mục lớp và chỉ mục không gian Mặc định, khi tạo mới bản vẽ trong AutoCAD, biến INDEXCTL có giá trị là 0. 4. Nối kết và khôi phục lại dữ liệu mở rộng Dữ liệu mở rộng (xdata) được sử dụng như một công cụ liên kết thông tin với các đối tượng trong bản vẽ. Gán dữ liệu mở rộng cho tất cả các đối tượng trong tập đối tượng được chọn Ví dụ này sẽ nhắc người dùng chọn đối tượng trong bản vẽ. Các đối tượng được chọn sẽ nằm trong một tập đối tượng được chọn và sau đó các dữ liệu mở rộng xác định sẽ được gán cho tất cả các đối tượng trong tập này: Sub Ch10_AttachXDataToSelectionSetObjects() ’ Tạo tập đối tượng được chọn Dim sset As Object Set sset = ThisDrawing.SelectionSets.Add("SS1") ’ Nhắc người dùng chọn đối tượng sset.SelectOnScreen ’ Định nghĩa dữ liệu mở rộng Dim appName As String, xdataStr As String appName = "MY_APP" xdataStr = "This is some xdata" Dim xdataType(0 To 1) As Integer Dim xdata(0 To 1) As Variant ’ Định nghĩa giá trị cho mỗi mảng ’1001 nhận biết appName xdataType(0) = 1001 xdata(0) = appName ’1000: xác định kiểu chuỗi 274 | Chương 10: Kỹ thuật vẽ nâng cao và tổ chức bản vẽ xdataType(1) = 1000 xdata(1) = xdataStr ’ Vòng lặp qua tất cả các thực thể trong tập đối tượng được ’ chọn và gán dữ liệu mở rộng cho mỗi thực thể Dim ent As Object For Each ent In sset ent.SetXData xdataType, xdata Next ent End Sub Xem dữ liệu mở rộng của các đối tượng trong tập đối tượng được chọn Ví dụ này sẽ hiển thị dữ liệu mở rộng đã được gắn kèm trong ví dụ trước. Nếu gắn dữ liệu mở rộng khác kiểu chuỗi (kiểu 1000) thì cần sửa lại đoạn mã này. Sub Ch10_ViewXData() ’ Tìm tập lựa chọn được tạo từ ví dụ trước Dim sset As Object Set sset = ThisDrawing.SelectionSets.Item("SS1") ’ Định nghĩa biến dữ liệu mở rộng để lưu thông tin của dữ ’ liệu mở rộng Dim xdataType As Variant Dim xdata As Variant Dim xd As Variant ’Định nghĩa biến đếm chỉ số Dim xdi As Integer xdi = 0 ’ Lặp qua tất cả các đối tượng trong tập lựa chọn ’ và lấy giá trị dữ liệu mở rộng của mỗi đối tượng Dim msgstr As String Dim appName As String Dim ent As AcadEntity appName = "MY_APP" For Each ent In sset msgstr = "" xdi = 0 ’ Lấy giá trị và kiểu của xdata appName ent.GetXData appName, xdataType, xdata ’ Nếu biến xdataType chưa được khởi tạo thì không có ’ xdata appName nhận được từ thực thể đó If VarType(xdataType) vbEmpty Then For Each xd In xdata msgstr = msgstr & vbCrLf & xdataType(xdi) _ & ": " & xd xdi = xdi + 1 Next xd End If ’ Nếu biến msgstr là NULL, thì không có dữ liệu mở rộng If msgstr = "" Then msgstr = vbCrLf & "NONE" MsgBox appName & " xdata on " & ent.ObjectName & _ ":" & vbCrLf & msgstr Next ent End Sub
File đính kèm:
- giao_trinh_phat_trien_autocad_bang_activex_vba_chuong_10_ky.pdf