Phát triển AutoCAD 12

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.

Ả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.

pdf 28 trang kimcuc 15120
Bạn đang xem 20 trang mẫu của tài liệu "Phát triển AutoCAD 12", để 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 12

Phát triển AutoCAD 12
 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 
clipPoints(0) = 6: clipPoints(1) = 6.75 
clipPoints(2) = 7: clipPoints(3) = 6 
clipPoints(4) = 6: clipPoints(5) = 5 
clipPoints(6) = 5: clipPoints(7) = 6 
clipPoints(8) = 6: clipPoints(9) = 6.75 
 ...  với hai kiểu tham chiếu 
ngoài trên cho nên chúng tôi tạm sử dụng từ tham chiếu lặp cho kiểu Attaching xref và từ tham chiếu 
một lần cho kiểu Overlaying xref. 
 268 | Chương 10: Kỹ thuật vẽ nâng 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:

  • pdfphat_trien_autocad_12.pdf