Sử dụng VDraw Component

Một phần của tài liệu Tài liệu hướng dẫn thực tập tốt nghiệp công nghệ thông tin (Trang 106 - 115)

Chủ đề này nhằm mục đích hướng dẫn sinh viên sử dụng Component rất phổ biến hỗ trợ thể hiện, quản lý, tương tác với các bản vẽ dưới các định dạng quen thuộc của AutoCAD. Chú ý rằng VDraw được cung cấp dưới dạng ActiveX component nên bạn có thể sử dụng trong bất cứ mơi trường lập trình nào trên Windows (Visual C++ hay Visual Basic). Trong các ví d ụ

cung cấp theo tài liệu này, chúng tơi chọn Visual Basic làm ví dụ.

III.3.1. Cài đăt VDraw

VDraw là một ActiveX, do đó các bước cài đặt VDraw tuân theo các b ước đã hướng dẫn

trong phần ActiveX. Lưu ý rằng các phiên b ản VDraw có trên th ị trường đĩa lậu thường

khơng phải là phiên bản tự cài đặt, do đó bạn phải sử dụng công cụ regsvr32 để đăng ký với cú pháp sau (chú ý đường dẫn đền file vdraw.ocx có thể khác trên máy tính của bạn)

regsvr32.exe c:\vdraw\vdraw.ocx

Sau khi cài đặt VDraw bạn có thể sử dụng trong VB nh ư những ActiveX đã hướng dẫn

trong phần trước (Đánh dấu vào mục Vector Draw... trong hộp thoại Components)

III.3.2. Kiến trúc VDraw

Kiến trúc VDraw mô ph ỏng kiến trúc của AutoCAD, một bản vẽ được quản lý b ởi đối

tượng document (VDRAWDocument). Các đối tượng quản lý b ởi document được chia

thành 2 loại

- Đối tượng nhìn thấy (gọi là thực thể - entity hoặc hình vẽ - figure): Các đối tượng

này k ế th ừa t ừ l ớp vdFigure, bao g ồm: vdLine, vdPolyline, vdArc, vdCircle,

vdEllipse, vdRectangle, vdImage, vdPoint, vd3DFace, vdPolyface, vdViewport, vdText, vdDimension, vdInsert, vdPolyhatch

- Đối tượng trừu tượng (khơng nhìn th ấy được), sử dụng để tổ chức và quản lý các

entity khác, bao gồm: vdLayer, vdTextstyle, vdDimstyle, vdBlock, vdLayout... Ngoài quản lý các thực thể, đối tượng document còn cung cấp các đối tượng hỗ trợ

- vdLayers (Layers): quản lý các layer

- vdBlocks (Blocks): quản lý các block

- vdDimStyles (DimStyles): quản lý các kiểu dim

- vdSelections (Selections): quản lý các nhóm chọn

Để người dùng tương tác (zoom, vẽ các đối tượng, tổ chức đối tượng, layer...), VDraw cung

cấp đối tượng vdCommand với các phương thức sau:

- Cmd???: CmdLine, CmdCircle, CmdSelect, CmdCopy, CmdDim, CmdTrim,

CmdText, CmdStretch... cho phép người dùng vẽ các đối tượng với input từ chương

trình hoặc bàn phím và chuột

- Zoom: Thay đổi khung nhìn với tham số từ chương trình hoặc do người dùng vào từ

bàn phím, chuột - ....

III.3.3. Vẽ đối tượng

Các đối tượng được vẽ trên VDraw thực chất là thêm các thực thể (entity) trong danh sách (adsbygoogle = window.adsbygoogle || []).push({});

entities của đối tượng document. Nếu tham số đầu vào của hàm là điểm, bạn có thể đưa vào dưới dạng

- Mảng 3 phần tử tương ứng với 3 tọa độ (x, y, z)

- Mảng 2 phần tử tương ứng với 2 tọa độ (x, y), phần tử z mặc định = 0

- Trong Visual Basic, cách đơn giản nhất để đưa input d ạng điểm là sử dụng hàm

Array (xem ví dụ)

Ví dụ về tạo đối tượng với VDraw: - Tạo mới Project

- Ctrl+T (mở hộp thoại Components), đánh dấu vào VDraw trong danh sách các

Component

- Đưa VDraw component t ừ ToolBox và form, đưa nút lệnh có tên Command1 vào

form

- Click đúp vào nút lệnh để lập trình cho sự kiện Click của nút lệnh Private Sub Command1_Click()

' VDENTITYLIST là class của thư viện VDraw, là danh sách các hình vẽ

' Trong trường hợp này, biến Ents là danh sách các hình vẽ của document Dim Ents As VDENTITYLIST

' VDCIRCLE là class của hình vẽ đường trịn trong thư viện VDraw Dim C As VDCIRCLE, C2 As VDCIRCLE

' Khởi tạo Ents là danh sách các hình vẽ của document hiện tại Set Ents = VDRAW41.ActiveDocument.Entities

' Thêm vào document một đoạn thẳng từ điểm (0,0) đến điểm (5,5) Ents.AddLine Array(0, 0), Array(5, 5)

' Thêm vào document một đường tròn tâm (0,0), bán kính 10 ' Lưu nó trong biến [C]

' Thêm vào document một đường polyline qua 4 điểm Ents.AddPolyLine Array(Array(0, 0), Array(10, 5), _ Array(2, 10), Array(-4, 3))

' Thêm vào document một đường kích thước xiên từ điểm (0,0) đến điểm (5,5) ' Đặt text của đường kích thước đó tại điểm (2,2)

Ents.AddDimAligned Array(0, 0), Array(5, 5), Array(2, 2)

' Tạo thêm 1 bản sao của đường trịn [C], lưu nó trong biến [C2] Set C2 = C.Copy

' Thêm đường tròn này vào document Ents.AddItem C2

' Sửa lại bán kính của nó là 5 đơn vị

C2.radius = 5

' Zoom "E"

VDRAW41.CommandAction.Zoom "E", "USER", "USER" End Sub

III.3.4. Thay đổi vùng nhìn, điểm nhìn

Để thay đổi vùng nhìn, giống như trong AutoCAD, với VDraw ta cũng sử dụng lệnh Zoom

với cú pháp sau: (adsbygoogle = window.adsbygoogle || []).push({});

object.Zoom ( Type, FirstCorner, OtherCorner )

- Type: Kiểu zoom (giống với tham số zoom trong lệnh zoom của AutoCAD)

o "E" Zooms extents

o "P" Zooms previous

o "W" Zooms window (hai góc vùng nhìn: FirstCorner, OtherCorner)

o "A" Zoom all.

o "S" Zoom theo tỷ lệ tương đối với vùng nhìn hiện tại, ví dụ FirstCorner = 0.5

thì kích thước vùng nhìn sẽ lớn gấp đơi (tức là so với màn hình các vật thể sẽ

bé đi ½)

- FirstCorner, OtherCorner: Hai góc xác định vùng nhìn

o Dạng điểm (mảng các tọa độ)

o "USER": người dùng vào tham số

o Khi khơng cần thiết, có thể nhập vào giá trị bất kỳ (ví dụ Empty) - Các ví dụ:

object.Zoom ("E", "USER", "USER")

object.Zoom ("W", Array(0,0), Array(100,100)) object.Zoom ("P", "USER", "USER")

object.Zoom ("W", "USER", "USER") object.Zoom ("W", Array(0,0), "USER")

Cũng giống với AutoCAD, VDraw được khởi tạo với chế độ quan sát 2D nhưng thực chất

đây là hệ thống 3D, các bạn có thể vẽ các đối tượng 3D và quan sát chúng ở nhiều góc độ

khác nhau. Để thay đổi góc nhìn quan sát các hình vẽ, ta sử dụng lệnh LookAt (xem ví dụ) Private Sub Command1_Click()

Dim Ents As VDENTITYLIST

Set Ents = VDRAW41.ActiveDocument.Entities

' Vẽ đường trịn tâm (0,0) bán kính 10 Ents.AddCircle Array(0, 0), 10

' Vẽ hình chữ nhật tâm tại (0,0), chiều ngang 10, chiều cao 10 Ents.AddRect Array(0, 0), 10, 10

' Zoom "E"

VDRAW41.CommandAction.Zoom "E", Empty, Empty End Sub

Private Sub Command2_Click()

' Zoom Window (vị trí của cửa sổ xác định bởi người dùng) VDRAW41.CommandAction.Zoom

End Sub

Private Sub Command3_Click()

' Đặt mắt tại điểm (3, 4, 5), nhìn tới điểm (0, 0, 0) VDRAW41.CommandAction.LookAt Array(3, 4, 5), Array(0, 0, 0) ' Zoom "E" (adsbygoogle = window.adsbygoogle || []).push({});

VDRAW41.CommandAction.Zoom "E", Empty, Empty ' Zoom nhỏ hình vẽ lại còn 1/2

VDRAW41.CommandAction.Zoom "S", 0.5, Empty End Sub

III.3.5. Lựa chọn đối tượng

Để thao tác với nhiều đối tượng 1 lần, sử dụng đối tượng vdSelection, đối tượng này được

sử dụng với các lệnh Cmd??? (CmdCopy, CmdRotate, CmdErase...). vdSelection được tạo

bằng phương thức Add của đối tượng SelectionSetList (xem ví dụ). Các phương thức của vdSelection

- RemoveAll: Loại bỏ tất cả các thực thể khỏi selection, selection vẫn tồn tại nhưng

không chứa thực thể nào

- RemoveItem: Loại bỏ một thực thể khỏi selection

- ClearAll: Xóa tất cả các đối tượng trong selection, selection vẫn tồn tại

- Free: Xóa selection (giải phóng các vùng nhớ sử dụng bởi selection)

Private Sub Command1_Click() Dim Ents As VDENTITYLIST Dim Doc As VDRAWDOCUMENT

Dim Sel As VDSELECTIONSET

Dim rect As VDRECT, cir As VDCIRCLE

Set Doc = VDRAW41.ActiveDocument Set Ents = Doc.Entities

Set cir = Ents.AddCircle(Array(0, 0), 10) ' Vẽ đường tròn Set rect = Ents.AddRect(Array(0, 0), 10, 10) ' Vẽ hình chữ nhật

Set Sel = Doc.SelectionSetList.Add("quang") ' Tạo selection

Sel.AddItem rect ' Thêm rect vào selection VDRAW41.CommandAction.CmdCopy Sel, Array(0, 0), Array(0, 0)

' Copy selection VDRAW41.CommandAction.CmdRotate Sel, Array(0, 0), 3.14 / 4

' Quay hình chữ nhật, 45 do VDRAW41.CommandAction.Zoom "E", Empty, Empty

End Sub

III.3.6. Người dùng chọn đối tượng

Trong chương trình, ngồi việc vẽ các đối tượng, VDraw còn cho phép ng ười dùng tương

tác với các đối tượng đó. Ví dụ như khi bạn xây dựng một chương trình vẽ sơ đồ kết cấu với VDraw. Sau đó, người dùng chọn các thanh ho ặc nút trong s ơ đồ để nhập các giá tr ị tải

trọng. Để thực hiện được chức năng này, ta dùng ph ương thức Select của đối tượng con

CommandAction trong VDraw với cú pháp sau: VDraw41.CommandAction.CmdSelect( SelectMode ) Trong đó:

- VDraw41: Tên đối tượng VDraw, tên được sử dụng trong ví dụ là tên mặc định của đối tượng đối với phiên bản 4.1

- CommandAction: đối tượng thuộc lớp VDCOMMAND dùng để tương tác v ới

VDraw thông qua các l ệnh tương tự các l ệnh thường sử dụng trong AutoCAD

(Zoom, Select, Copy, Move, Erase, Line, Rectangle, Circle...) (adsbygoogle = window.adsbygoogle || []).push({});

- SelectMode: Tham số xác định cách thức để lựa chọn đối tượng, có thể có các giá trị

như sau:

o "ALL": Chọn tất cả các đối tượng trong Document

o "LAST": Đối tượng được tạo ra sau cùng

o "PREV": Chọn các đối tượng được chọn ở lệnh gần nhất

o "USER": Cho phép ng ười dùng chọn đối tượng bằng chuột (chọn bằng cách

pick đối tượng hoặc bằng cửa sổ - giống AutoCAD). Để xác nh ận các đối

o Một SelectionSet

o Một đối tượng (ví dụ: đoạn thẳng, đường trịn....)

Trong trường hợp để người dùng chọn đối tượng, ta sử dụng tham số SelectMode với giá trị "USER". Tuy nhiên, giải pháp này gặp phải một số vấn đề, xét ví dụ sau:

Tạo mới 1 Project, trên form m ặc định, thêm vào 1 VDraw control (tên là VDRAW41) và

một nút lệnh (tên là Command1), sau đó nhập vào đoạn chương trình sau: Private Sub Form_Load()

VDRAW41.ActiveDocument.Entities.AddLine Array(0, 0), Array(5, 5) VDRAW41.ActiveDocument.Entities.AddCircle Array(0, 0), 2

End Sub

Private Sub Command1_Click()

VDRAW41.CommandAction.CmdSelect "USER" ' Chuyển sang chế độ người dùng chọn MsgBox "Chon xong roi" ' Hộp thoại này sẽ hiện ra khi... ' ...người dùng chọn xong đối tượng

End Sub

Khi chạy chương trình, chúng ta thấy VDraw control có một đoạn thẳng và một đường trịn

(do Sub Form_Load vẽ ra).

Click chuột vào Command1 r ồi di chuột đến đoạn thẳng và click ti ếp, ta thấy đoạn thẳng được chọn nhưng không thấy hộp thoại hiện ra. Nếu tiếp tục click vào đường trịn thì c ả đường tròn cũng được chọn nhưng hộp thoại cũng không hiện ra.

Click phải chuột trong VDraw control thì bạn mới thấy hộp thoại xuất hiện, có nghĩa là lệnh tiếp sau của lệnh CmdSelect chỉ được gọi khi người dùng click phải chuột. Điều này dễ gây hiểu lầm cho người sử dụng, do đó chúng tơi đưa ra một giải pháp khác, xét ví dụ sau: Tạo mới 1 Project, trên form mặc định, thêm vào 1 VDraw control (tên là VDRAW41) và 2

nút lệnh (tên là Command1 và Command2), sau đó nhập vào đoạn chương trình sau: Private Sub Form_Load()

VDRAW41.ActiveDocument.Entities.AddLine Array(0, 0), Array(5, 5) VDRAW41.ActiveDocument.Entities.AddCircle Array(0, 0), 2

VDRAW41.ActiveDocument.Entities.AddRect Array(2, 2), 2, 2 End Sub

Private Sub Command1_Click()

VDRAW41.CommandAction.CmdSelect "USER" End Sub

Private Sub Command2_Click() Dim ob As VDFIGURE

For Each ob In VDRAW41.ActiveDocument.Entities If ob.HighLight Then

MsgBox ob.Type End If

VDRAW41.CommandAction.Cancel End Sub (adsbygoogle = window.adsbygoogle || []).push({});

Đoạn chương trình trên cũng gần giống ở ví dụ trước:

- Sub Form_Load: Vẽ một đoạn thẳng, một đường tròn và một hình chữ nhật

- Sub Command1_Click: Chuyển sang ch ế độ người dùng ch ọn đối tượng (nhưng

không đợi người dùng click phải chuột)

- Sub Command2_Click: Sử dụng cấu trúc For Each...Next để duyệt qua tất cả các đối tượng của VDraw, tìm xem đối tượng nào đang bđánh dấu (thuộc tính

HighLight) thì hiển thị kiểu (Type) của nó ra bằng MsgBox. Sau khi duyệt xong thì

bỏ chế độ chọn bằng phương thức Cancel của CommandAction.

Bây giờ bạn có thể chạy thử nghiêm chương trình. Click nút Command1 để chọn đối tượng. Sau khi chọn xong đối tượng cần thiết, bạn Click nút Command2 để xem đối tượng nào đang được chọn.

Tóm lại, việc lựa chọn đối tượng theo phương pháp thứ nhất hoặc thứ 2 tùy thuộc vào yêu

cầu của ứng dụng. Yêu cầu đặt ra là ph ải lựa chọn được phương pháp thích h ợp sao cho

người dùng khơng cảm thấy khó chịu khi sử dụng.

III.3.7. Đọc và lưu bản vẽ

VDraw cho phép đọc và lưu bản vẽ bằng định dạng DWG (phiên b ản hiện tại 4.0 hỗ trợ

DWG 2000). Để đọc và lưu bản vẽ ta sử dụng hai phương thức Open và Save của VDraw

control.

retval = object.Open (FileName, WindowHandleToPlaceCaption, DwgFileChecking)

- FileName: Tên file, nếu là xâu rỗng thì hiện hộp thoại mở file

- WindowHandleToPlaceCaption: Handle của cửa sổ cần thay tiêu đề bằng tên file được mở

- DwgFileChecking: Cách xử lý trong trường hợp file mở bị lỗi (0: Có gắng mở, 1: Bỏ

qua)

retval = object.Save

- Mô tả: Lưu file vào ổ đĩa.

- retval: TRUE nếu thành công, FALSE nếu không

retval = object.SaveAs(FullFileName, CADVersion)

- FullFilename: Đường dẫn (đầy đủ) đến file

- CADVersion: số hiệu phiên bản

- retval: TRUE nếu thành công, FALSE nếu khơng

Giá trị Tên hằng Giải thích

1 VdCadVer26 DWG/DXF Release 2.6 2 VdCadVer9 DWG/DXF Release 9 3 VdCadVer10 DWG/DXF Release 10 4 VdCadVer11 DWG/DXF Release 11 5 VdCadVer13 DWG/DXF Release 13 6 VdCadVer14 DWG/DXF Release 14 7 VdCadVer2000 DWG/DXF Release 2000/2002 100

(default) VdCaddefault DWG/DXF Release 2000/2002 (adsbygoogle = window.adsbygoogle || []).push({});

III.3.8. Một số mẹo vặt với VDraw

- Khi phải tạo ra các bản vẽ với VDraw, bạn có nên dùng các lệnh của Vdraw để tạo từ

đầu các layer, đặt màu sắc cho chúng, t ạo các textstyle, dimstyle...? Câu tr ả lời là

không nên làm như vậy! Để thuận tiện hơn, bạn chỉ cần sử dụng AutoCAD để tạo sẵn những bản vẽ đã có các tính ch ất trên (cấu trúc layer, màu s ắc, kiểu chữ, kiểu

dim). Đồng thời bản vẽ của bạn cũng có thể có sẵn một số block sẽ sử dụng (các ký

hiệu hoặc khung tên...). Sau đó, chỉ cần dùng lệnh Open đã trình bày ở trên để mở

bản vẽ, bạn đã có sẵn một mơi trường hoàn chỉnh để làm việc. Chú ý rằng, để VDraw có thể sử dụng bản vẽ sẵn của bạn, phải lưu bản vẽ về định dạng AutoCAD 2000.

-

Một phần của tài liệu Tài liệu hướng dẫn thực tập tốt nghiệp công nghệ thông tin (Trang 106 - 115)