LÀM VIỆC VỚI CÁC LAYER VÀ LINETYPES I. LAYER

Một phần của tài liệu giáo trình VBA for CAD (Trang 21 - 26)

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

Một phần của tài liệu giáo trình VBA for CAD (Trang 21 - 26)

Tải bản đầy đủ (DOC)

(32 trang)
w