Mô hình 3D bằng VBA-AUTOCAD
Trang 1Mục lục
Lời mở đầu……… 2
PHẦN 1:XÂY DỰNG MÔ HÌNH 3D BẰNG VBA-AUTOCAD: Chương 1:TỔNG QUAN 1.Các nghiên cứu về xây dựng mô hình 3D qua VBA-AutoCad……… …………3
2 Ưu và nhược điểm của các nghiên cứu này……….3
Chương 2: CƠ SỞ DỮ LIỆU AUTOCAD VÀ VBA-AUTOCAD1 Tổng quan về cơ sở dữ liệu AutoCad……….………….5
2 Những đối tượng cơ sở dữ liệu quan trọng… ……….………….6
3 Tạo ra đối tuợng trong AutoCad……… ……….6
4 Tổng quan về VBA-AutoCad…… ……… ……….8
Chương 3:THUẬT TOÁN TẠO MÔ HÌNH 3D CHO ĐƯỜNG ĐỒNG MỨC 1.Lấy dữ liệu từ bản vẽ AutoCad……… 10
a.Thuật toán tìm cao độ cho 1 điểm bất kỳ thuộc đường đồng mức….….11 b.Thuật toán tìm cao độ của các điểm thuộc lưới….……….… 11
b1.Thuật toán chia lưới……….11
b2. Thuật toán lấy cao độ của 1 điểm bất kỳ có tọa độ (X,Y)…… ……….…12
2.Tạo mô hình 3D……… ……… … 12
Chương 4:THUẬT TOÁN VẼ MẶT CẮT DỌC TUYẾN……… 14
PHẦN 2:CỤ THỂ HÓA MÔ HÌNH 3D BẰNG MATHLAB……… 16
Tài liệu tham khảo……… ……….……… 18
Phụ lục……… 19
1
Trang 2LỜI MỞ ĐẦU
Ngày nay môi trường AutoCad đã trở nên quen thuộc trong công việc thiết kế của người kỹ sư xây dựng Những ứng dụng ngay trên môi trường AutoCad sẽ là rất hiệu quả và dễ sử dụng cho người kỹ sư trong quá trình thiết kế.
Việc phát triển ứng dụng trên môi trường AutoCad đã được các công ty tin học xây dựng khai thác và ứng dụng có hiệu quả trên thực tế.Trong thiết kế thủy lợi và cầu đường,NovaCad của Hài Hòa đã trở nên hữu ích và tiện dụng trong quá trình tính toán và thiết kế.
Với yêu cầu đặt ra là chỉ bằng những macro đơn giản viết bằng VBA-Autocad,chương trình sẽ tự động xây dựng mô hình 3D từ những đường đồng mức,và vẽ mặt cắt dọc tuyến.Qua đó,người sinh viên khi làm đồ án có thể dễ dàng nắm bắt được địa hình nơi mình thiết kế công trình,và nhanh chóng chọn lựa tuyến công trình hợp lý.
Nội dung cơ bản của nghiên cứu sẽ gồm các phần chính như sau: Phần 1:Nghiên cứu VBA-AutoCad của Nguyễn Hữu Hân
-Nghiên cứu về cơ sở dữ liệu của AutoCad -Nghiên cứu về VBA trong môi trường AutoCad.
-Xây dựng thuật toán tạo mô hình 3D từ các đường đồng mức -Xây dựng thuật toán vẽ mặt cắt dọc tuyến.
Phần 2:Nghiên cứu MathLab của Nguyễn Minh Thương -Sử dụng MathLab để cụ thể hóa mô hình 3D.
Đề tài có tham khảo và sử dụng thuật toán chia lưới của đề tài khoa học sinh viên 2000 “Xây dựng bản đồ số”-Thư viện trường ĐHXD.
Ngoài ra, quá trình nghiên cứu của nhóm còn được sự giúp đỡ và hướng dẫn tận tình của hai thầy hướng dẫn:GS.TS Huỳnh Bá Kỹ Thuật và Th.S Hoàng Chí Nhân.
Trang 3PHẦN 1:
XÂY DỰNG MÔ HÌNH 3D BẰNG VBA-AUTOCAD
CHƯƠNG 1:TỔNG QUAN
1.CÁC NGHIÊN CỨU VỀ XÂY DỰNG MÔ HÌNH 3D QUA VBA-AUTOCAD
Xây dựng mô hình 3D từ đường đồng mức là một trong những ứng dụng về GIS(Geographic Information System), đây là một hướng đi rất phổ biến của các nhà lập trình chuyên nghiệp trong lĩnh vực kỹ thuật.Các ứng dụng về GIS đã phổ biến trên thế giới và ở nước ta có thể nói đến là: ứng dụng về bản đồ số,hệ thống thông tin định vị toàn cầu GMS…vv…
Ở nước ta,các ứng dụng về GIS được phát triển khá đa dạng.Nhiều công ty phần mềm đã đi theo hướng này và đạt được những thành công đáng kể trên thị trường.Có thể nói đến là:VietCad,Hài Hòa,Trung tâm phần mềm thủy lợi….vv
Trong đó,Hài Hòa chủ yếu nghiên cứu và sản xuất các phần mềm tự động hóa thiết kế trong xây dựng bao gồm xử lý số liệu khâu khảo sát địa hình, địa chất,xử lý đồ họa ba chiều ,thiết kế đường bộ….vv.Công ty đã xây dựng và phát triển nhiều module chương trình cho các công ty nước ngoài như ViaNova(công ty chuyên phát triển các phần mềm trong thiết kế đường và cầu),trong đó có chương trình thiết kế đường NovaCad
Trong nghiên cứu khoa học của sinh viên,các nghiên cứu về vấn đề này cũng rất đa dạng Đó là các chương trình về xây dựng bản đồ số,hay chương trình tự động thiết kế đường…vv.Về VBA-AutoCad có những nghiên cứu về xây dựng chương trình tính toán bê tông cốt thép trên môi trường AutoCAD…vv
2 ƯU VÀ NHƯỢC ĐIỂM CỦA CÁC NGHIÊN CỨU NÀY:
a.Ưu điểm:
-Các chương trình của các công ty chuyên nghiệp rất hoàn thiện trong việc tính toán và xử lý số liệu,kết xuất bản vẽ.Uy tín của các chương trình này được đảm bảo bởi số lượng khách hành sử dụng các sản phẩm này -Các nghiên cứu của sinh viên rất hay trong việc đưa ra những ý tưởng mới.Chương trình thường nhỏ gọn, dễ dùng,tiện cho việc nghiên cứu,học tập trong môi trường sinh viên.
b.Nhược điểm:
-Các chương trình của các công ty về lĩnh vực này thường là những module chương trình lớn,có bản quyền Ứng dụng trong thực tế cao nhưng ứng dụng trong môi trường học tập của sinh viên là chưa thực tế,hoặc là khó đến
3
Trang 4tay người sinh viên một cách hợp pháp.Các công ty không cho phép chế độ mã nguồn mở,không thích ứng với sự khám phá và ham hiểu biết của sinh viên.Những đồ án trong phạm vi nhà trường không cần dùng đến những ứng dụng phức tạp của các công ty phần mềm.
-Các nghiên cứu của sinh viên về lĩnh vực này chỉ giới hạn ở việc load dữ liệu từ file text,không trực quan và không thực tế trong quá trình làm đồ
án(trong quá trình làm đồ án,người sinh viên được giao bình đồ khu vực qua bản vẽ AutoCad).
Trang 5CHƯƠNG 2:CƠ SỞ DỮ LIỆU AUTOCAD 1.TỔNG QUAN VỀ CƠ SỞ DỮ LIỆU AUTOCAD
Một bản vẽ AutoCAD là một tập hợp những đối tượng cất giữ trong cơ sở dữ liệu Một vài đối tượng cơ sở dữ liệu cơ bản là những thực thể, bảng symbol và từ điển Những thực thể là một loại đối tượng cơ sở dữ liệu của một đối tượng đồ họa trong một bản vẽ AutoCAD Những đối tượng line, circle, arc, text, solid, regions, splines và ellipses là những ví dụ của những thực thể Nguời dùng có thể nhìn thấy thực thể trên màn ảnh và có thể thao tác nó
Những bảng symbol và từ điển là những nơi chứa dùng để lưu trữ những cơ sở dữ liệu của đối tượng Cả hai đối tượng chứa này đều quản lý các tên symbol dưới dạng một chuỗi văn bản trong cơ sở dữ liệu của đối tượng Một cơ sở dữ liệu AutoCAD bao gồm những bảng symbol cố định, mà mỗi bản ghi của nó bao gồm những instances của một lớp riêng biệt Bạn không thể thêm một bảng symbol mới vào cơ sở dữ liệu Chẳng hạn như những bảng symbol là bảng layer (AcDbLayerTable) và block (AcDbBlockTable) Tất cả các thực thể AutoCAD đều được chứa trong những bản ghi block
Những từ điển cung cấp một khả năng quản lý đối tượng linh hoạt hơn bảng symbol Một từ điển có thể chứa đựng bất kỳ đối tượng nào của kiểu AcDbObject hoặc phân lớp của nó Cở sở dữ liệu AutoCAD tự động tạo ra một từ điển dùng để quản lý tên đối tượng khi nó tạo ra một bản vẽ mới Từ điển này có thể được xem như quản lý "mục lục" cho tất cả các từ điển liên kết với cơ sở dữ liệu Bạn có thể tạo ra những từ điển mới bên trong từ điển này và thêm những đối tượng cơ sở dữ liệu mới vào chúng.
5
Trang 6AutoCAD có thể nạp nhiều cơ sở dữ liệu trong một phiên chạy riêng lẻ Mỗi đối tượng trong một phiên chạy có một handles và một đối tượng ID Một handles duy nhất xác định đối tượng bên trong phạm vi của một cơ sở dữ liệu riêng biệt, ngược lại một đối tượng ID duy nhất xác định đối tượng trong tất cả các cơ sở dữ liệu đuợc nạp Một đối tượng ID vẫn chỉ tồn tại trong thời gian nó được sử dụng, nhưng một handles luôn được lưu giữ với bản vẽ Trái ngược với đối tượng ID, một handles không chắc chắn là duy nhất khi nhiều cơ sở dữ liệu được nạp trong một phiên chạy của AutoCAD.
2 NHỮNG ĐỐi TƯỢNG CƠ SỞ DỮ LIỆU QUAN TRỌNG
Khi những đối tượng được tạo ra trong AutoCAD, chúng được thêm vào đối tượng chưa thích hợp của chúng trong cơ sở dữ liệu Những thực thể được thêm vào những bản ghi trong bảng block Những bản ghi bảng
symbol được thêm vào những bảng symbol thích hợp Tất cả các đối tượng khác đều được thêm vào từ điển quản lý tên đối tượng hoặc được quản lý bởi đối tượng khác (và cuối cùng vẫn thêm vào từ điển quản lý tên đối tượng), hoặc vào một từ điển mở rộng.
3 TẠO RA ĐỐi TƯỢNG TRONG AUTOCAD
Mục này mô tả cách tạo ra đối tượng line, circle, layer và group trong AutoCAD và chỉ ra cách AutoCAD thêm những đối tượng này vào cơ sở dữ liệu Trước hết, đòi hỏi người dùng tạo ra một đối tượng line trong không gian mô hình với lệnh sau :
line 4,2 10,7
Trong cơ sơ dữ liệu, AutoCAD tạo ra một instance của lớp AcDbLine và sau đó cất giữ nó trong bản ghi bảng block trong không gian mô hình và nó được thể hiện trong minh họa sau:
Khi bạn kích hoạt AutoCAD lần đầu thì cơ sở dữ liệu trong trạng thái mặc định của nó, những thực thể được thêm vào không gian mô hình (không gian chính trong AutoCAD), được sử dụng cho hình học và đồ họa Không gian giấy vẽ được dùng để hỗ trợ trình bày bản vẽ như sheet
outlines, khung tiêu đề và văn bản annotational Những lệnh tạo thành thực
Trang 7thể trong AutoCAD (trong trường hợp này là line) sẽ thêm thực thể vào cơ sở dữ liệu hiện thời cũng như vào khối không gian mô hình.
Tiếp theo, giả sử người dùng tạo ra một đối tượng circle với lệnh sau:
circle 9,3 2
Một lần nữa, AutoCAD tạo ra một instance của thực thể thích hợp
(AcDbCircle) và thêm nó vào bản ghi bảng block trong không gian mô hình
Tiếp theo, người dùng tạo ra một lớp: layer _make mylayer
AutoCAD tạo ra một bản ghi layer mới để lưu giữ lớp và sau đó thêm nó vào bảng layer.
7
Trang 8Cuối cùng, người dùng nhóm tất cả các thực thể lại với nhau: group 3,2 9,3
AutoCAD tạo ra một nhóm đối tượng mới và thêm nó vào từ điển Group, mà được chứa trong từ điển quản lý tên đối tượng.Nhóm mới này chứa một danh sách các đối tượng IDs của những đối tượng mà được tạo nên nhóm.
4.TỔNG QUAN VỀ VBA-AUTOCAD:
Một đề án AutoCad Vba là một tập hợp của module mã lệnh,module lớp và form ,chúng cùng nhau làm việc để thực hiện nhiệm vụ được giao Đề án có thể được lưu giữ ngay bên trong của bản vẽ Cad ,hay là file độc lập.
“Embedded projects” là những đề án được lưu giữ ngay trong bản vẽ Cad.Những đề án kiểu này được nạp một cách tự động mỗi khi mở bản vẽ.Vì thế ,việc phân bổ các đề án dạng này là vô cùng thuận tiện.“Embedded projects” bị giới hạn và không thể mở hay đóng bản vẽ Cad bởi vì chúng chỉ thực hiện chức năng trong bản vẽ mà chúng cư trú.Người dùng các
“Embedded projects” không thể yêu cầu tìm và đọc những file đề án trước khi chúng chạy chương trình.Tất nhiên người sử dụng không cần phải nhớ để nạp đề án trước khi mở bản vẽ,vì đơn giản nó đã được nạp tự động rồi “Global projects“được lưu giữ trong những file độc lập và linh hoạt hơn bởi vì chúng có thể làm việc trong bản vẽ,mở và đóng bất kỳ một bản vẽ nào,nhưng không thể tự động nạp khi bản vẽ được mở Người sử dụng phải biết được file đề án bao gồm macro mà họ cần và sao đó nạp file đề án này trước khi chúng có thể chạy macro.Tuy nhiên,”global projects” dễ dàng hơn trong việc chia sẻ với những người dùng khác,và chúng tạo thành các thư viện phong phú cho những macro dùng chung.
Bạn có thể nhìn thấy tất cả các đề án VBA được nạp trong phiên làm việc hiện thời của AutoCad bằng việc sử dụng công cụ VBA Manager.Nó là một công cụ của AutoCad cho phép bạn nạp,không nạp,ghi,tạo các đề án VBA
Trang 10CHƯƠNG 3:
THUẬT TOÁN TẠO MÔ HÌNH 3D CHO ĐƯỜNG ĐỒNG MỨC 1.LẤY DỮ LIỆU TỪ BẢN VẼ AUTOCAD:
Như ta đã biết,bản vẽ của AutoCad bao gồm tập hợp những đối tượng như line,circle,polyline,layer…vv.Mỗi đối tượng trên ta đều có thể tương tác với chúng thông qua tên của chúng trong AutoCad.
VD:+polyline có tên trong AutoCad là: “AcDbPolyline” +line có tên trong AutoCad là: “AcDbline”….vv
Vì thế thông qua thuộc tính Object.EntityName ta có thể biết những thông tin về các đối tượng trong bản vẽ,mà cụ thể trong chương trình này đó là những thông tin về các đường polyline,spline(đại diện cho các đường đồng mức);Mtext,Text(để ghi cao độ cho đường đồng mức);line(đại diện cho mặt cắt)
Các thông tin về các đường này mà ta sẽ lấy bao gồm:
+Tọa độ (X,Y) của các điểm thuộc polyline hoặc spline (tọa độ(X,Y) của đường đồng mức)
+Giá trị Mtext hoặc Text tương ứng với mỗi đường polyline hoặc spline nói trên(tức là giá trị cao độ tương ứng với các đuờng đồng mức)
+Tọa độ điểm đầu và điểm cuối của line(tương ứng với mặt cắt dọc cần vẽ) +Số đường polyline,spline,số đối tượng là Mtext và Text.
Sau khi lấy được các thông tin này,ta sẽ lưu dữ liệu của các đường đồng mức vào ba mảng 1 chiều là:mangX(),mangY() và mangH,với:
+mangX() lưu các giá tri tọa độ phương X của các đường đồng mức +mangY() lưu các giá trị tọa độ phương Y của các đường đồng mức +mangH() lưu các giá trị cao độ của các đường đồng mức tương ứng Ta đã có tọa độ(X,Y,Z) của một điểm bất kỳ thuộc đường đồng mức Nhưng những điểm (X,Y,Z) trên nằm ở những vị trí ngẫu nhiên,rời rạc không thể xây dựng nên một mô hình 3D hợp lý.
Chính vì thế,ta phải xây dựng một lưới các tọa độ (X,Y,Z),từ đó ta sẽ dựng được mô hình 3D cần thiết.
Trang 11Vấn đề đặt ra là :
+Làm sao biết được Text(cao độ) sẽ tương ứng với polyline nào +Sau khi đã biết tọa độ (X,Y,Z) của các điểm trên polyline,làm sao lấy được tọa độ (X,Y,Z) trên lưới.
Giải quyết vấn đề này,ta chia thành hai thuật toán như sau:
a.Thuật toán tìm cao độ cho 1 điểm bất kỳ thuộc đường đồng mức
-Việc tìm cao độ của 1 điểm thuộc polyline,ta chia thành 2 phần:
+Duyệt qua các polyline trên bản vẽ, ứng với mỗi polyline sẽ có một Text tương ứng.
+Duyệt qua tất cả các điểm trên một polyline và gán giá trị cao độ H của từng điểm của Polyline bằng giá trị của Text tương ứng với Polyline đó Sơ đồ thuật toán như sau:
b.Thuật toán tìm cao độ của các điểm thuộc lưới:
Để tìm cao độ của 1 điểm thuộc lưới,ta tổng quát hóa bài toán.Tức là ta đi tìm công thức chung tính cao độ của một điểm bất kỳ có tọa độ
(X,Y).Từ đó,với mỗi điểm mắt lưới,ta dễ dàng tìm được tọa độ (X,Y) của mắt lưới đó,và suy ra cao độ của các mắt lưới.
Trước tiên,ta đi xét thuật toán chia lưới:
b1.Thuật toán chia lưới:
Giả sử ta tìm được điểm thuộc đường đồng mức có tọa độ là (Xmin,Ymin) và (Xmax,Ymax)
-Giả thiết số lưới theo phương X là duongluoix Ta có: DeltaT=(Xmax - Xmin) / (duongluoix - 1)
-Số lưới theo phương Y là: duongluoiy = Int((ymax - ymin) / delT) + 1 -Tọa độ theo phương X của điểm lưới thứ i là:
Xtt(i) = xmin + delT * (i - 1)
-Tọa độ theo phương Y của điểm lưới thứ j là: Ytt(j) = ymin + delT * (j - 1)
Trang 12b2.Thuật toán lấy cao độ của 1 điểm bất kỳ có tọa độ (X,Y):
-Bước1:Tìm khoảng cách nhỏ nhất từ điểm cần tính cao độ đến tất cả các điểm trên đường polyline(hoặc spline), ứng với mỗi đường polyline sẽ có một giá trị nhỏ nhất.Ta lưu các giá trị nhỏ nhất này vào một mảng 1
chiều,đương nhiên số phần tử của mảng này phải bằng số lượng các đường polyline trên bản vẽ.
-Bước2:Tìm 2 giá trị nhỏ nhất của mảng vừa nêu,ứng với nó là 2 khoảng cách từ điểm cần tính cao độ đến 2 đường polyline gần nhất.
-Bước3:Tính cao độ
+Gọi 2 khoảng cách vừa tìm được là dt1 và dt2.Tương ứng với nó là 2 đường polyline có cao độ theo thứ tự là:diem1H và diem2H.Ta có công
thức tính cao độ của điểm(X,Y) bất kỳ thuộc lưới như sau:
tuso = (diem1H / dt1) + (diem2H / dt2)mauso = (1 / dt1) + (1 / dt2)
caodo = tuso / mauso2.TẠO MÔ HÌNH 3D:
Để tạo mô hình 3D của các đường đồng mức khi đã có dữ liệu về tọa độ (X,Y) của các mắt lưới và cao độ tương ứng của các mắt lưới đó.Ta sử dụng lệnh:
Set meshobj = ThisDrawing.ModelSpace.Add3DMesh(mSize, nSize, points) Với: mSize = duongluoix, nSize = duongluoiy là kích thước của lưới
Và points là mảng 3 chiều,chứa các tọa độ (X,Y,Z) của 1 điểm trong không gian.Vì thế ta truyền dữ liệu từ 2 mảng 1 chiều và 1 mảng 2 chiều của ta sang mảng points như sau:
For i = 1 To duongluoix
dt2 dt1