Phát triển AutoCAD bằng ActiveX & VBA - Chương 8: Làm việc trong không gian ba chiều

7 13 0
Phát triển AutoCAD bằng ActiveX & VBA - Chương 8: Làm việc trong không gian ba chiều

Đang tải... (xem toàn văn)

Thông tin tài liệu

[r]

(1)

L

LÀÀMM VVIICC TTRROONNGG KKHHÔÔNNGG G

GIIAANN BBAA CCHHIIUU

8

Trong chương này

ƒ Xác định toạđộ ba chiều ƒ Định nghĩa hệ toạđộ

người dùng

ƒ Chuyển trục toạđộ ƒ Tạo đối tượng ba chiều ƒ Hiệu chỉnh không

gian ba chiều

ƒ Hiệu chỉnh vật thể khối Vật thể chiều (3D) thường biểu diễn

bản vẽ gồm hình chiếu mặt phẳng (2D) Mặc dù phương pháp phác hoạ sử

dụng rộng rãi ngành kỹ thuật kiến trúc, bị hạn chếở chỗ: vẽ 2D phải mô tả vật thể không gian phải thể cách trực quan Hơn nữa, hình chiếu tạo

độc lập nên khả lỗi gây nhầm lẫn lớn Vì vậy, ta tạo hình 3D thật thay thể hình 2D Có thể sử dụng cơng cụ

(2)

1 Xác định ta độ ba chiu

Việc xác định toạđộ 3D giống hệ toạ độ 2D, thêm thành phần theo hướng thứ 3, trục Z Khi vẽ 3D, cần xác định giá trị toạđộ theo trục X,Y Z hệ toạ độ chung (WCS) hệ toạ độ người dùng (UCS) Hình vẽ mô tả trục X, Y, Z hệ trục WCS:

Gốc tọa độ WCS Biểu tượng UCS

Gốc tọa độ UCS

1.1 Quy tc bàn tay phi

Quy tắc bàn tay phải xác định chiều dương trục Z biết hướng trục X Y, đồng thời xác định chiều quay dương xung quanh trục không gian 3D

Để xác định chiều dương trục X, Y, Z, đặt bàn tay phải thẳng, ngón tay hướng thẳng lên cho mu bàn tay hướng phía hình, ngón hướng sang ngang, ngón trỏ hướng thẳng đứng lên ngón gập theo hướng vng góc với lịng bàn tay, hướng ngón trùng với hướng dương trục X, hướng ngón trỏ trùng với hướng dương trục Y, hướng ngón hướng dương trục Z Để xác định chiều quay dương quanh trục toạđộđặt ngón trùng theo hướng dương hệ trục toạđộ, gập ngón tay cịn lại hướng vào lịng bàn tay hướng gập ngón tay trùng với chiều quay dương quanh trục toạđộđó

1.2 Nhp ta độ X, Y , Z

(3)

Đoạn chương trình đây, trước hết tạo đường đa tuyến nét mảnh 2D với đỉnh, sau tạo đường đa tuyến 3D với đỉnh Chú ý chiều dài mảng chứa đỉnh tăng lên để chứa thêm toạđộ Z đường đa tuyến 3D Chương trình kết thúc việc xuất toạđộ đỉnh đường đa tuyến 2D 3D thông báo

Định nghĩa truy vấn toạđộ đường đa tuyến 2D 3D

Ví dụ tạo đường đa tuyến, có đường 3D Đường

đa tuyến 2D đường thứ hai 3D Ví dụ truy vấn toạ độ chúng hiển thị thông báo

Sub Ch8_Polyline_2D_3D()

Dim pline2DObj As AcadLWPolyline Dim pline3DObj As AcadPolyline Dim points2D(0 To 5) As Double Dim points3D(0 To 8) As Double ’ Định nghĩa đỉnh polyline 2D points2D(0) = 1: points2D(1) = points2D(2) = 1: points2D(3) = points2D(4) = 2: points2D(5) = ’ Định nghĩa đỉnh polyline 3D

