hoathuongphuoc 9 Báo cáo bài đăng Đã đăng Tháng 11 11, 2013 Chào các bạn, Các bạn cho mình hỏi, sau khi mình lấy được đường bound của hình chữ nhật rồi. Thì có cách nào lấy được tọa độ của các đỉnh hình chữ nhật bằng .net không. Mình xin cảm ơn. 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
gia_bach 1.531 Báo cáo bài đăng Đã đăng Tháng 11 11, 2013 Cách thì có. Nhưng bạn cần post code (project) của bạn lên forum thì mọi người mới có thể hướng dẫn được. Hỏi chung chung như vậy không có ai giúp được đâu. (mắc công mọi người xả xì-trét rồi lại mang tiếng sỉ nhục gì gì đó ...) Chú ý là đối với file cad cần saveAs xuống version Cad2007 hoặc 2004 cho những người ko cài Cad 2013 như bạn vẫn có thể đọc được. 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
hoathuongphuoc 9 Báo cáo bài đăng Đã đăng Tháng 11 11, 2013 Mình xin gửi project và file autocad. Vấn đề mới phát sinh là: Lúc đầu mình tự vẽ ra 1 hình bất kỳ(hình này được tạo ra từ 4 line hoặc nhiều hơn). Sau đó click chuột vào bên trong hình đó. Thì mình lấy được đường bound. Nhưng khi mình mở file autocad(Có đính kèm) thì lại không thể lấy được đường bound (Trong file autocad bao gồm nhiều hình được đánh số từ 1 đến...). Mình mong các bạn hướng dẫn cách lây toạ độ các đỉnh của các hình trong file này. Mình xin cảm ơn. 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
hoathuongphuoc 9 Báo cáo bài đăng Đã đăng Tháng 11 11, 2013 Vấn đề này mình nghĩ rất khó.Và đã tìm hiểu rất lâu nhưng vẫn chưa ra. 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
gia_bach 1.531 Báo cáo bài đăng Đã đăng Tháng 11 12, 2013 Mình xin gửi project và file autocad. Vấn đề mới phát sinh là: Lúc đầu mình tự vẽ ra 1 hình bất kỳ(hình này được tạo ra từ 4 line hoặc nhiều hơn). Sau đó click chuột vào bên trong hình đó. Thì mình lấy được đường bound. Nhưng khi mình mở file autocad(Có đính kèm) thì lại không thể lấy được đường bound (Trong file autocad bao gồm nhiều hình được đánh số từ 1 đến...). Mình mong các bạn hướng dẫn cách lây toạ độ các đỉnh của các hình trong file này. Mình xin cảm ơn. .................. Hỏi hơi "ngu" một chút : 1. Sau khi lấy được đường bound, bạn có save file Cad lại không ? 2. Trong code bạn khai báo : Dim ModelSpaceId As ObjectId = SymbolUtilityServices.GetBlockModelSpaceId(db) nghĩa là bạn sẽ làm việc trên ModelSpace vậy thì chạy lệnh tst bạn cliclk chuột trong model hay Layout ? Tôi đã test code của bạn, khi làm việc trên model thì tạo được đường boun. Hãy thử chạy lại 1 lần nữa trên model xem sao ? (nếu có ý định hỏi model hay layout là gì ? thì hãy học Cad trước khi lập trình) 3. Trong t/hợp muốn code lúc nào cũng làm việc được trên model lẫn layout thì sử dụng đoạn code sau : <CommandMethod("tst")> Public Sub helloword() Dim doc As Document = Application.DocumentManager.MdiActiveDocument Dim db As Database = doc.Database Dim ed As Editor = doc.Editor Dim ptpoint As New PromptPointOptions("Select point") ptpoint.AllowNone = False Dim ptResult As PromptPointResult = ed.GetPoint(ptpoint) If (ptResult.Status <> PromptStatus.OK) Then Return End If Dim collections As DBObjectCollection = ed.TraceBoundary(ptResult.Value, True) Using tx As Transaction = db.TransactionManager.StartTransaction() Dim btr As BlockTableRecord = tx.GetObject(db.CurrentSpaceId, OpenMode.ForWrite) For Each obj As DBObject In collections Dim ent As Entity = TryCast(obj, Entity) If ent IsNot Nothing Then ' make the coler as red ent.ColorIndex = 1 btr.AppendEntity(ent) tx.AddNewlyCreatedDBObject(ent, True) End If Next tx.Commit() End Using End Sub Dùng hàm sau khi chỉ cần xuất thông tin đường bao ra cửa sổ Cad : <CommandMethod("read")> Public Sub Read() Dim doc As Document = Application.DocumentManager.MdiActiveDocument Dim db As Database = doc.Database Dim ed As Editor = doc.Editor Dim ptpoint As New PromptPointOptions("Select point") ptpoint.AllowNone = False Dim ptResult As PromptPointResult = ed.GetPoint(ptpoint) If (ptResult.Status <> PromptStatus.OK) Then Return End If Dim collections As DBObjectCollection = ed.TraceBoundary(ptResult.Value, True) Using tx As Transaction = db.TransactionManager.StartTransaction() For Each obj As DBObject In collections Dim pline As Polyline = TryCast(obj, Polyline) If pline IsNot Nothing Then ed.WriteMessage(Environment.NewLine + "Diện tích boundary = " + pline.Area.ToString() _ + Environment.NewLine + "Số đỉnh = " + pline.NumberOfVertices.ToString() _ + Environment.NewLine + "Tọa độ các đỉnh : ") Dim i As Integer = 0 For i = 0 To pline.NumberOfVertices - 1 ed.WriteMessage(System.Environment.NewLine + pline.GetPoint2dAt(i).ToString()) Next End If Next End Using End Sub PS: có mod nào đi qua, move bài này qua Topic : Lập trình điều khiển AutoCad từ bên ngoài giùm. Tks. <CommandMethod("read")> Public Sub Read() Dim doc As Document = Application.DocumentManager.MdiActiveDocument Dim db As Database = doc.Database Dim ed As Editor = doc.Editor Dim ptpoint As New PromptPointOptions("Select point") ptpoint.AllowNone = False Dim ptResult As PromptPointResult = ed.GetPoint(ptpoint) If (ptResult.Status <> PromptStatus.OK) Then Return End If Dim collections As DBObjectCollection = ed.TraceBoundary(ptResult.Value, True) Using tx As Transaction = db.TransactionManager.StartTransaction() For Each obj As DBObject In collections Dim pline As Polyline = TryCast(obj, Polyline) If pline IsNot Nothing Then ed.WriteMessage(Environment.NewLine + "Diện tích boundary = " + pline.Area.ToString() _ + Environment.NewLine + "Số đỉnh = " + pline.NumberOfVertices.ToString() _ + Environment.NewLine + "Tọa độ các đỉnh : ") Dim i As Integer = 0 For i = 0 To pline.NumberOfVertices - 1 ed.WriteMessage(System.Environment.NewLine + pline.GetPoint2dAt(i).ToString()) Next End If Next End Using <CommandMethod("read")> Public Sub Read() Dim doc As Document = Application.DocumentManager.MdiActiveDocument Dim db As Database = doc.Database Dim ed As Editor = doc.Editor Dim ptpoint As New PromptPointOptions("Select point") ptpoint.AllowNone = False Dim ptResult As PromptPointResult = ed.GetPoint(ptpoint) If (ptResult.Status <> PromptStatus.OK) Then Return End If Dim collections As DBObjectCollection = ed.TraceBoundary(ptResult.Value, True) Using tx As Transaction = db.TransactionManager.StartTransaction() For Each obj As DBObject In collections Dim pline As Polyline = TryCast(obj, Polyline) If pline IsNot Nothing Then ed.WriteMessage(Environment.NewLine + "Diện tích boundary = " + pline.Area.ToString() _ + Environment.NewLine + "Số đỉnh = " + pline.NumberOfVertices.ToString() _ + Environment.NewLine + "Tọa độ các đỉnh : ") Dim i As Integer = 0 For i = 0 To pline.NumberOfVertices - 1 ed.WriteMessage(System.Environment.NewLine + pline.GetPoint2dAt(i).ToString()) Next End If Next End Using 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
hoathuongphuoc 9 Báo cáo bài đăng Đã đăng Tháng 11 12, 2013 Sau khi lấy được đường bound, bạn có save file Cad lại không ? Không bạn. Mình chỉ truy xuất thông tin và việc lưu file cad chỉ thực hiện khi mình đánh số cho từng hình trong file(Như bạn đã thấy). Trong code bạn khai báo : Dim ModelSpaceId As ObjectId = SymbolUtilityServices.GetBlockModelSpaceId(db) nghĩa là bạn sẽ làm việc trên ModelSpace vậy thì chạy lệnh tst bạn cliclk chuột trong model hay Layout ? Tôi đã test code của bạn, khi làm việc trên model thì tạo được đường boun. Hãy thử chạy lại 1 lần nữa trên model xem sao ? Mình muốn làm cả 2. Mình có thắc mắc. Trong file autocad. Có một sô hình vuông bị một vài đường thẳng cắt ngang. Những đường thẳng này thuộc layer khác. Vậy có cách nào thực hiện cho các các hình cùng thuộc 1 layer không. Nghĩa là khi click vào những hình đó thì những đường thẳng kia không bị ảnh hưởng gì. Mình xin cảm ơn. 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
gia_bach 1.531 Báo cáo bài đăng Đã đăng Tháng 11 12, 2013 .... Mình có thắc mắc. Trong file autocad. Có một sô hình vuông bị một vài đường thẳng cắt ngang. Những đường thẳng này thuộc layer khác. Vậy có cách nào thực hiện cho các các hình cùng thuộc 1 layer không. Nghĩa là khi click vào những hình đó thì những đường thẳng kia không bị ảnh hưởng gì. Mình xin cảm ơn. Vấn đề này liên quan đến kỹ năng drafting trong Cad. Các lệnh Cad liên quan : Layfrz, layoff, layiso .. bạn có thể tìm hiểu các bài viết về tính năng của các lệnh này trong CadViet. 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
hoathuongphuoc 9 Báo cáo bài đăng Đã đăng Tháng 11 12, 2013 Mình xin cảm ơn bạ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
hoathuongphuoc 9 Báo cáo bài đăng Đã đăng Tháng 11 18, 2013 Bạn gia_bach cho mình hỏi chút. Cái đoạn code của bạn mình chạy khá tốt trên model nhưng khi trên layout. Nó lại không chạy được. Có phải do cái file autocad của mình không. Mong bạn giải đáp giúp mình. Mình xin cảm ơn. 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
gia_bach 1.531 Báo cáo bài đăng Đã đăng Tháng 11 18, 2013 Bạn gia_bach cho mình hỏi chút. Cái đoạn code của bạn mình chạy khá tốt trên model nhưng khi trên layout. Nó lại không chạy được. Có phải do cái file autocad của mình không. Mong bạn giải đáp giúp mình. Mình xin cảm ơn. Không phải là "trên Layout không chạy được", chính xác phải là "trên Layout đôi khi không chạy được" Khi chạy trên Layout : - code trên "chỉ chạy được" khi đối tượng cần lấy đường bao thuộc Layout đang active. - t/hợp đối tượng cần lấy đường bao nằm trên Model thì không chạy được. Khi chạy trên Model, vì chỉ "nhìn thấy" các đối tượng trên Model và không "nhìn thấy" các đối tượng trên Layout nên "xem như" lúc nào cũng lấy được đường bao. Qui luật này tương tự như lệnh Hatch. 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