Đến nội dung


Hình ảnh
5 stars - based on 24598 reviews
- - - - -

Hỏi Về Getboundingbox Trong Autocad.net


  • Please log in to reply
7 replies to this topic

#1 redsea_tq

redsea_tq

    biết lệnh erase

  • Members
  • PipPipPip
  • 107 Bài viết
Điểm đánh giá: 13 (tàm tạm)

Đã gửi 04 December 2016 - 02:42 AM

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.


  • 0

#2 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1452 Bài viết
Điểm đánh giá: 1434 (rất tốt)

Đã gửi 04 December 2016 - 01:42 PM

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?!


Bài viết đã được chỉnh sửa nội dung bởi gia_bach: 04 December 2016 - 09:45 PM

  • 1

#3 redsea_tq

redsea_tq

    biết lệnh erase

  • Members
  • PipPipPip
  • 107 Bài viết
Điểm đánh giá: 13 (tàm tạm)

Đã gửi 04 December 2016 - 09:54 PM

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

  • 0

#4 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1452 Bài viết
Điểm đánh giá: 1434 (rất tốt)

Đã gửi 05 December 2016 - 09:01 AM

 

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 ?


  • 0

#5 quansla

quansla

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 662 Bài viết
Điểm đánh giá: 231 (khá)

Đã gửi 05 December 2016 - 09:02 AM

 

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!


  • 0

#6 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1452 Bài viết
Điểm đánh giá: 1434 (rất tốt)

Đã gửi 05 December 2016 - 01:33 PM

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.c...88-autocad-net/


  • 0

#7 redsea_tq

redsea_tq

    biết lệnh erase

  • Members
  • PipPipPip
  • 107 Bài viết
Điểm đánh giá: 13 (tàm tạm)

Đã gửi 05 December 2016 - 02:30 PM

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.


  • 0

#8 redsea_tq

redsea_tq

    biết lệnh erase

  • Members
  • PipPipPip
  • 107 Bài viết
Điểm đánh giá: 13 (tàm tạm)

Đã gửi 05 December 2016 - 02:57 PM

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.


  • 0