points3D(0) = 1: points3D(1) = 1: points3D(2) = points3D(3) = 2: points3D(4) = 1: points3D(5) = points3D(6) = 2: points3D(7) = 2: points3D(8) = ’ Tạo polyline 2D

Set pline2DObj =

ThisDrawing.ModelSpace.AddLightWeightPolyline(points2D) pline2DObj.Color = acRed

pline2DObj.Update ’ Tạo polyline 3D

Set pline3DObj = ThisDrawing.ModelSpace.AddPolyline(points3D) pline3DObj.Color = acBlue

pline3DObj.Update

’ Lấy toạ độ đỉnh polyline Dim get2Dpts As Variant

Dim get3Dpts As Variant

get2Dpts = pline2DObj.Coordinates get3Dpts = pline3DObj.Coordinates ’ Hiển thị toạ độ

MsgBox ("2D polyline (red): " & vbCrLf & _

get2Dpts(0) & ", " & get2Dpts(1) & vbCrLf & _ get2Dpts(2) & ", " & get2Dpts(3) & vbCrLf & _ get2Dpts(4) & ", " & get2Dpts(5))

MsgBox ("3D polyline (blue): " & vbCrLf & _

get3Dpts(0) & ", " & get3Dpts(1) & ", " & _ get3Dpts(2) & vbCrLf & _

get3Dpts(3) & ", " & get3Dpts(4) & ", " & _ get3Dpts(5) & vbCrLf & _

get3Dpts(6) & ", " & get3Dpts(7) & ", " & _ get3Dpts(8))

(4)

2 Định nghĩa h ta độ người dùng

Định nghĩa đối tượng hệ toạđộ người dùng (UCS) bao gồm thay đổi vị trí gốc toạđộ (0,0,0) thay đổi hướng mặt phẳng XY trục Z Hệ toạđộ người dùng có thểđặt vị trí theo hướng khơng gian 3D, định nghĩa, lưu lại sử dụng với số lượng tuỳ vào nhu cầu sử dụng người dùng Nếu có nhiều cổng nhìn kích hoạt chúng dùng chung hệ trục toạđộ

Nếu vẽ nhiều khơng gian 3D ta nên định nghĩa sẵn số hệ trục toạđộ, hệ trục tọa độ có gốc hướng trục toạđộ khác nhau, tùy theo yêu cầu cụ

thể

Để gốc toạ độ hướng hệ trục toạđộ người dùng, ta cần hiển thị biểu tượng UCS gốc hệ toạ độ cách sử dụng thuộc tính UCSIconAtOrigin (xem thuộc tính UCSIconOn) để khơng hiển thị biểu tượng gốc tọa độ, hiển thị tọa độ WCS định nghĩa biến hệ thống

UCSORG

Các hệ trục toạđộ người dùng hữu ích khơng gian 3D Ta dễ dàng xếp hệ toạđộ thẳng hàng với khối hình học có phải tìm độ dịch chuyển xác điểm không gian 3D

Hệ trục thứ Hệ trục thứ Mơ hình với hệ trục toạđộ

Có thể định nghĩa hệ trục toạ độ không gian in không gian mô hình, nhiên, hệ trục người dùng khơng gian in chỉđược thao tác thủ công AutoCAD lưu giữ 10 hệ trục toạ độ sau cùng, mà tạo khơng gian mơ hình khơng gian in

Hệ trục toạđộ tạo phương thức Add Phương thức yêu cầu giá trịđầu vào, bao gồm: toạđộ điểm gốc ; toạđộ trục X, trục Y ; tên hệ

trục toạđộ

Tất toạ độ đối tượng ActiveX Automation AutoCAD nhập vào từ hệ toạđộ chung (WCS) Phương thức GetUCSMatrix dùng để tính ma trận biến đổi hệ trục UCS Dùng ma trận để tìm toạ độ tương

(5)

Sử dụng thuộc tính ActiveUCS đối tượng Document để kích hoạt hệ

toạđộ UCS Nếu hệ trục UCS sử dụng bị thay đổi đối tượng UCS cần

được khởi động lại hệ toạđộ UCS hành để thay đổi xuất Hệ trục UCS hành thiết lập lại cách sử dụng lần thuộc tính ActiveUCS với đối tượng UCS cập nhật

