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ẽ
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ẽ.
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 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: 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, rotationAn ... 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:
phat_trien_autocad_bang_activex_vba_chuong_10_ky_thuat_ve_na.pdf

