anhcos
-
Số lượng nội dung
305 -
Đã tham gia
-
Lần ghé thăm cuối
-
Ngày trúng
21
Bài đăng được đăng bởi anhcos
-
-
Tôi thấy trong forum này chưa có bàn nhiều về lập trình VB.NET cho AutoCAD.
So với AutoLISP thì VB.NET dễ lập trình hơn và có thể kiểm soát các lỗi dễ dàng hơn. Nhưng tốc độ thì không bằng AutoLISP được vì nó chạy trực tiếp trên nền ACAD.
Các bước khi lập trình với VB.NET(VB 6.0 hoặc Excel.Macro sẽ khác một ít)
Bước 1: Tạo liên kết với AutoCAD (có thể liên kết với bất kỳ version nào của AutoCAD đang cài đặt trên máy)
Dim AcadApp as object
Try
'Xem acad đã chạy chưa
AcadApp = GetObject(, "AutoCAD.Application")
Catch
'Nếu chưa có bản ACAD nào đang chạy thì khởi động ACAD lên
Acad = CreateObject("AutoCAD.Application")
Acad.Visible = True 'Hiện acad lên, nếu không nó sẽ chạy ở background
End Try
Sau khi liên kết chtrình ACAD vào biến AcadApp, từ biến này ta có thể can thiệp vào rất nhiều dữ liệu chứa trong ACAD
VD:
dim acDocs as object = AcadApp.Documents
dim acLayers as object = AcadApp.Layers
dim acTextStyles as object = AcadApp.TextStyles
...
Để tham khảo các thuộc tính, các hàm và các sự kiện của mỗi đối tượng ACAD, xem phần giúp đỡ của ACAD.
Ấn F1, chọn ActiveX Automation & VBA, click tiếp mục ActiveX and VBA Reference.
------------------------------
Bước 2: Can thiệp vào các dữ liệu của AutoCAD
Ứng với mỗi đối tượng, sẽ có nhiều thuộc tính và hàm tương ưng với nó.
VD: đối tượng Layers bao gồm tất cả các layer nằm trong 1 bản vẽ, nó bao gồm
Các hàm
Add 'dùng để thêm một layer mới
GenerateUsageData
GetExtensionDictionary
Item 'lấy dữ liệu của một layer
SetXData
và các thuộc tính
Application 'bản AutoCAD đang chạy
Count 'số lượng layer trong bản vẽ
Document 'bản vẽ đang xét
Handle
HasExtensionDictionary
ObjectID
ObjectName
OwnerID
Như vậy để tắt hết các layer ta sẽ viết code như sau
dim i as integer
dim acLayers as object = acadApp.ActiveDocuments.Layers
dim acEachLayer as object
for i= 0 to acLayers.Count - 1
acLayer = acLayers.Item(i)
acEachLayer.LayerOn = FALSE
next i
Và sẽ còn rất nhiều thứ nữa cần các bạn thử nghiệm và khám phá
- 3
-
Để tạo đường đồng mức bạn thử xem cách này:
Với 1 tập điểm đã cho, bạn hãy chưa quan tâm đến cao độ z.
Đi qua 2 bước:
* Bước 1: Xây dựng lưới tam giác:
- Tìm điểm nằm ngoài cùng nhất (có x, và Y nhỏ nhất or ngược lại)
- Từ điểm đó tìm 2 điểm gần nhất để hình thành 1 tam giác đầu tiên
- Lúc này đường bao sẽ phát triển thành 3 đường (là 3 cạnh của tam giác)
- Duyệt qua từng đoạn của đường bao, tìm điểm gần nhất với đoạn này để tạo thêm 1 tam giác mới
Đường bao mới sẽ được hình thành từ đường bao cũ kết hợp với đường bao mới và loại bỏ đường bao đang xét
Tuy nhiên sẽ có một số ngoại lệ mà bạn phải tự tìm hiểu lấy.
Quá trình này sẽ rất làm rất lâu nếu bạn không có thuật toán tìm kiếm hiệu quả.
* Bước 2: tạo đường đồng mức.
Từ tập điểm ta có Zmin và Zmax
Cho Z chạy từ Zmin --> Zmax để cắt từng đường của lưới tam giác đã tạo ở trên.
Nói chung là bạn sẽ mất rất nhiều thời gian để hoàn tất công việc này đấy.
Lisp tạo các point 3d từ file bình đồ
trong AutoLisp
Đã đăng · Trả lời báo cáo
Tôi có viết chương trình này, hy vọng là giúp cho công việc của bạn:
Chương trình này tôi viết đã lâu rồi nên chỉ hỗ trợ cho ACAD 2004 và 2005 thôi.
Sắp tới sẽ có version mới hơn, hỗ trợ hầu hết các phiên bản AutoCAD
Chương trình AutoCAD Utilities
part 1: http://www.cadviet.com/upfiles/ACAD_Utilitiespart1.rar
part 2: http://www.cadviet.com/upfiles/ACAD_Utilitiespart2_1.rar
Cài đặt chương trình với mã: anhcos-270773-723472
*Để nâng cao độ của 2DText với Z=nội dung
Trong phần Thay đổi dữ liệu
Chọn bộ lọc là Text or MText or All Text tùy bạn
Trong mục Z bạn ghi: =T
Các mục khác giũ nguyên
Nhất nút thay đổi, chọn các 2DText, Enter.
Các 2DText sẽ được nâng cao độ lên bằng chính nội dung của nó.
Bạn cũng có thể chuyển nội dung thành dạng X, Y ,Z bằng cách ghi vào trong mục T: = "X=" & X & "/p" & "Y=" & Y & "/p" & "Z=" & Z
/p là dùng để xuống hàng trong MText.
*Để chuyển các 2D Text thành 3D point bạn làm theo 2 bước
Bước 1:
Trong phần lấy dữ liệu, chọn lọc: All Text
Sau đó chọn các 2DText, dữ liệu sẽ xuất qua bảng tính Excel
Trong Excel bạn hãy xóa cột chứa Z, lúc này cột chứa nội dung sẽ là toạ độ Z của điểm
Quét khối toàn bộ các dữ liệu X,Y,Z của các điểm và trở về chương trình
Bước 2:
Trong phần tạo thực thể: chọn là Point
Và ấn nút Tạo, các điểm 3D point sẽ được tạo ra, bạn chỉ cần xóa đi các 2DText là dc