Ví dụ tạo hệ toạđộ UCS mới, kích hoạt chuyển toạđộ điểm sang hệ toạđộ UCS

Thủ tục tạo hệ trục toạđộ kích hoạt Sau yêu cầu người dùng chọn điểm vẽ trả toạđộ điểm hệ trục UCS hệ trục WCS

Sub Ch8_NewUCS()

’ Định nghĩa biến cần dùng Dim ucsObj As AcadUCS

Dim origin(0 To 2) As Double Dim xAxisPnt(0 To 2) As Double Dim yAxisPnt(0 To 2) As Double ’ Gán gốc toạ độ cho hệ trục UCS

origin(0) = 4: origin(1) = 5: origin(2) =

xAxisPnt(0) = 5: xAxisPnt(1) = 5: xAxisPnt(2) = yAxisPnt(0) = 4: yAxisPnt(1) = 6: yAxisPnt(2) =

’ Thêm hệ trục UCS vào tập đối tượng UserCoordinatesSystems Set ucsObj = ThisDrawing.UserCoordinateSystems _

Add(origin, xAxisPnt, yAxisPnt, "New_UCS") ’ Thể biểu tượng UCS

ThisDrawing.ActiveViewport.UCSIconAtOrigin = True ThisDrawing.ActiveViewport.UCSIconOn = True

’ Chuyển hệ trục UCS thành hệ trục thời ThisDrawing.ActiveUCS = ucsObj

MsgBox "The current UCS is : " & ThisDrawing.ActiveUCS.Name _ & vbCrLf & " Pick a point in the drawing."

’ Tìm toạ độ hệ trục WCS UCS điểm Dim WCSPnt As Variant

Dim UCSPnt As Variant

WCSPnt = ThisDrawing.Utility.GetPoint(, "Enter a point: ") UCSPnt = ThisDrawing.Utility.TranslateCoordinates _

(WCSPnt, acWorld, acUCS, False)

MsgBox "The WCS coordinates are: " & WCSPnt(0) & ", " _ & WCSPnt(1) & ", " & WCSPnt(2) & vbCrLf & _

"The UCS coordinates are: " & UCSPnt(0) & ", " _ & UCSPnt(1) & ", " & UCSPnt(2)

End Sub

3 Chuyn trc ta độ

Phương thức TranslateCoordinates chuyển điểm véctơ từ hệ toạđộ

(6)

bằng True đối sốOriginalPoint xem véc tơ chuyển vị, ngược lại coi điểm Hai đối số nhằm xác định xem

OriginalPoint thuộc hệ trục toạ độ chuyển sang hệ toạ độ

nào Các hệ trục toạđộ AutoCAD xác định từ đối số From To :

ƒ WCS

World Coordinate System (WCS) - hệ trục toạđộ tham chiếu Tất hệ

trục toạđộ khác định nghĩa thơng qua hệ trục hệ trục khơng thay đổi Tất giá trịđược tính thơng qua WCS ổn định dù có thay đổi hệ trục toạ độ khác Tất điểm sử dụng phương thức thuộc tính ActiveX biểu diễn hệ trục WCS ngoại trừ có trường hợp khác rõ

ƒ UCS

User Coordinate System (UCS) - hệ trục toạđộ làm việc Người dùng tạo hệ trục UCS để tạo thuận lợi cho thao tác với vẽ Tất điểm

được chuyển vào dòng lệnh AutoCAD, bao gồm điểm trả

từ hàm AutoLISP hàm mở rộng, điểm hệ trục UCS (trừ người dùng thêm vào phía trước dấu * dấu nhắc dòng lệnh) Nếu muốn ứng dụng gửi toạ độ điểm theo hệ trục WCS, OCS, DCS đến dòng lệnh AutoCAD, trước hểt phải chuyển tọa độ hệ trục toạđộ UCS cách gọi phương thức TranslateCoordinates

ƒ OCS

Object Coordinate System (OCS) - giá trị toạ độ xác định phương thức thuộc tính cho đối tượng Polyline LightweightPolyline,

