Chuyển đến nội dung
Diễn đàn CADViet
anhcos

Hướng dẫn lập trình với AutoCAD bằng VB.NET

Các bài được khuyến nghị

Tôi có một chương trình khi chạy sẽ list các file bản vẽ đang mở trong CAD. Nếu người dùng đóng một file bất kì hoặc tắt AutoCAD đi thì làm sao để hiển thị thông báo sang phần mềm được? Bác nào biết chỉ giùm cách với. Thanks.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Vào lúc 14/12/2018 tại 22:55, KangKung đã nói:

Tôi có một chương trình khi chạy sẽ list các file bản vẽ đang mở trong CAD. Nếu người dùng đóng một file bất kì hoặc tắt AutoCAD đi thì làm sao để hiển thị thông báo sang phần mềm được? Bác nào biết chỉ giùm cách với. Thanks.

thông qua thuộc tính IsReadOnly của document bạn có thể biết bản vẽ có được mở hay không mà

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
8 giờ trước, hung37cespk đã nói:

thông qua thuộc tính IsReadOnly của document bạn có thể biết bản vẽ có được mở hay không mà

Vấn đề là như này bác ơi:

1. Chạy một App được viết bằng VB.net ( .exe )

2. Link App với AutoCAD (CAD đã mở từ trước) thì toàn bộ bản vẽ đang mở trong AutoCAD sẽ được list trong combobox như hình dưới:

 

Untitled.png.37e0c792f2eca7aeef4d48b2f1433347.png

3. Nếu người dùng đóng 1 file bất kì trong CAD (ví dụ đóng file "Drawing5.dwg" bằng phần mềm AutoCAD) thì làm sao để combobox tự động update như hình dưới. (App tự động update ngay khi có sự kiện nào ở AutoCAD như đóng file hoặc đóng phần mềm AutoCAD)

 222.png.c058c8895e526a88e1f2f29537fd694b.png

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
1 giờ trước, KangKung đã nói:

Vấn đề là như này bác ơi:

1. Chạy một App được viết bằng VB.net ( .exe )

2. Link App với AutoCAD (CAD đã mở từ trước) thì toàn bộ bản vẽ đang mở trong AutoCAD sẽ được list trong combobox như hình dưới:

 

Untitled.png.37e0c792f2eca7aeef4d48b2f1433347.png

3. Nếu người dùng đóng 1 file bất kì trong CAD (ví dụ đóng file "Drawing5.dwg" bằng phần mềm AutoCAD) thì làm sao để combobox tự động update như hình dưới. (App tự động update ngay khi có sự kiện nào ở AutoCAD như đóng file hoặc đóng phần mềm AutoCAD)

 222.png.c058c8895e526a88e1f2f29537fd694b.png

https://knowledge.autodesk.com/search-result/caas/CloudHelp/cloudhelp/2017/ENU/AutoCAD-NET/files/GUID-F432E285-8B94-4ACD-A186-89E1218DEC07-htm.html

 

Bạn thực hiện bắt event BeginDocumentClose. Khi event này được trigger thì loại bỏ tên file đó trong dropdownlist của bạn.

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
13 giờ trước, nguyenanh93 đã nói:

https://knowledge.autodesk.com/search-result/caas/CloudHelp/cloudhelp/2017/ENU/AutoCAD-NET/files/GUID-F432E285-8B94-4ACD-A186-89E1218DEC07-htm.html

 

Bạn thực hiện bắt event BeginDocumentClose. Khi event này được trigger thì loại bỏ tên file đó trong dropdownlist của bạn.

Theo như mình hiểu thì chương trình bác ấy viết là chương trình ngoài AutoCAD, kết nối với CAD thông qua COM API.
Như vậy có thể bắt được sự kiện của bản vẽ không?

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Hiện tại thì tôi đang dùng Me.Acticvated ( thêm Me.MouseEnter nữa) để update cái List bản vẽ trong App. Hơi thủ công tí nhưng dùng tốt khi chưa biết cách bắt sự kiện trên bản vẽ.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
8 giờ trước, ksxdTVC đã nói:

Theo như mình hiểu thì chương trình bác ấy viết là chương trình ngoài AutoCAD, kết nối với CAD thông qua COM API.
Như vậy có thể bắt được sự kiện của bản vẽ không?

Sorry vì đọc ko kĩ :D

Về vấn đề này thì phải xây dựng một Inter-process Communication giữa 2 chương trình. Cái này khá khó và không biết VB.NET có hỗ trợ không. Một cách đơn giản hơn thì xây dựng chương trình đọc dữ liệu từ port. Khi AutoCAD trigger sự kiện đóng bản vẽ hoặc đóng AutoCAD thì send 1 tín hiệu đến cổng bất kì (1002 chẳng hạn). Chương trình .exe lấy thông tin từ cổng đó để xử lý. Về cơ bản thì cả 2 cách đều tốn công cả. C# hoặc C++ hỗ trợ tốt hơn VB.NET

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Cách này cũng được rồi nè, không thì cứ thêm 1 nút refresh, mỗi lần qua form thì nhấn nút cho nó load lại danh sách. :D

18 giờ trước, KangKung đã nói:

Hiện tại thì tôi đang dùng Me.Acticvated ( thêm Me.MouseEnter nữa) để update cái List bản vẽ trong App. Hơi thủ công tí nhưng dùng tốt khi chưa biết cách bắt sự kiện trên bản vẽ.

 

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Vào lúc 16/12/2018 tại 20:05, KangKung đã nói:

Vấn đề là như này bác ơi:

1. Chạy một App được viết bằng VB.net ( .exe )

2. Link App với AutoCAD (CAD đã mở từ trước) thì toàn bộ bản vẽ đang mở trong AutoCAD sẽ được list trong combobox như hình dưới:

 

Untitled.png.37e0c792f2eca7aeef4d48b2f1433347.png

3. Nếu người dùng đóng 1 file bất kì trong CAD (ví dụ đóng file "Drawing5.dwg" bằng phần mềm AutoCAD) thì làm sao để combobox tự động update như hình dưới. (App tự động update ngay khi có sự kiện nào ở AutoCAD như đóng file hoặc đóng phần mềm AutoCAD)

 222.png.c058c8895e526a88e1f2f29537fd694b.png

 

Cái này thì dễ, bác cứ theo sự kiện DropDown của ComboBox mà lấy lại danh sách bản vẽ đang mở từ AutoCAD thôi.

 

Chào các bác, dạo này mình chuyển sang lập trình phần mềm CAM và dùng sử dụng giao diện cad riêng nên ít dùng vb với AutoCAD nữa.

AutoCAD mình giờ chỉ dùng vẽ các bản vẽ đơn giản.

 

VD như phần mềm CAM dùng cho máy tiện gỗ 2 dao:

 

  • Like 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
8 giờ trước, anhcos đã nói:

 

Cái này thì dễ, bác cứ theo sự kiện DropDown của ComboBox mà lấy lại danh sách bản vẽ đang mở từ AutoCAD thôi.

 

Vấn đề là tôi muốn App cập nhật ngay khi người dùng đóng bản vẽ. Nếu dùng sự kiện DropDown của ComboBox thì App chỉ update khi người dùng di chuột vào ComboBox và nó còn xảy ra chậm hơn sự kiện Me.Activated và Me.MouseEnter mà tôi đang dùng.

 

19 giờ trước, ksxdTVC đã nói:

Cách này cũng được rồi nè, không thì cứ thêm 1 nút refresh, mỗi lần qua form thì nhấn nút cho nó load lại danh sách. :D

 

Cách này thì còn thủ công hơn nữa.

 

Cảm ơn các bác đã góp ý.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Vào lúc 13/12/2018 tại 15:47, Danh Cong đã nói:

Giờ mới biết bác là chủ trì khảo sát  công trình này   :))))

" Em chỉ là nhân viên thiết kế cầu  mà thôi :(   "

 

 

