ks_chang 2 Báo cáo bài đăng Đã đăng Tháng 12 14, 2012 Hi, chào các bác! Các bác có thể giúp em thuật toán tạo các đường BOUNDARY (lệnh BO trong Cad) bằng VBA với? Kiểu như select một loạt đối tượng (Line, Arc, Cicle...) và tạo ra các BOUNDARY trong các miền được hình thành bởi các đường này. Thanks nhiề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
garupro 7 Báo cáo bài đăng Đã đăng Tháng 12 14, 2012 Trong VBA mình thấy có BOUNDARY nhưng lại không thấy cách để tạo ra nó .Lên đành sử dụng SendCommand , đưa tọa độ thuộc 1 vùng kín vào , và ta lấy đối tượng được tạo ra sau cùng của bản vẽ .Bạn tham khảo thử : Tạo Region : Function Taoregion(x As Double, y As Double) As AcadRegion ThisDrawing.SendCommand ("-Boundary" & vbCr & "A" & vbCr & "o" & vbCr & "R" & vbCr & vbCr & x & "," & y & vbCr & vbCr) Set Taoregion = ThisDrawing.ModelSpace.Item(ThisDrawing.ModelSpace.count - 1) End Function Tạo Polyline Function Taopolyline(x As Double, y As Double) As AcadLWPolyline ThisDrawing.SendCommand ("-Boundary" & vbCr & "A" & vbCr & "o" & vbCr & "P" & vbCr & vbCr & x & "," & y & vbCr & vbCr) Set Taopolyline = ThisDrawing.ModelSpace.Item(ThisDrawing.ModelSpace.count - 1) End Function 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
ks_chang 2 Báo cáo bài đăng Đã đăng Tháng 12 15, 2012 Thanhks bác garupro, em đã làm được theo hướng dẫn của bác Cho em hỏi thêm về cách xác định tọa độ: - Giả sử em có 1 polyline kín, có cách nào để biết 1 điểm cho trước có thuộc trên, trong hay ngoài đường polyline đó không ạ? 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
garupro 7 Báo cáo bài đăng Đã đăng Tháng 12 15, 2012 Cái vụ này mình không biết có phương pháp nào hay hơn nhanh hơn để làm không , nhưng mình có phương pháp như thế này , đi đường vòng thui : Thứ nhất điểm đó nằm trên Pline : Pline thực chất là các Line ghép lại mà thành . Để xác định nó có thuộc không bạn chỉ cần xét tất cả các line đó là được (Bạn duyệt 2 điểm 1 của Pline , viết PT đường thẳng rùi xét nó có thuộc không thui) Còn vấn đề nằm trong hay nằm ngoài : Thì hơi khó . bạn thử giải quyết theo cách này xem .Dùng chính hàm tạo Boundary ở trên để tạo 1 Pline . Sau đó so sánh thằng Pline đó với thằng này (Diện tích chẳng hạn) thì bạn biết ngay nó nằm trong hay nằm ngoài mà (nằm trong đương nhiên ta dược 1 pline y xì thằng đang xét , còn nằm ngoài có thể có Pline khác or không . Va đương nhiên thằng đó sẽ khác thằng đang xét .Cũng có thể xảy ra trường hợp giống nhau , nhưng rất ít , và cách này chỉ áp dụng với Pline khép kín thui ) . Bạn nghiên cứu thử xem , mình cũng chưa có thử . Chúc bạn thành công 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
ks_chang 2 Báo cáo bài đăng Đã đăng Tháng 12 17, 2012 Hi, bác garupro Phương pháp của bác để xác định một điểm cho trước có thuộc hay không thuộc một vùng điện tích cho trước (bằng ranh giới Pline kín) có vẻ không khả thi lắm. Em đang loay hoay theo phuong pháp hình học về đường: - Xac định các hàm đường thẳng trên Pline (ax+by=0), tiếp theo là xác định các điểm cho trước nằm trên hay dưới các đường này Nhưng vẫn lúng túng cho 1 Pline kín bất kì vì thường bài toán tìm miền diện tích xác dịnh bởi các đường thẳng là bài toán xuô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
anhcos 196 Báo cáo bài đăng Đã đăng Tháng 12 17, 2012 Nếu biết trước 1 điểm và 1 Polyline, bạn tìm giao giữa PL và nửa đường thẳng bất kỳ có một đầu tại điểm đó bằng hàm IntersectWith. Nếu số điểm giao là lẻ thì điểm nằm trong, nếu số giao chẵn là điểm nằm ngoài vùng kín. Tuy nhiên vẫn có ngoại lệ, khi có các điểm tiếp xúc, vì vậy phương án đơn giản nhất là tìm giao giữa PL với 3 đường thẳng bất kỳ qua điểm đó. Trong 4r cũng có bài nói về phần này, nhưng mình chẳng theo dõi hết nên không biết KQ cuối cùng. 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
Doan Van Ha 3.171 Báo cáo bài đăng Đã đăng Tháng 12 17, 2012 Nếu pline không chứa arc thì có thể dùng thêm cách này: 1). Chọn đối tượng kiểu "fence" qua các đỉnh pline. 2). Chọn đối tượng kiểu "wp" qua các đỉnh pline. Xét: Nếu điểm nằm trong pline thì nó được chọn với trường hợp 2 và không được chọn với trường hợp 1. Nếu điểm nằm trên pline thì nó được chọn với trường hợp 1 và không được chọn với trường hợp 2. Nếu điểm nằm ngoài thì nó không được chọn với cả 2 trường hợ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
ks_chang 2 Báo cáo bài đăng Đã đăng Tháng 12 18, 2012 Cả 2 phương pháp của bác anhcos và bác Doan Van Ha rất hay, thanks 2 bác Em thấy cách của bác Doan Van Ha có vẻ đơn giản hơn: - Đầu tiên là tạo ra 1 point cho trước - Sau đó sử dụng phép select: SelectByPolygon Mode, PointsList[, FilterType][, FilterData] với: + Pointlist là các đỉnh Pline + Mode sẽ được chọn theo các trường hợp: acSelectionSetFence, acSelectionSetWindowPolygon, acSelectionSetCrossingPolygon + [, FilterType][, FilterData] sẽ được lọc theo điềhu kiện tạo ra điểm cho trước Một lần nữa thanks các bác đã quan tâm, diễn đàn rất bổ ích cho các anh em! 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
NguyenNgocSon 43 Báo cáo bài đăng Đã đăng Tháng 8 10, 2015 Sub Are_Object() 'Bo loc text ten coc Dim ssx As AcadSelectionSet Dim ftype(0) As Integer, fdata(0) Set ssx = CreateSelectionSet("Texttencon") ftype(0) = 0: fdata(0) = "Polyline" ssx.SelectOnScreen ftype, fdata Dim intpt As Variant, pstr As String intpt = ThisDrawing.Utility.GetPoint(, "Pick the inner point of boundary") '(command "BOUNDARY" "a" "b" "n" ss "" "" x "") Dim X As Double, Y As Double X = intpt(0): Y = intpt(1) ThisDrawing.SendCommand ("-Boundary" & vbCr & "A" & vbCr & "B" & vbCr & "N" & vbCr & vbCr & ssx & X & "," & Y & vbCr & vbCr) End Sub Xin phép hỏi các bác Vấn đề tạo Boundary bằng lisp cho các đối tương chọn mình đã nhờ Bác ĐVH làm ổn rồi Mình thử chuyển sang VBA bằng code trên thi chưa được Mong bác nào đã từng làm qua VBA chỉ giáo Trân trọng ! 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