đều biểu diễn hệ toạđộ này, tương đối so với đối tượng Những

điểm thường chuyển sang hệ toạđộ WCS, hệ toạđộ UCS hệ toạ độ DCS tại, tuỳ theo mục đích sử dụng đối tượng Ngược lại, điểm hệ tọa độ WCS, UCS hay DCS phải chuyển hệ trục OCS trước ghi vào sở liệu thuộc tính Xem thêm tài liệu “ActiveX and VBA Reference” để tìm hiểu thêm phương thức thuộc tính sử dụng hệ trục toạđộ

Khi chuyển toạ độ sang hệ OCS ngược lại, cần đưa vào véc tơ pháp tuyến1 cho hệ trục OCS đối số cuối hàm TranslateCoordinates

ƒ DCS

Display Coordinate System (DCS) - hệ trục toạđộ mà đối tượng sẽđược biến đổi trước chúng hiển thị Gốc DCS điểm lưu biến hệ thống TARGET AutoCAD trục Z hệ trục hướng quan sát Nói cách khác, khung nhìn ln mặt phẳng quan sát

1 Véc tơ pháp tuyến (Normal vector): véc tơ pháp tuyến đơn vị hệ toạđộ WCS, dùng đểđịnh

(7)

hệ trục DCS Các toạ độ sử dụng để xác định xem

đối tượng sẽđược hiển thị AutoCAD

ƒ PSDCS

Paper Space DCS (PSDCS) - hệ trục toạđộ có thểđược biến đổi từ

hệ trục DCS sang hệ trục DCS khung nhìn khơng gian mơ hình hành Thực chất biến đổi 2D, toạ độ X Y nhân tỷ lệ tịnh tiến đối số Disp True, toạđộ Z nhân tỷ lệ không tịnh tiến Do đó, toạ độ Z dùng để tìm hệ số phóng đại hai hệ trục toạđộ Hệ trục PSDCS có thểđược biến đổi khung nhìn khơng gian mơ hình Nếu đối sốfrom PSDCS đối sốto DCS ngược lại

Biến đổi toạđộ từ hệ trục OCS sang hệ trục WCS

Ví dụ sau tạo đối tượng Polyline không gian mơ hình Đỉnh thứ đa tuyến sẽđược biểu diễn theo toạđộ hệ trục OCS WCS Quá trình biến đổi ngược từ OCS sang WCS cần phải nhập véc tơ pháp tuyến hệ trục OCS vào đối số cuối phương thức TranslateCoordinates

Sub Ch8_TranslateCoordinates()

’ Tạo polyline không gian mơ hình Dim plineObj As AcadPolyline

Dim points(0 To 14) As Double ’ Gán đỉnh cho polyline

points(0) = 1: points(1) = 1: points(2) = points(3) = 1: points(4) = 2: points(5) = points(6) = 2: points(7) = 2: points(8) = points(9) = 3: points(10) = 2: points(11) = points(12) = 4: points(13) = 4: points(14) =

’ Tạo đối tượng light weight Polyline khơng gian mơ hình Set plineObj = ThisDrawing.ModelSpace.AddPolyline(points) ’ Tìm toạ độ X Y đỉnh đường polyline Dim firstVertex As Variant

firstVertex = plineObj.Coordinate(0)

’ Tìm toạ độ Z đường polyline sử dụng thuộc tính Elevation

firstVertex(2) = plineObj.Elevation

’ Thay đổi véc tơ pháp cho polyline để thấy sai khác ’ hai hệ toạ độ

Dim plineNormal(0 To 2) As Double plineNormal(0) = 0#

plineNormal(1) = 1# plineNormal(2) = 2#

plineObj.Normal = plineNormal

’ Chuyển toạ độ từ hệ trục OCS sang WCS Dim coordinateWCS As Variant

coordinateWCS = ThisDrawing.Utility.TranslateCoordinates _ (firstVertex, acOCS, acWorld, False, plineNormal) ’ Biểu diễn toạ độ điểm

Ngày đăng: 10/03/2021, 13:54

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan