Cấu trúc của tài liệu: - Các ch ức năng chính c ủa 1 h ệ đồ h ọa: Li ệt kê các ch ức n ăng mà m ột hệ đồ họa điển hình phải có - Sử dụng VDraw Component: Hướng dẫn sử dụng VDraw Compone
Trang 1CHƯƠNG III Đồ họa
Tài liệu này được lập ra nhằm mục đích hướng dẫn sinh viên ngành Tin học Xây dựng trong việc xây dựng các hệ đồ họa phục vụ cho đồ án tốt nghiệp
Cấu trúc của tài liệu:
- Các ch ức năng chính c ủa 1 h ệ đồ h ọa: Li ệt kê các ch ức n ăng mà m ột hệ đồ họa
điển hình phải có
- Sử dụng VDraw Component: Hướng dẫn sử dụng VDraw Component (là một hệ đồ
họa phổ biến r ất thích h ợp cho l ập trình các ứng d ụng ph ải thể hi ện các d ữ liệu đồ họa cũng như tương tác giữa người dùng và các dữ liệu đồ họa)
Các hệ thống đồ họa được đề cập ở đây là các h ệ thống phục vụ các bài toán thi ết kế hoặc
hỗ trợ thiết kế Đây thực chất là các h ệ CAD đơn giản, một h ệ thống CAD đơn gi ản điển hình bao gồm các chức năng chính sau
- Vẽ các đối tượng cơ bản: Điểm, đoạn thẳng, text, đường tròn, mặt (face), biểu tượng Không giống như các chương trình vẽ (draft) đơn giản, các đối tượng hình học trong
hệ CAD phải được quản lý, có thể thêm, xóa, sửa
- Thay đổi vùng nhìn (zoom, pan) để quan sát toàn bộ hoặc một phần bản vẽ
- Lựa chọn các đối tượng (bằng chuột: pick hoặc window)
- Đọc và lưu các đối tượng ra bản vẽ (comment: dạng DXF)
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)
Trang 2regsvr32.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
- vdTextStyles (TextStyles): quản lý các kiểu text
Trang 3- 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 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]
Set C = Ents.AddCircle(Array(0, 0, 0), 10)
Trang 4' 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:
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")
Trang 5Cũ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"
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
Trang 6Dim 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, ngoà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 )
- 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 tượng được chọn (kết thúc lệnh chọn), người dùng click phải chuột
Trang 7o 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
Next
Trang 8VDRAW41.CommandAction.Cancel
End Sub
Đ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
0 VdCadVer25 DWG/DXF Release 2.5
Trang 91 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
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
Trang 10-