Việc sử dụng các layer và linetypes là các công cụ để nâng cao hiệu quả quản lý bản vẽ trong khi vẽ và in ấn. Trong chương này chúng ta sẽ học cách để tạo lập, điều khiển và sử dụng các Layer.
Layer
Layer là một thuộc tính của các đối tượng nét vẽ trong CAD, việc sử dụng các layer để tạo thành các nhóm đối tượng vẽ khác nhau rất tiện trong quản lý các đối tượng vẽ. Ví dụ tất các các nét trục được vẽ bằng cùng một layer,.
Accessing Layer
AutoCad tổ chức quản lý layer theo các collection, đây là nơi tập hợp và quản lý các đối tượng layer trong bản vẽ. Bạn có thể tạo ra các layer tùy theo yêu cầu sử dụng vẽ của bạn. Để quản lý tất cả các đối tượng này ta khai báo biến
AcadLayers. Đối tượng kiểu AcadLayers này bao gồm tất cả các Layer trong bản vẽ. Private Sub CommandButton1_Click()
Dim ObjectLayer As AcadLayers
Set ObjectLayer = ThisDrawing.Layers MsgBox (ObjectLayer.Count)
End Sub Dim ObjLayers as AcadLayers Set ObjLayers = ThisDrawing.Layers
Để truy nhập vào một đối tượng Layer cụ thể ta dùng biến AcadLayer.
Dim ObjLayer As AcadLayer
Set ObjLayer = ObjLayers.Item(2)
Set ObjLayer = ObjLayers.Item("Layer4") MsgBox (ObjLayer.Name)
Câu lệnh Set ObjLayer = ObjLayers.Item(2) có nghĩa là đối tượng ObjLayer được gán phần tử Layer đứng thứ 2 (thứ tự từ trên xuống trong List Layer mà bạn thấy trong khi vẽ)
Interating Layer
Các layer cũng cho phép các bạn lặp như với các biến nguyên của vòng lặp for.
Đó gọi là sự lặp các layer.
Private Sub CommandButton2_Click() Dim ObjLayer As AcadLayer
For Each ObjLayer In ThisDrawing.Layers MsgBox (ObjLayer.Name)
NextEnd Sub
Kiểm tra sự tồn tại của một Layer
Khi lập trình bạn có thể gặp trường hợp cần kiểm tra xem một Layer đã tồn tại hay chưa (có thể là để dùng, sửa hoặc xóa), bạn cần lưu ý rằng AutoCad quản lý Layer theo tên. Đoạn Code sau giúp bạn kiểm tra sự có mặt của một Layer.
Private Sub CommandButton3_Click() Dim objLayer As AcadLayer
Dim TenLayer As String
TenLayer = InputBox("Nhap vao ten Layer can KT:") If TenLayer = "" Then
Exit Sub End If
For Each objLayer In ThisDrawing.Layers
If 0 = StrComp(objLayer.Name, TenLayer, vbTextCompare) Then
MsgBox "Layer " & TenLayer & " da ton tai"
Exit Sub End If Next
MsgBox "Layer " & TenLayer & " chua ton tai"
End Sub
Lưu ý: Trong AutoCad phân biệt chữ in hoa và chữ thường, ví dụ 2 tên Layer1 và layer1 là hoàn toàn khác nhau. Các bạn cần ghi nhớ khi lập trình để tránh nhầm lẫn.
Tạo một Layer mới
Bạn có thể tạo các layer tùy theo mục đích sử dụng của mình mà không bị hạn chế về số lượng. Để tạo một layer mới các bạn dùng cú pháp sau:
Set LayerObject = LayerCollection.Add(LayerName)
Private Sub CommandButton4_Click() Dim TenLayer As String
Dim ObjLayer As AcadLayer
TenLayer = InputBox("Nhap vao ten Layer can them:") If TenLayer = "" Then
Exit Sub End If
On Error Resume Next 'Neu loi thi nhay sang buoc tiep theo Set ObjLayer = ThisDrawing.Layers(TenLayer)
If ObjLayer Is Nothing Then
Set ObjLayer = ThisDrawing.Layers.Add(TenLayer) If ObjLayer Is Nothing Then
MsgBox "Khong add duoc"
Else
MsgBox "Da them layer " & TenLayer End If
Else
MsgBox "Layer da co roi"
End If End Sub
Active một Layer
ThisDrawing.ActiveLayer = ThisDrawing.Layers("Layer1")
Khi bạn sử dụng câu lệnh này bạn nên lưu ý rằng tên layer Layer1 phải tồn tại trong bản vẽ rồi, nếu không chương trình sẽ báo lỗi.
Tắt/mở một Layer
Trong khi thể hiện bản vẽ, có trường hợp bạn muốn chỉ có một layer nào đó được hiện trên bản vẽ để tiện cho việc chỉnh sửa, lúc đó bạn cần biết cách tắt mở các Layer.
Đoạn code sau thực hiện công việc đó Chỉ hiển thị một Layer nhập vào
Private Sub CommandButton1_Click() On Error Resume Next
Dim TenLayer As String Dim ObjLayer As AcadLayer
TenLayer = InputBox("Nhap vao ten Layer muon hien") If TenLayer = "" Then Exit Sub
For Each ObjLayer In ThisDrawing.Layers ObjLayer.LayerOn = False
Next ObjLayer
Set ObjLayer = ThisDrawing.Layers(TenLayer) If ObjLayer Is Nothing Then
MsgBox "Khong ton tai layer yeu cau"
Exit Sub End If
ObjLayer.LayerOn = True 'UserForm1.Hide
Update End Sub
Hiển thị tất cả các Layer
Private Sub CommandButton2_Click() Dim ObjLayer As AcadLayer
For Each ObjLayer In ThisDrawing.Layers ObjLayer.LayerOn = True
Next ObjLayer 'UserForm1.Hide Update
End Sub
Đóng băng một Layer
Chức năng đóng băng một Layer tức là làm cho người vẽ không thể tác động được vào Layer đó (mặc dù có trên hình vẽ)
Tương tự như cho Ẩn/Hiện một layer, để đóng băng một Layer bạn dùng câu lệnh:
ObjLayer.Freeze = True
Ví dụ
Private Sub CommandButton1_Click() On Error Resume Next
Dim TenLayer As String Dim ObjLayer As AcadLayer
TenLayer = InputBox("Nhap vao ten Layer muon dong bang")
If TenLayer = "" Then Exit Sub
For Each ObjLayer In ThisDrawing.Layers ObjLayer.Freeze = False
Next ObjLayer
Set ObjLayer = ThisDrawing.Layers(TenLayer) If ObjLayer Is Nothing Then
MsgBox "Khong ton tai layer yeu cau"
Exit Sub End If
ObjLayer.Freeze = True 'UserForm1.Hide
Update End Sub
Khóa một Layer
Để khóa một Layer ta dùng phương thức Lock của đối tượng:
ObjLayer.Lock = True
Để kiểm tra một Layer đã bị khóa chưa ta có thể kiểm tra bằng cách If ObjLayer.Lock Then ……..
‘Khối câu lệnh được thực thi khi đối tượng kiểm tra đã bị khóa.
Rename Layer Xóa Layer Màu của Layer
Để điều khiển màu của Layer ta dùng cú pháp
ObjLayer.Lock ObjLayer.Color = <Tên mầu>
Tên màu có thể là chữ hoặc các số.
VD: acRed = Màu đỏ
HoặcObjLayer.Lock = 1 ‘Màu đỏ
Khai báo bằng
Tên Khai báo bằng chỉ
số Màu hiển thị
acByBlock 0 Hiển thị màu theo Block
acRed 1 Màu đỏ
acYellow 2 Màu vàng
acGreen 3 Màu xanh lá cây
acCyan 4 Màu xanh lục
acBlue 5 Xanh da trời
acMagenta 6 Màu hồng đậm
acWhile 7 Màu trắng
acByLayer 256 Hiển thị theo Layer
Layer Linetypes
Cũng giống như màu, một Layer các kiểu Linetypes. Nếu bạn không gán kiểu Linetypes cho Layer thì Layer sẽ lấy Linetype mặc định. Tất cả LineType đều được cài đặt theo Layer.
Mặc định của linetype là kiểu continous (Liên tục). Trong một bản vẽ xây dựng có rất nhiều nét vẽ cần thể hiện kiểu linetype theo tiêu chuẩn (ví dụ nét trục, nét khuất, nét thấy…) vì vậy khi lập trình vẽ bạn cần biết các linetype khác nhau.
Để cài đặt linetype bạn dùng phương thức:
objectLayer = “<Tên kiểu lineTypes>”
VD:
objectLayer = “Continuous”
Layer Lineweight II. LAYER