Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
10 replies to this topic

#1 lamchivinh

lamchivinh

    biết zoom

  • Members
  • Pip
  • 11 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 27 December 2013 - 01:37 PM

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.


  • 1

#2 lamchivinh

lamchivinh

    biết zoom

  • Members
  • Pip
  • 11 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 27 December 2013 - 04:18 PM

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.


  • 1

#3 lamchivinh

lamchivinh

    biết zoom

  • Members
  • Pip
  • 11 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 27 December 2013 - 05:08 PM

Khi thay đổi UCS thì toạ độ các đỉnh không thay đổi.


  • 1

#4 hoanguct

hoanguct

    biết vẽ line

  • Members
  • PipPip
  • 23 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 27 December 2013 - 05:42 PM

muốn giúp bạn nhưng mình vẩn chưa hiểu lắm về bài toán. bạn nói rỏ hơn được không ?


  • 0

#5 lamchivinh

lamchivinh

    biết zoom

  • Members
  • Pip
  • 11 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 28 December 2013 - 06:03 PM

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.


  • 1

#6 lamchivinh

lamchivinh

    biết zoom

  • Members
  • Pip
  • 11 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 30 December 2013 - 08:59 AM

Các bạn vẫn không hiểu ý mình sao ? hic.


  • 0

#7 hoanguct

hoanguct

    biết vẽ line

  • Members
  • PipPip
  • 23 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 30 December 2013 - 10:35 AM

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


  • 0

#8 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6007 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 30 December 2013 - 02:41 PM

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 để......


  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#9 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 30 December 2013 - 03:06 PM

Đồ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


  • 0

#10 hoathuongphuoc

hoathuongphuoc

    biết lệnh erase

  • Members
  • PipPipPip
  • 102 Bài viết
Điểm đánh giá: 9 (bình thường)

Đã gửi 31 December 2013 - 10:41 AM

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

  • 1

#11 lamchivinh

lamchivinh

    biết zoom

  • Members
  • Pip
  • 11 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 02 January 2014 - 09:08 AM

Thanks bạn, nhưng có vẻ không đúng. 


  • 0