Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
redsea_tq

Hỏi Về Getboundingbox Trong Autocad.net

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

Chào các anh chị em trong diễn đàn, mình đang chuyển dần sang autocad.net. Trước đây mình dùng VB6.0 và VBA getboundingbox của đối tượng Text rất đơn giản và dễ đàng lấy được Pmin và Pmax của đối tượng đó, giờ chuyển sang autocad.net với ngôn ngữ vb.net thì phải dùng đối tượng Extents3d để lấy được Pmin và Pmax. Vấn đề ở đây là Pmin và Pmax của Boundingbox sau khi lấy ra không phải 2 điểm trên - dưới giống như khi dùng bằng VB6.0. Mong các anh chị em trên diễn đàn chỉ giúp. Xin chân thành cám ơn.

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

Không biết bạn dùng Cad mấy?

 

Tôi thử trên CAD 2010 và 2016, kết quả của Lisp, VBA, AutoCAD.Net đều giống nhau.

 

Xác nhận dotnet trên Cad 2007 cho kết quả khác thường?!

Chỉnh sửa theo gia_bach
  • 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

Không biết bạn dùng Cad mấy?

 

Tôi thử trên CAD 2010 và 2016, kết quả của Lisp, VBA, AutoCAD.Net đều giống nhau.

 

Xác nhận dotnet trên Cad 2007 cho kết quả khác thường?!

Cám ơn bác gia_bach, có thể mình mới chuyển sang dùng autocad.net nên chưa nắm chắc cú pháp, hiện tại mình dùng cad 2007 và vb2008. Bác có thể xem giúp mình code dưới có vấn đề gì không ah.

Sub VD3()
        Dim ObjT As DBText
        Dim acEditor As Editor = acDoc.Editor
        Dim acPoint3dCollection As Point3dCollection
        Dim acExtents3d As Extents3d
        Dim acPline As Polyline
        Dim acObjectID As ObjectId = acEditor.GetEntity(vbLf & "Chọn đối tượng :").ObjectId
        Using acTran = acCurData.TransactionManager.StartTransaction
            Dim acBlockTable As BlockTable
            acBlockTable = acTran.GetObject(acCurData.BlockTableId, DatabaseServices.OpenMode.ForRead)
            Dim acBlockTableRecord As BlockTableRecord
            acBlockTableRecord = acTran.GetObject(acCurData.CurrentSpaceId, DatabaseServices.OpenMode.ForWrite)

            ObjT = acTran.GetObject(acObjectID, DatabaseServices.OpenMode.ForWrite)
            acPoint3dCollection = New Point3dCollection
            acExtents3d = New Extents3d
            acExtents3d = ObjT.GeometricExtents
            acPoint3dCollection.Add(acExtents3d.MinPoint)
            acPoint3dCollection.Add(acExtents3d.MaxPoint)
            acPline = acFun.Thêm_Polyline(acPoint3dCollection)
            acTran.Commit()
        End Using
    End Sub

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ám ơn bác gia_bach, có thể mình mới chuyển sang dùng autocad.net nên chưa nắm chắc cú pháp, hiện tại mình dùng cad 2007 và vb2008. Bác có thể xem giúp mình code dưới có vấn đề gì không ah.

Sub VD3()
        Dim ObjT As DBText
        Dim acEditor As Editor = acDoc.Editor
        Dim acPoint3dCollection As Point3dCollection
        Dim acExtents3d As Extents3d
        Dim acPline As Polyline
        Dim acObjectID As ObjectId = acEditor.GetEntity(vbLf & "Chọn đối tượng :").ObjectId
        Using acTran = acCurData.TransactionManager.StartTransaction
            Dim acBlockTable As BlockTable
            acBlockTable = acTran.GetObject(acCurData.BlockTableId, DatabaseServices.OpenMode.ForRead)
            Dim acBlockTableRecord As BlockTableRecord
            acBlockTableRecord = acTran.GetObject(acCurData.CurrentSpaceId, DatabaseServices.OpenMode.ForWrite)

            ObjT = acTran.GetObject(acObjectID, DatabaseServices.OpenMode.ForWrite)
            acPoint3dCollection = New Point3dCollection
            acExtents3d = New Extents3d
            acExtents3d = ObjT.GeometricExtents
            acPoint3dCollection.Add(acExtents3d.MinPoint)
            acPoint3dCollection.Add(acExtents3d.MaxPoint)
            acPline = acFun.Thêm_Polyline(acPoint3dCollection)
            acTran.Commit()
        End Using
    End Sub

redsea_tq hơi bị ...khiêm tốn, (sử dụng OPP viết code)

Tuy nhiên để phát hiện lỗi khi debug, thử vẽ line qua 2 điểm Minpoint và Maxpoint ?

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ám ơn bác gia_bach, có thể mình mới chuyển sang dùng autocad.net nên chưa nắm chắc cú pháp, hiện tại mình dùng cad 2007 và vb2008. Bác có thể xem giúp mình code dưới có vấn đề gì không ah.

Sub ....

