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

Xác định đỉnh của polyline theo trục tọa độ x và tâm

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

Chào tất cả các bạn,

Mình có đọc 1 số bài viết liên qua đến topic của mình nhưng những bài viết đó không thể áp dụng cho trường hợp của mình. Vấn đề của mình như thế này:

- Mình có 1 polyline và mình muốn xác định 1 đỉnh của polyline này theo hướng trục tọa độ x và tâm cho dù polyline này nằm ở đâu ví dụ như hình dưới đây:

125741_hinh_1.png

Khi mình mình thay đổi UCS thì đỉnh của polyline này được xác định như thế này:

 

125741_hinh2.png

Mình xin chân thành cảm ơn tất cả các bạn, vấn đề này mình đã tìm đủ mọi cách mà vẫn không được.

  • 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

Sorry các bạn, tiêu đề mình đặt nó hơi giống một số tiêu đề đã có trong diễn đàn. Nhưng nội dung thì khác. Mình không biết sửa cái tiêu đề này chỗ nào. Thanks.

  • 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

Nghĩa là mình có 1 polyline. Giờ làm cách nào có thể xác định được đỉnh(StartPoint) của polyline này theo hướng trục toạ độ x và theo tâm. Như hình trên các bạn thấy. StartPoint luôn luôn được xác định theo hướng trục toạ độ x và tâm. Và khi UCS thay đổi thì StartPoint cũng sẽ cũng được xác định theo trục x và tâm. ĐỈNH STARTPOINT ứng với TÂM. Mình xin chân thành cảm ơn.

  • 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

mình hiểu bài toán bạn thế này có đúng không nhé

- ban có một polyline bạn muốn edit nó sao cho đỉnh Startingpoints gần trục Ox và tâm O nhất đúng không nhỉ( tức xóa polyline củ và vẽ một đường polyline mới nhân điểm gần Ox và O nhất làm Startingpoint. Xin lổi mình hơi tối dạ! Nếu đúng như mình hiểu thì mình có thể giúp bạn. Yêu cầu này không khó!

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ình hiểu bài toán bạn thế này có đúng không nhé

- ban có một polyline bạn muốn edit nó sao cho đỉnh Startingpoints gần trục Ox và tâm O nhất đúng không nhỉ( tức xóa polyline củ và vẽ một đường polyline mới nhân điểm gần Ox và O nhất làm Startingpoint. Xin lổi mình hơi tối dạ! Nếu đúng như mình hiểu thì mình có thể giúp bạn. Yêu cầu này không khó!

Hề hề hề,

Cứ theo hình mình họa thì hổng phải vậy mà là điểm startpoin có tọa độ x nhỏ nhất cơ.

Tuy nhiên còn vàui vấn đề mà chủ thớt còn giữ bí mật nên chả biết phải làm như thế nào:

1/- Chiều vẽ của polyline có thay đổi hay không (thuận hay nghịch chiều polyline cũ)

2/- Chủ thớt muốn khi chủ thớt thay đổi hệ trục thì polyline tự động thay đổi điểm startpoint theo hay là khi đó thì lại phải dùng lisp thêm lần nữa ???

Hề hề hề, Ông chủ thớt này oái oăm đáo để......

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

Đồng ý với bác Bình : cứ như hình minh họa thì điểm cần tìm là đỉnh có tọa độ (X,Y) nhỏ nhất theo hệ tọa độ hiện hành.

 

Nhưng càng đọc diễn giải của chủ thớt thì lại càng rối.

V/đề tí tẹo mà chủ thớt không thể diễn đạt bằng văn bản (chắc có chút alcohol thì diễn đạt hay hơn ?!)  :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

Mình nghĩ cái này có thể giúp bạn. Truyền polyline vào: SetLowerLeftAboutUcsAsStartPoint(polyine).


 Private Sub SetLowerLeftAboutUcsAsStartPoint(ByRef pline As Polyline)
        For i As Integer = 0 To GetUcsLowerLeftIndex(pline)
            PermuteVertices(pline)
        Next
    End Sub
    Private Function GetUcsLowerLeftIndex(ByVal pline As Polyline) As Integer
        Dim ed As Editor = AcApp.DocumentManager.MdiActiveDocument.Editor
        Dim ucs As Matrix3d = ed.CurrentUserCoordinateSystem
        Dim bbox As Extents3d = pline.GeometricExtents
        bbox.TransformBy(ucs)
        Dim minPt As Point3d = bbox.MinPoint
        Dim index As Integer = 0
        Dim distance As Double = minPt.DistanceTo(pline.GetPoint3dAt(0).TransformBy(ucs))
        If (distance = 0.0) Then
            Return 0
        End If
        For i As Integer = 1 To pline.NumberOfVertices - 1

            Dim d As Double = minPt.DistanceTo(pline.GetPoint3dAt(i).TransformBy(ucs))
            If (distance = 0.0) Then
                Return i
            End If

            If (d < distance) Then
                distance = d
                index = i
            End If
        Next
        Return index
    End Function

    Private Sub PermuteVertices(ByVal pline As Polyline)
        Dim lastIndex As Integer = pline.NumberOfVertices - 1
        Dim pt As Point2d = pline.GetPoint2dAt(0)
        Dim bulge As Double = pline.GetBulgeAt(0)
        Dim startWidth As Double = pline.GetStartWidthAt(0)
        Dim endWidth As Double = pline.GetEndWidthAt(0)
        For i As Integer = 0 To lastIndex - 1

            pline.SetPointAt(i, pline.GetPoint2dAt(i + 1))
            pline.SetBulgeAt(i, pline.GetBulgeAt(i + 1))
            pline.SetStartWidthAt(i, pline.GetStartWidthAt(i + 1))
            pline.SetEndWidthAt(i, pline.GetEndWidthAt(i + 1))

        Next
        pline.SetPointAt(lastIndex, pt)
        pline.SetBulgeAt(lastIndex, bulge)
        pline.SetStartWidthAt(lastIndex, startWidth)
        pline.SetEndWidthAt(lastIndex, endWidth)
        '  pline.ColorIndex = lastIndex

    End Sub
  • 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

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  

×