kegiaumat 2 Báo cáo bài đăng Đã đăng Tháng 5 31, 2013 e có một đường pline nhiều đỉnh. em muốn code VBA thực hiện như sau: gọi lệnh -> con trỏ cho phép chọn pline -> mình chỉ vào pline (chỉ vào 1 2 3.. điểm trên pline) -> code sẽ thông báo các đoạn mà mình vừa pick lên pline đó (nếu trong quá trình mình chọn pline mà đoạn pline đó sáng lên được thì tuyệt. Cảm ơn mọi người đã quan tâ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
kegiaumat 2 Báo cáo bài đăng Đã đăng Tháng 6 1, 2013 Hic hic ko ai giúp à thế em hỏi các bác trong VBA có hàm nào giống như trong lisp ko vlax-curve-getParamAtPoint => ? vlax-curve-getClosestPointTo => ? 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
vstran 10 Báo cáo bài đăng Đã đăng Tháng 6 2, 2013 mình cũng đang bị vướng giống bạn vẫn chưa tìm ra hướng giải quyết. tuy nhiên có 1 cách đó là sử dụng hàm này của lisp đê sử dụng trong vba bằng cách sử dụng 2 class curve.cls và vlax.cls Nếu anh em nào có hướng giải quyết vấn đề này bằng vba thì giúp với. hàm tìm 1 điểm gần nhất từ 1 điểm đến 1 polyline (polyline có cả line và arc ) 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 6 3, 2013 Tham khảo code này nhé, Code box diễn đàn lỗi thì phải ? Sub Distan_PointToPL()ThisDrawing.SetVariable "OSMODE", 515Dim C(1) As DoubleDim X() As DoubleDim Y() As DoubleDim m, n, j, i, k, VT As IntegerDim returnPnt As VariantDim Ktra As BooleanDim ktONLINE As BooleanktONLINE = FalseDim varPt As VariantDim oEnt As AcadEntityDim Tim As AcadLWPolylineThisDrawing.Utility.GetEntity oEnt, varPt, vbCr & "Select polyline"If TypeOf oEnt Is AcadLWPolyline Then Set Tim = oEntEnd Ifn = GetVertexCount(Tim) - 1ReDim X(n)ReDim Y(n)For m = 0 To nX(m) = Tim.Coordinates(2 * m) 'Toa do X cua PLY(m) = Tim.Coordinates(2 * m + 1) 'Toa do Y cua PLNext mKtra = Truei = 0k = 0Dim KC As Double'------------------------------------------------------------------------------------------------While Ktra = TrueOn Error GoTo thoat i = i + 1 returnPnt = ThisDrawing.Utility.GetPoint(, vbCrLf & UNC("Pick diem thuoc Polyline ") & i & ":")For m = 0 To n - 1KC = 0ktONLINE = OnLine(X(m), Y(m), X(m + 1), Y(m + 1), returnPnt(0), returnPnt(1))If ktONLINE = True Thenk = m For j = 0 To k - 1 KC = KC + TinhKC(X(j), Y(j), X(j + 1), Y(j + 1)) Next jMsgBox "KC la: " & KC + TinhKC(X(k), Y(k), returnPnt(0), returnPnt(1))End IfNext mWendthoat:'-----------------------------------------------------------------------------------------------End SubFunction OnLine(ByRef x1, ByRef y1, ByRef x2, ByRef y2, ByRef X, ByRef Y) As Boolean 'A(X1, Y1): 'B(X2, Y2) 'M(x, y) thuoc AB 'y = fx = ax + b Dim A, fx As Double Dim dk As Boolean dk = False If (Round(x1, 4) = Round(x2, 4)) And (Round(x2, 4) = Round(X, 4)) Then If (y1 <= Y) And (Y <= y2) Then dk = True ElseIf (y1 >= Y) And (Y >= y2) Then dk = True End If ElseIf (x1 <> x2) Then A = ((y1 - y2) / (x1 - x2)) fx = A * X + (y1 - x1 * A) If (Round(Y, 4) = Round(fx, 4)) Then If (x1 <= X) And (X <= x2) Then dk = True ElseIf (x1 >= X) And (X >= x2) Then dk = True End If End If End If OnLine = dkEnd Function'11.Ham tinh khoang cach giua 2 diem A(x1,y1) va B(x2,y2)Public Function TinhKC(ByRef x1, ByRef y1, ByRef x2, ByRef y2) As Double On Error Resume Next Dim deltaX As Double Dim deltaY As Double deltaX = x2 - x1 deltaY = y2 - y1 TinhKC = (deltaX ^ 2 + deltaY ^ 2) ^ 0.5End 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
vstran 10 Báo cáo bài đăng Đã đăng Tháng 6 10, 2013 Hàm này của bạn chỉ tính được khoảng dài của nhũng polyline gồm những đoạn thẳng thôi, còn của pline có đường cong thì vẫn chưa 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
Anlee 3 Báo cáo bài đăng Đã đăng Tháng 7 23, 2013 ý của bạn là: chon 1 polyline sau đó hiện lên chiều dài của từng đoạn? bạn tham khảo đoạn mã này nhé. co gì sẽ trao đổi thêm Sub PLO()Dim SSetObj As AcadSelectionSetDim Ent As AcadEntityDim CD As DoubleOn Error Resume NextThisDrawing.SelectionSets("ML").DeleteSet SSetObj = ThisDrawing.SelectionSets.Add("ML")SSetObj.SelectOnScreenDim Vall As VariantDim i As IntegerFor Each Ent In SSetObj Vall = Ent.ExplodeNext For i = LBound(Vall) To UBound(Vall) Vall(i).color = acYellow Vall(i).Update If Vall(i).Radius = 0 Then CD = Vall(i).Length Else CD = Vall(i).ArcLength End If MsgBox " Chieu dai doan thang la: " & Round(CD, 2) NextEnd 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