Mọi người cho em hỏi, bình thường em thấy mọi người hay hỏi nhau VB trong Cad, có lẽ là viết cùng ngôn ngữ VBA như Excel (cái này thì em mù tịt). Vậy cái VB Cad này có chỗ nào để viết, lấy nguồn cơ sở ở đâu, nó không có sẵn khi cài Cad phải không?, (em thấy vẫn load được các file các anh viết (dạng dll) và chạy trên máy em, vậy nó cho dùng nhưng không cho sửa viết = Cad ư)

Như em thấy Cad thì Visual Lisp chuyên viết LISP cad, Excel thì ALT+F11 thì phải (cũng là Visual Basic for Applications cho phần mềm OFF, vậy cái VB cho Cad này dùng gì để viết, các từ khóa lấy kiểu gì, hay tự nhớ, tự viết bằng Note++

 

xin lỗi mọi người nếu em hỏi gà quá nha!

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

Mọi người cho em hỏi, bình thường em thấy mọi người hay hỏi nhau VB trong Cad, có lẽ là viết cùng ngôn ngữ VBA như Excel (cái này thì em mù tịt). Vậy cái VB Cad này có chỗ nào để viết, lấy nguồn cơ sở ở đâu, nó không có sẵn khi cài Cad phải không?, (em thấy vẫn load được các file các anh viết (dạng dll) và chạy trên máy em, vậy nó cho dùng nhưng không cho sửa viết = Cad ư)

Như em thấy Cad thì Visual Lisp chuyên viết LISP cad, Excel thì ALT+F11 thì phải (cũng là Visual Basic for Applications cho phần mềm OFF, vậy cái VB cho Cad này dùng gì để viết, các từ khóa lấy kiểu gì, hay tự nhớ, tự viết bằng Note++

 

xin lỗi mọi người nếu em hỏi gà quá nha!

Bạn có thể tham khảo ở đây : http://www.cadviet.com/forum/topic/24288-autocad-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

redsea_tq hơi bị ...khiêm tốn, (sử dụng OPP viết code)

Tuy nhiên để phát hiện lỗi khi debug, thử vẽ line qua 2 điểm Minpoint và Maxpoint ?

Vâng, vừa học vừa triển khai thôi bác ah, có cái vẫn sử dụng nhưng chưa hiểu hết nghĩa. Mình dùng hàm acFunc.Thêm_Polyline thì phát biện cái Polyline nó ...bên trời tây ấy bác, mình nghĩ phải chăng nó do cad2007.

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

Mọi người cho em hỏi, bình thường em thấy mọi người hay hỏi nhau VB trong Cad, có lẽ là viết cùng ngôn ngữ VBA như Excel (cái này thì em mù tịt). Vậy cái VB Cad này có chỗ nào để viết, lấy nguồn cơ sở ở đâu, nó không có sẵn khi cài Cad phải không?, (em thấy vẫn load được các file các anh viết (dạng dll) và chạy trên máy em, vậy nó cho dùng nhưng không cho sửa viết = Cad ư)

Như em thấy Cad thì Visual Lisp chuyên viết LISP cad, Excel thì ALT+F11 thì phải (cũng là Visual Basic for Applications cho phần mềm OFF, vậy cái VB cho Cad này dùng gì để viết, các từ khóa lấy kiểu gì, hay tự nhớ, tự viết bằng Note++

 

xin lỗi mọi người nếu em hỏi gà quá nha!

Chào bạn, VB trong cad chính là dùng ngôn ngữ Visual Basic (VB6.0 hoặc VB.Net) để tạo ra các lệnh trong cad. Tuy nhiên từ cad2010 thì Autodesk không còn tích hợp VB sẵn (còn gọi là VBA) trong bộ cài nữa mà phải cài thêm sau khi cài cad, hơn nữa VBA hay VB6.0 không tương thích với Unicode nên hiện nay anh em cũng dần chuyển sang VB.Net để làm việc với Cad. Khi sử dụng VB.Net có 2 cách để làm việc với cad:

- Cách 1: sử dụng ActiveX làm việc với cad, cách này giống với vb6.0 (chỉ khác một chút giữa 2 ngôn ngữ vb6.0 và vb.net). Tuy nhiên khi lập trình bằng vb.net sử dụng ActiveX thì các mảng đối tượng bị lỗi mà không biết vì sao? Trên diễn đàn có bác anhcos rành về món này.

- Cách 2: sử dụng .Net API làm việc với cad (cách mình trình bày code ở trên), cách này dùng ngôn ngữ vb.net kết hợp với Netframework. Với cách này mình thấy khai thác cad được triệt để hơn và can thiệp sâu hơn (cảm nhận ban đầu) nhưng lập trình vất vả hơn so với cách 1 (có lẽ do mình quen làm việc với vb6.0)

Trên đây là một số khái niệm cơ bản về vb cho cad mà mình hiểu được và nói sơ qua cho bạn. Nếu bạn muốn tìm hiểu sâu hơn thì ll với mình qua gmail: redseatq@gmail.com để cùng trao đổi.

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
Đăng nhập để thực hiện theo  

×