Sử dụng kiểu đường kích thước Các đối tượng đường kích thước mới được tạo ra sẽ được lấy định dạng của kiểu đường kích thước hiện hành.. Ví dụ sau cho phép người dùng chọn một đường kíc
Trang 1263
‘ Cập nhật những thay đổi cho kiểu đường kích thước
objDimStyle.CopyFrom ThisDrawing
End Sub
Có rất nhiều biến hệ thống dùng để định dạng kiểu đường kích thước và các biến hệ thống này đều được bắt đầu bằng tiền tố DIM Người dùng có thể tham khảo các biến hệ thống này trong
mục “System Variable” trong tài liệu “AutoCAD Command Reference” có sẵn trong bộ tài liệu
trợ giúp của AutoCAD Dưới đây là danh sách các biến hệ thống định dạng kiểu đường kích thước hay được sử dụng:
Biến Mô tả
DIMASZ Kiểu Double Xác định kích thước mũi tên của đường kích thước
DIMBLK Kiểu String Xác định tên của loại mũi tên của đường kích thước Một số giá trị
thường dùng:
"." "_OBLIQUE" "_OPEN"
DIMTSZ Kiểu Double Xác định kích thước của mũi tên trong trường hợp biến hệ thống
DIMBLK được gán bằng "_OBLIQUE" Nếu gán bằng số khác không, kiểu mũi tên
sẽ được tự động chuyển thành “_OBLIQUE”; nếu gán bằng 0, kiểu mũi tên sẽ là kiểu được xác định trong biến hệ thống DIMBLK
DIMCLRD Kiểu Integer Xác định màu của đường kích thước và mũi tên
DIMCLRE Kiểu Integer Xác định màu của đường gióng
DIMCLRT Kiểu Integer Xác định màu của chữ kích thước
DIMLWD Kiểu Double Xác định bề dày của đường kích thước
DIMDEC Kiểu Integer Xác định số chữ số sau dấu phẩy trong phần chữ kích thước
Sử dụng kiểu đường kích thước
Các đối tượng đường kích thước mới được tạo ra sẽ được lấy định dạng của kiểu đường kích thước hiện hành Người dùng có thể thay đổi kiểu đường kích thước hiện hành bằng cách gán giá trị của thuộc tính ActiveDimStyle bằng một đối tượng kiểu đường kích thước Chẳng hạn như khi muốn thay đổi kiểu đường kích thước hiện hành thành kiểu đường kích thước đã được tạo ở ví dụ trước, có thể dùng đoạn mã sau;
ThisDrawing.ActiveDimStyle = objDimStyle
Hoặc
ThisDrawing.ActiveDimStyle = ThisDrawing.DimStyles("NewDimStyle")
Ngoài ra, sau khi đường kích thước được tạo ra, người dùng có thể thay đổi kiểu đường kích thước cho nó bằng cách gán giá trị cho thuộc tính StyleName có trong đối tượng đường kích thước
Ví dụ sau cho phép người dùng chọn một đường kích thước trên màn hình và thay đổi kiểu đường kích thước của đối tượng đó thành kiểu đường kích thước “NewDimStyle” đã được tạo
ở ví dụ trước
Sub VD_StyleName()
Dim dimEnt As AcadEntity
Dim P As Variant
Trang 2264
‘ Chọn đối tượng đường kích thước trên màn hình
ThisDrawing.Utility.GetEntity dimEnt, P, "Chon duong kich thuoc: " ‘ Thay đổi kiểu đường kích thước cho đường kích thước được chọn
dimEnt.StyleName = "NewDimStyle"
End Sub
5.7.2 Tạo đường kích thước
Để tạo mới đường kích thước, người dùng có thể sử dụng các phương thức AddDimXXX, với XXX là loại đường kích thước cần tạo AutoCAD có nhiều loại đường kích thước khác nhau, dưới đây chỉ trình bày cách thức tạo các loại đường kích thước thường dùng
Đường kích thước dài ‐ DimAligned
Sử dụng phương thức AddDimAligned để tạo mới đường kích thước dài Với đường kích thước này, người dùng phải xác định 3 điểm: 2 điểm gốc và một điểm xác định vị trí chữ kích thước Đường kích thước được tạo ra sẽ nằm song song với đoạn thẳng tạo bởi 2 điểm gốc
Hình V-16: Đường kích thước dài
Cú pháp của phương thức AddDimAligned như sau:
Set RetVal = object.AddDimAligned(ExtLine1Point, ExtLine2Point,
TextPosition)
Tham số Giải thích
ExtLine1Point Kiểu Variant (mảng 3 phần tử kiểu Double) Toạ độ điểm gốc thứ nhất
ExtLine2Point Kiểu Variant (mảng 3 phần tử kiểu Double) Toạ độ điểm gốc thứ hai
TextPosition Kiểu Variant (mảng 3 phần tử kiểu Double) Toạ độ điểm ghi kích thước
RetVal Đối tượng kiểu DimAligned, tham chiếu đến đối tượng vừa mới được tạo
Ví dụ sau sẽ tạo một đường kích thước dài với toạ độ hai điểm gốc là (5,5,0) và (10,8,0), còn toạ độ điểm ghi kích thước là (6.5,8,0)
Sub VD_AddDimAligned()
Dim dimObj As AcadDimAligned
Dim P1(0 To 2) As Double
Dim P2 (0 To 2) As Double
Dim location(0 To 2) As Double
' Định nghĩa các điểm trên đường kích thước
P1 (0) = 5#: P1 (1) = 5#: P1 (2) = 0#
P2 (0) = 10#: P2 (1) = 8#: P2 (2) = 0#
location(0) = 6.5: location(1) = 8#: location(2) = 0#
Trang 3
265
' Tạo đường kích thước dài trong không gian mô hình
Set dimObj = ThisDrawing.ModelSpace.AddDimAligned(P1, P2, location) ZoomAll
End Sub
Đường kích thước hình chiếu ‐ DimRotated
Sử dụng phương thức AddDimRotated để tạo mới đường kích thước hình chiếu Với đường kích thước này, người dùng cần phải xác định 2 điểm gốc, 1 điểm nằm trên đường kích thước
và giá trị góc xoay Kích thước được ghi là hình chiếu của đoạn thẳng nối 2 điểm gốc lên phương tạo với trục X một góc bằng góc xoay và đi qua điểm nằm trên đường kích thước Hình dưới đây minh hoạ các thành phần cần thiết để tạo đường kích thước hình chiếu:
Hình V-17: Đường kích thước hình chiếu
Cú pháp của phương thức AddDimRotated như sau:
Set RetVal = object.AddDimRotated(XLine1Point, XLine2Point,
DimLineLocation, RotationAngle)
Tham số Giải thích
XLine1Point Kiểu Variant (mảng 3 phần tử kiểu Double) Toạ độ điểm gốc thứ nhất
XLine2Point Kiểu Variant (mảng 3 phần tử kiểu Double) Toạ độ điểm gốc thứ hai
DimLineLocation Kiểu Variant (mảng 3 phần tử kiểu Double) Toạ độ điểm nằm trên đường kích
thước
RotationAngle Kiểu Double Góc xoay so với phương ngang của phương chiếu, tính bằng
Radian
RetVal Đối tượng kiểu DimRotated, tham chiếu đến đối tượng vừa mới được tạo
Ví dụ sau tạo một đường kích thước hình chiếu với toạ độ hai điểm gốc là (0,5,0) và (5,5,0); toạ
độ điểm nằm trên đường kích thước là (0,0,0); góc xoay phương chiếu bằng 120 độ
Sub VD_AddDimRotated()
Dim dimObj As AcadDimRotated
Dim point1(0 To 2) As Double
Dim point2(0 To 2) As Double
Dim location(0 To 2) As Double
Dim rotAngle As Double
' Xác định các giá trị cần thiết
point1(0) = 0#: point1(1) = 5#: point1(2) = 0#
Trang 4266
point2(0) = 5#: point2(1) = 5#: point2(2) = 0#
location(0) = 0#: location(1) = 0#: location(2) = 0#
rotAngle = 120
rotAngle = rotAngle * 3.141592 / 180# ' Chuyển sang Radian
' Tạo đường kích thước hình chiếu trong không gian mô hình
Set dimObj = ThisDrawing.ModelSpace.AddDimRotated _
(point1, point2, location, rotAngle) ZoomAll
End Sub
GỢI Ý Để tạo đường kích thước hình chiếu theo phương ngang (Horizontal) thì gán góc
xoay phương chiếu bằng 0, còn đường kích thước hình chiếu theo phương đứng (Vertical) thì gán góc xoay phương chiếu bằng Pi/2
Đường kích thước góc – DimAngular
Sử dụng phương thức AddDimAngular để tạo mới đường kích thước góc Với đường kích thước này, người dùng cần phải xác định tâm, hai điểm gốc và vị trí đặt chữ kích thước Hình dưới đây minh hoạ các thành phần cần thiết để tạo đường kích thước góc:
Hình V-18: Đường kích thước góc
Cú pháp phương thức AddDimAngular như sau:
Set RetVal = object.AddDimAngular(AngleVertex, FirstEndPoint,
SecondEndPoint, TextPoint)
Tham số Giải thích
AngleVertex Kiểu Variant (mảng 3 phần tử kiểu Double) Toạ độ tâm của đường kích thước FirstEndPoint Kiểu Variant (mảng 3 phần tử kiểu Double) Toạ độ điểm gốc thứ nhất
SecondEndPoint Kiểu Variant (mảng 3 phần tử kiểu Double) Toạ độ điểm gốc thứ hai
TextPoint Kiểu Variant (mảng 3 phần tử kiểu Double) Toạ độ điểm ghi kích thước
RetVal Đối tượng kiểu DimAngular, tham chiếu đến đối tượng vừa mới được tạo
Ví dụ sau tạo đường kích thước đo góc trong không gian mô hình với toạ độ tâm là (0,5,0); toạ
độ các điểm gốc là (1,7,0) và (1,3,0); toạ độ điểm ghi kích thước là (3,5,0):
Sub VD_AddDimAngular()
Trang 5267
Dim dimObj As AcadDimAngular
Dim angVert(0 To 2) As Double
Dim FirstPoint(0 To 2) As Double
Dim SecondPoint(0 To 2) As Double
Dim TextPoint(0 To 2) As Double
' Xác định các thông số cần thiết để tạo đường kích thước
angVert(0) = 0#: angVert(1) = 5#: angVert(2) = 0#
FirstPoint(0) = 1#: FirstPoint(1) = 7#: FirstPoint(2) = 0#
SecondPoint(0) = 1#: SecondPoint(1) = 3#: SecondPoint(2) = 0#
TextPoint(0) = 3#: TextPoint(1) = 5#: TextPoint(2) = 0#
' Tạo đường kích thước đo góc trong không gian mô hình
Set dimObj = ThisDrawing.ModelSpace.AddDimAngular(angVert, FirstPoint, SecondPoint, TextPoint)
ZoomAll
End Sub
Đường kích thước bán kính – DimRadial
Sử dụng phương thức AddDimRadial để tạo đường kích thước bán kính Để tạo được đường kích thước này, cần phải xác định được toạ độ tâm, toạ độ điểm đo (nằm trên cung tròn hoặc đường tròn) và chiều dài từ điểm đo đến chữ kích thước
Hình V-19: Đường kích thước bán kính
Cú pháp của phương thức AddDimRadial như sau:
Set RetVal = object.AddDimRadial(Center, ChordPoint, LeaderLength)
Tham số Giải thích
Center Kiểu Variant (mảng 3 phần tử kiểu Double) Toạ độ tâm của đường kích thước ChordPoint Kiểu Variant (mảng 3 phần tử kiểu Double) Toạ độ điểm đo nằm trên đường
tròn hoặc cung tròn
LeaderLength Kiểu Double Khoảng cách từ chữ ghi kích thước đến điểm đo
RetVal Đối tượng kiểu DimRadial, tham chiếu đến đối tượng vừa mới được tạo
Ví dụ sau tạo một đường kích thước bán kính trong không gian mô hình
Sub VD_AddDimRadial()
Dim dimObj As AcadDimRadial
Dim center(0 To 2) As Double
Dim chordPoint(0 To 2) As Double
Trang 6268
Dim leaderLen As Integer
' Xác định các thông số của đường kích thước
center(0) = 0#: center(1) = 0#: center(2) = 0#
chordPoint(0) = 5#: chordPoint(1) = 5#: chordPoint(2) = 0#
leaderLen = 2
' Tạo đường kích thước bán kính trong không gian mô hình
Set dimObj = ThisDrawing.ModelSpace.AddDimRadial _
(center, chordPoint, leaderLen)
ZoomAll
End Sub
Đường kích thước đường kính – DimDiametric
Sử dụng phương thức AddDimDiametric để tạo mới đường kích thước đường kính Để tạo được đường kích thước này, cần phải xác định 2 điểm đo nằm trên đường tròn và khoảng cách
từ điểm đo thứ nhất đến chữ ghi kích thước
Hình V-20: Đường kích thước đường kính
Cú pháp của phương thức AddDimDiametric như sau:
Set RetVal = object.AddDimDiametric(ChordPoint, FarChordPoint,
LeaderLength)
Tham số Giải thích
ChordPoint Kiểu Variant (mảng 3 phần tử kiểu Double) Toạ độ điểm đo thứ nhất nằm trên
đường tròn hoặc cung tròn
FarChordPoint Kiểu Variant (mảng 3 phần tử kiểu Double) Toạ độ điểm đo thứ hai nằm trên
đường tròn hoặc cung tròn
LeaderLength Kiểu Double Khoảng cách từ chữ ghi kích thước đến điểm đo thứ nhất
RetVal Đối tượng kiểu DimDiametric, tham chiếu đến đối tượng vừa mới được tạo
Ví dụ sau minh hoạ cách thức sử dụng phương thức AddDimDiametric
Sub VD_AddDimDiametric()
Dim dimObj As AcadDimDiametric
Dim chordPoint(0 To 2) As Double
Dim farChordPoint(0 To 2) As Double
Dim leaderLength As Double
Trang 7269
' Xác định các thông số của đường kích thước
chordPoint(0) = 5#: chordPoint(1) = 3#: chordPoint(2) = 0#
farChordPoint(0) = 5#: farChordPoint(1) = 5#: farChordPoint(2) = 0# leaderLength = 2#
' Tạo đường kích thước đường kính trong không gian mô hình
Set dimObj = ThisDrawing.ModelSpace.AddDimDiametric _
(chordPoint, farChordPoint, leaderLength)
ZoomAll
End Sub
5.7.3 Định dạng đường kích thước
Ngoài cách định dạng đường kích thước bằng kiểu đường kích thước thông qua thuộc tính
StyleName như đã trình bày ở mục “Sử dụng kiểu đường kích thước” trang 263, người dùng
còn có thể thay đổi các định dạng này thông qua các thuộc tính tương ứng của đối tượng đường kích thước Dưới đây là danh sách các thuộc tính để định dạng cho đường kích thước thường dùng:
Thuộc tính Mô tả
AngleFormat Quy định định dạng đơn vị của kích thước dạng góc
Arrowhead1Type,
Arrowhead2Type Quy định dạng đầu mũi tên của đường kích thước
ArrowheadSize Quy định cỡ đầu mũi tên của đường kích thước
CenterMarkSize Quy định cỡ của dấu tâm cho các kích thước dạng tia (đường kích thước
góc, bán kính, đường kính, ) CenterType Quy định dạng của dấu tâm cho kích thước dạng tia
DecimalSeparator Quy định ký tự dùng làm dấu cách thập phân
DimensionLineColor Quy định màu cho đường ghi kích thước
DimensionLineWeight Quy định độ dày của đường ghi kích thước
ExtensionLineColor Quy định màu của các đường gióng
ExtensionLineExtend Quy định khoảng cách từ đường gióng đến đường ghi kích thước
ExtensionLineOffset Quy định khoảng cách từ đường gióng đến điểm gốc của đường gióng ExtensionLineWeight Quy định độ dày của đường gióng
LinearScaleFactor Quy định hệ số tỷ lệ toàn cục cho các số đo kích thước dạng đường PrimaryUnitsPrecision Quy định số chữ số thập phân hiển thị trong đơn vị chính của kích thước TextColor Quy định màu của chữ kích thước
TextHeight Quy định độ cao của chữ kích thước
TextRotation Quy định góc nghiêng của chữ kích thước
5.8 Thao tác với dữ liệu mở rộng – XData
Ngoài các thuộc tính có trong mỗi đối tượng, AutoCAD còn cho phép tạo thêm các thuộc tính mới để lưu trữ các thông tin do người lập trình tự định nghĩa Những thông tin này sẽ được AutoCAD lưu cùng với đối tượng trong bản vẽ
Mỗi đối tượng có thể chứa nhiều dữ liệu mở rộng khác nhau Thông thường, các dữ liệu mở rộng được bắt đầu bằng tên của ứng dụng, tiếp đến là các dữ liệu khác Để xác định các dữ liệu
Trang 8270
mở rộng, phải sử dụng hai mảng có chiều dài bằng nhau, một mảng kiểu Short xác định kiểu dữ liệu của dữ liệu mở rộng, mảng thứ hai là mảng kiểu Variant chứa các dữ liệu tương ứng
5.8.1 Gán dữ liệu mở rộng
Sử dụng phương thức SetXData để gán các dữ liệu mở rộng cho đối tượng Cú pháp của phương thức này như sau:
object.SetXData XDataType, Xdata
Tham số Giải thích
Object Là đối tượng sẽ được gán dữ liệu mở rộng
XDataType Mảng kiểu Short, xác định kiểu dữ liệu của dữ liệu mở rộng
Xdata Mảng kiểu Variant, xác định giá trị của dữ liệu mở rộng
Khi gán giá trị cho mảng XDataType và Xdata, cần phải lưu ý:
Ø Cả hai mảng đều là mảng một chiều và phải có kích thước bằng nhau;
Ø Giá trị phần tử của mảng Xdata phải có kiểu dữ liệu tương ứng với kiểu dữ liệu được xác định trong mảng XDataType
Bảng dưới đây là danh sách các giá trị thường dùng trong mảng XDataType và ý nghĩa tương ứng:
Giá trị Ý nghĩa
1001 Chuỗi chứa tên của ứng dụng Tên của ứng dụng là do người lập trình tự thiết lập
1000 Giá trị kiểu String
1003 Tên của Layer
1010 Toạ độ 3D của một điểm
1040 Giá trị của Double
1071 Giá trị kiểu Interger
Ví dụ sau sẽ tạo một đường thẳng trong không gian mô hình, sau đó tiến hành gán các dữ liệu
mở rộng cho đường thẳng đó
Sub VD_SetXdata()
' Tạo đường thẳng
Dim lineObj As AcadLine
Dim startPt(0 To 2) As Double, endPt(0 To 2) As Double
startPt(0) = 1#: startPt(1) = 1#: startPt(2) = 0#
endPt(0) = 5#: endPt(1) = 5#: endPt(2) = 0#
Set lineObj = ThisDrawing.ModelSpace.AddLine(startPt, endPt)
ZoomAll
' Khởi tạo các giá trị cho dữ liệu mở rộng
' Chú ý là dữ liệu đầu tiên phải là tên của ứng dụng
' và mã tương ứng là 1001
Dim DataType(0 To 5) As Integer ‘Mảng chứa kiểu dữ liệu
Dim Data(0 To 5) As Variant ‘Mảng chứa dữ liệu
Dim reals3(0 To 2) As Double
DataType(0) = 1001: Data(0) = "Test_Application"
DataType(1) = 1000: Data(1) = "This is a test for xdata"
Trang 9271
DataType(2) = 1003: Data(2) = "0" ' Tên lớp
DataType(3) = 1040: Data(3) = 1.23479137438413E+40 ' Kiểu Double DataType(4) = 1071: Data(4) = 32767 ' Kiểu Integer reals3(0) = -2.95: reals3(1) = 100: reals3(2) = -20
DataType(5) = 1010: Data(5) = reals3 ' Toạ độ điểm
' Gán dữ liệu mở rộng vào đường thẳng
lineObj.SetXData DataType, Data
End Sub
5.8.2 Đọc dữ liệu mở rộng
Sử dụng phương thức GetXData để đọc dữ liệu mở rộng có trong một đối tượng Cú pháp của phương thức này như sau:
object.GetXData AppName, XDataType, XdataValue
Tham số Giải thích
Object Là đối tượng có chứa dữ liệu mở rộng
AppName Là chuỗi chứa tên của ứng dụng (như đã được gán khi sử dụng phương thức
SetXData) Nếu tham số AppName là một chuỗi rỗng, phương thức này sẽ trả về tất cả các dữ liệu mở rộng có trong đối tượng Nếu có truyền giá trị vào tham số AppName, phương thức này chỉ trả về dữ liệu mở rộng được tạo bởi ứng dụng có tên như đã xác định trong tham số AppName
XDataType Mảng kiểu Short, xác định kiểu dữ liệu của dữ liệu mở rộng được trả về
Xdata Mảng kiểu Variant, xác định giá trị của dữ liệu mở rộng được trả về
Ví dụ sau cho phép người dùng chọn một đối tượng hình học trên bản vẽ, sau đó sẽ hiển thị tất
cả các dữ liệu mở rộng của đối tượng được chọn (nếu có)
Sub VD_GetXData()
Dim sset As AcadSelectionSet
On Error Resume Next
Set sset = ThisDrawing.SelectionSets("MySSet")
sset.Delete
Set sset = ThisDrawing.SelectionSets.Add("MySSet")
ThisDrawing.Utility.Prompt vbCrLf & "Chon doi tuong can xem Xdata: " sset.SelectOnScreen
Dim ent As AcadEntity
Dim XDataType As Variant
Dim XData As Variant
Dim i As Integer
For Each ent In sset
ent.GetXData "", XDataType, XData
If Not IsEmpty(XDataType) Then
ThisDrawing.Utility.Prompt (vbCrLf & ent.ObjectName)
For i = LBound(XDataType) To UBound(XDataType)
ThisDrawing.Utility.Prompt vbCrLf & XDataType(i)
ThisDrawing.Utility.Prompt " : " & XData(i)
Next i
Else
Trang 10272
ThisDrawing.Utility.Prompt vbCrLf & "Doi tuong khong chua XData" End If
Next ent
End Sub
6 Giao diện người dùng
Quá trình nhập dữ liệu và tương tác với người dùng được hỗ trợ theo nhiều cách khác nhau trong AutoCAD:
Ø Thông qua việc nhập liệu tại dòng lệnh: người dùng có thể nhập vào một chuỗi, một số, hoặc thực hiện một chọn lựa nào đó Các thao tác nhập liệu tại dòng lệnh tham khảo
thêm mục “Nhập dữ liệu người dùng từ dòng lệnh của AutoCAD” trang 208
Ø Thông qua việc tương tác trực tiếp trên bản vẽ: người dùng thường sẽ thực hiện lựa chọn đối tượng, xác định toạ độ điểm,… Các thao tác tương tác trực tiếp trên bản vẽ tham khảo
thêm mục “Làm việc với đối tượng SelectionSet” trang 228 hoặc mục “Nhập dữ liệu người dùng từ dòng lệnh của AutoCAD” trang 208
Ø Thông qua hộp thoại tuỳ biến – Userform: quá trình nhập dữ liệu được thực hiện hầu hết trên Userform, các chức năng của chương trình sẽ được trình bày trên UserForm thông qua các nút bấm,… Các thông tin về cách thức lập trình trên UserForm, tham khảo thêm
mục “Làm việc với UserForm và các thành phần điều khiển” trang 61 và mục “Hộp thoại tuỳ biến – UserForm” trang 170
Ø Thông qua hệ thống thanh trình đơn và thanh công cụ: người dùng có thể thực hiện một chức năng nào đó của chương trình thông qua việc chọn một mục trình đơn tương ứng hoặc chọn một nút lệnh trên thanh công cụ Phần này sẽ tập trung giới thiệu cách thức tạo trình đơn trong AutoCAD
6.1 Thao tác với thanh trình đơn
6.1.1 Cấu trúc của hệ thống thanh trình đơn
Hệ thống trình đơn trong AutoCAD được tổ chức theo cấu trúc phân cấp Mô hình đối tượng của hệ thống thanh trình đơn trong AutoCAD như sau:
Hình V-21: Mô hình đối tượng của hệ thống thanh trình đơn trong AutoCAD
Ø MenuBar là thanh trình đơn nằm ngay phía dưới thanh tiêu đề của cửa sổ chương trình AutoCAD Trong MenuBar có chứa các PopupMenu, là một trình đơn xổ xuống khi người dùng kích chuột vào, chẳng hạn như File, Edit, View,…