Тема: Интерактивный ввод полилинии

Здравствуйте
Подскажите есть ли возможность на VBA интерактивно вводить полилинию.
Т.е. необходимо вводить полилинию также как и AutoCad'е
НО количество вершин заранее задано
ЗЫ сори за поток сознания

Re: Интерактивный ввод полилинии

> AnteC
Помню что писал раньше аналог Автокадовской команды
но не смог найти в своих загашниках
Этот вариант точно более громоздкий и немного
не то, но вроде работает
Если надо изменить на облегченную полилинию
измени размерность вводимых координат

Option Explicit
'' based on Tony Tanzillo's technic
'' request check "Break on Unhandled Errors" in  General options
Public Sub InterPline()
Dim oPline As AcadPolyline
Dim dblPts(5) As Double
Dim strPropmpt As String
strPropmpt = vbCrLf & "Specify first point: "
Dim pickPt As Variant
Dim vexNum As Integer
Dim Counter As Integer
Counter = 0
vexNum = CInt(InputBox(vbCrLf & "Number Of Vertices:", "Draw Pline Interactively"))
Do While Counter < vexNum
On Error Resume Next
pickPt = ThisDrawing.Utility.GetPoint(, strPropmpt)
If Counter = 0 Then
dblPts(0) = pickPt(0): dblPts(1) = pickPt(1): dblPts(2) = pickPt(2)
dblPts(3) = pickPt(0): dblPts(4) = pickPt(1): dblPts(5) = pickPt(2)
Set oPline = ThisDrawing.ModelSpace.AddPolyline(dblPts)
ElseIf Counter = 1 Then
oPline.Coordinate(Counter) = pickPt
Else
oPline.AppendVertex pickPt
End If
oPline.Update
If Err Then
Err.Clear
Exit Do
End If
On Error GoTo 0
Counter = Counter + 1
strPropmpt = vbCrLf & "Specify next point: "
Loop
On Error GoTo 0
End Sub

~'J'~

Re: Интерактивный ввод полилинии

Fatty
Спасибо, но это немного не то...
Хочется именно интерактивность в том, чтобы при указании последующей точки полилиния "тянулась" за курсором

Re: Интерактивный ввод полилинии

> AnteC
Вот с трудом нашел о чем говорил, просто
добавь счетчик на количество вершин, можешь
по аналогии с вышеприведенной процедурой

Option Explicit
Public Sub DynPolyline()
' draw lwpolyline interactively
Dim pickPt As Variant
Dim dblCoors() As Double
Dim i As Long
Dim oPoly As AcadLWPolyline
i = 0
On Error Resume Next
pickPt = ThisDrawing.Utility.GetPoint(, vbCr & "First point: ")
If Err = 0 Then
    ReDim dblCoors(1)
    dblCoors(i) = pickPt(0): dblCoors(i + 1) = pickPt(1)
    Do Until Err.Number <> 0
        i = i + 2
        pickPt = ThisDrawing.Utility.GetPoint(pickPt, vbCr & "Pick next point or press Enter to stop: ")
        ReDim Preserve dblCoors(UBound(dblCoors) + 2)
        dblCoors(i) = pickPt(0): dblCoors(i + 1) = pickPt(1)
        If oPoly Is Nothing Then
            Set oPoly = ThisDrawing.ModelSpace.AddLightWeightPolyline(dblCoors)
        Else
            oPoly.Coordinates = dblCoors
        End If
    Loop
    Dim lngResp As Long
    lngResp = MsgBox("Do you want to close polyline?", vbYesNo, "Close Mode")
    If lngResp = 6 Then
    oPoly.Closed = True
    End If
End If
End Sub

~'J'~

Re: Интерактивный ввод полилинии

Fatty
Большое спасибо это именно то, что нужно

Re: Интерактивный ввод полилинии

> AnteC
Успехов :)
~'J'~