PTH.jpg

 

Hắn làm thì ít, bịa là chính :)

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Vào lúc 18/12/2018 tại 21:18, anhcos đã nói:

 

Cái này thì dễ, bác cứ theo sự kiện DropDown của ComboBox mà lấy lại danh sách bản vẽ đang mở từ AutoCAD thôi.

 

Chào các bác, dạo này mình chuyển sang lập trình phần mềm CAM và dùng sử dụng giao diện cad riêng nên ít dùng vb với AutoCAD nữa.

AutoCAD mình giờ chỉ dùng vẽ các bản vẽ đơn giản.

 

VD như phần mềm CAM dùng cho máy tiện gỗ 2 dao:

 

Cái "giao diện cad riêng" là thế nào vậy bác?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Vào lúc 11/2/2017 tại 00:31, anhcos đã nói:
Giới thiệu các bác phần mềm sắp lỗ khuôn ép đùn mình viết bằng VB+C# nhé.

 

Trong đó cốt lõi vẫn là giao diện cad của riêng mình, thực hiện được các lệnh cơ bản như acad, hỗ trợ nhập liệu từ bàn phím...

 

 

 

 

 

 

Bác Pro quá, hình như bác dùng CAD .NET?

Cái đó có đầy đủ bộ lệnh như AutoCAD không bác?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Vào lúc 9/3/2015 tại 21:34, hotrung đã nói:

 Các bác chỉ với em với, trong đoạn code dưới đây của bác anhcos là select các đối tượng trên màn hình, nhưng em chỉ muốn select các đối tượng là Line hoặc Polyline thôi  thì phải làm thế nào ạ? Và sau khi select xong, em muốn lấy các thông số Startpoint, Endpoint, vector pháp tuyến của từng Line thì phải làm thế nào ạ? Cái này em mới tìm hiểu mà tìm mãi chẳng thấy chỗ nào các bác nói đến cả, mong các bác giúp đỡ.

 

 Private Sub cmdSelectObject_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSelectObject.Click

 

        If ACADLink() Then

            Try

                Dim dwg As Object = Acad.ActiveDocument

 

                Try

                    SelSet = dwg.SelectionSets.Add("anhcos")

                Catch

                    SelSet = dwg.SelectionSets.Item("anhcos")

                End Try

                SelSet.Clear()

 

                AppActivate(Acad.Caption)

 

                SelSet.SelectOnScreen()

 

                ObjIndex = 0

                Vịtríđốitượngtrongtậpchọn()

 

                AppActivate(Me.Text)

                pgObject.SelectedObject = SelSet.Item(ObjIndex)

 

 

            Catch

                ObjIndex = -1

            End Try

        End If

    End Sub

Mình hướng dẫn bạn một chút về cách lấy thông tin của 1 đối tượng hình học trong cad nhé. Các đối tượng khác thì bạn tự suy nghĩ thêm, cũng tương tự thôi.

Sau khi bạn dùng phương thức selectionOnscreen. Bạn dùng vòng lặp để xét đến đối tượng cần lấy thông tin:

For each object_cad in Object_Select

if Object_cad.ObjectName = "AcdbLine" then ' Lấy thông số đối tượng Line

Dim ToadoDau( 0 to 2) as double

Dim Toadocuoi( 0 to 2) as double

Dim Layer_line as layer

toadodau(0) =Object_cad.startPoint.Coordinates(0)

toadodau(1) =Object_cad.startPoint.Coordinates(1)

toadocuoi(0) =Object_cad.EndPoint.Coordinates(0)

toadocuoi(1) =Object_cad.EndPoint.Coordinates(1)

Layer_line= Object_cad.layer

end if

Next

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Duyệt qua từng đối tượng là cách cơ bản, rồi, tuy nhiên tốc độ rất chậm, nếu cỡ 200 đối tượng trở lên thì còn chậm nữa.

Nên giải pháp là phải dùng filter cùng với SelectionSet trước khi chọn đối tượng để lọc bớt số lượng ngay từ đầu.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

×