Тема: Подписать полилинию текстом

Необходимо провести полилинию и подписать ее. Комманда полилиния прирывается ескейпом и подписать линию не успеваю т.к. выхожу из макроса. как можно это решить? вот к чему я сейчас пришел.

basePnt = ac.Utility.GetPoint
ac.SendCommand "pl " & basePnt(0) & "," & basePnt(1) & " "
ac.SendCommand "_text " & Replace(basePnt(0), ",", ".") & "," & Replace(basePnt(1), ",", ".") & " " & strTemp & strTemp2

Re: Подписать полилинию текстом

А если попробовать On Error? На уровне идеи на самом деле

Re: Подписать полилинию текстом

я тоже думал над этим (про error) но пока ничего не придумал. если запустить мой код то pl съедает _text пока я рисую линью комманда уже выполнена :(.

Re: Подписать полилинию текстом

Идея у меня идиотская еще одна мелькнула, не знаю, как это сделать на VBA, но тем не менее общий принцип таков:
. Пока PrevPoint = ac.Utility.GetPoint
.. ac.Utility.GetPoint PrevPoint
.. ReDim arPoints
.. Добавить в массив arPoints последнюю точку
. Конец Цикла
. ThisDrawing.AddLightWeightPolyline(arPoints)
. ThisDrawing.AddText ()
Я не уверен, что понятно и правильно объяснил.

Re: Подписать полилинию текстом

> SmeL
А почему не создавть полилинию программно (т.е. не использовать команду _PLINE)? Да и текст можно добавить программно...

Re: Подписать полилинию текстом

> Александр Ривилис
Да я знаю что можно все это программно сделать. не используя SendCommand. Полилинию полюбому нужно строить вручную, а не собирать к примеру у пользователя массив вершин а потом строить. Данная полилиния есть дорога на карте (растерное изображение). Текст это название дороги. Красивее будет если пользователь обведет дорогу а потом ее подпишет.
Пока писал ответ придумал еще одну идейку реализации пошел в азарте пробовать :)

Re: Подписать полилинию текстом

Нет к сожалению мои предположения не увенчались успехом. я предположил что если чертить линию в определенной функции и ждать окончания ее, так же в водит текст в другой функции и вызывать все это в третей. то решится проблема прерывания полилинии по ескейпу и запретить "съедание" комманды _text коммандой pl.Вот к чему я пришел но результат не нравится

Sub aa()
    basePnt = ThisDrawing.Utility.GetPoint
    MsgBox drPL(basePnt)
    MsgBox drTx(basePnt)
End Sub
Public Function drPL(basePnt As Variant) As Integer
 ThisDrawing.SendCommand "pl " & basePnt(0) & "," & basePnt(1) & " "
 Do While ThisDrawing.GetVariable("CMDNAMES") = "PLINE"
  DoEvents
 Loop
 drPL = 1
End Function
Public Function drTx(basePnt As Variant) As Integer
 ThisDrawing.SendCommand "_text " & Replace(basePnt(0), ",", ".") & "," & Replace(basePnt(1), ",", ".") & " 0.01 0 "
 drTx = 2
End Function

Re: Подписать полилинию текстом

> SmeL
Во, как раз вчерась написал для одного другана
похоже, что тоже самое, слегка переделал

          Public Sub DrawRoadLine()
          Dim vpick As Variant
          Dim dCoords() As Double
          Dim I As Long
          Dim oPoly As AcadLWPolyline
          Dim optClose As Boolean
          I = 0
          On Error Resume Next
          vpick = ThisDrawing.Utility.GetPoint(, vbCr & "Pick starting point: ")
If Err = 0 Then
    ReDim dCoords(1)
    dCoords(I) = vpick(0): dCoords(I + 1) = vpick(1)
    Do Until Err.Number <> 0
        I = I + 2
        vpick = ThisDrawing.Utility.GetPoint(vpick, vbCr & "... and next point: ")
        ReDim Preserve dCoords(UBound(dCoords) + 2)
        dCoords(I) = vpick(0): dCoords(I + 1) = vpick(1)
        If oPoly Is Nothing Then
            Set oPoly = ThisDrawing.ModelSpace.AddLightWeightPolyline(dCoords)
        Else
            oPoly.Coordinates = dCoords
        End If
    Loop
          Dim rdText As AcadText
          Dim basePnt(0 To 2) As Double
          Dim nextPnt(0 To 2) As Double
          Dim txtAng As Double
          Dim PI As Double
          PI = Atn(1) * 4
          On Error Resume Next
          Dim strTemp, strTemp1, strTemp2 As String
          basePnt(0) = dCoords(0): basePnt(1) = dCoords(1): basePnt(2) = 0#
          nextPnt(0) = dCoords(2): nextPnt(1) = dCoords(3): nextPnt(2) = 0#
          strTemp1 = "Trassa E-"
          strTemp2 = "95"
          strTemp = strTemp1 & strTemp2
          Set rdText = ThisDrawing.ModelSpace.AddText(strTemp, basePnt, 0.5)
          txtAng = ThisDrawing.Utility.AngleFromXAxis(basePnt, nextPnt)
          Debug.Print txtAng
          If txtAng > PI * 0.5 And txtAng < PI * 1.5 Then
          txtAng = txtAng + PI
          Else: txtAng = txtAng
          End If
          rdText.Rotation = txtAng
          rdText.Alignment = acAlignmentBottomCenter
          rdText.TextAlignmentPoint = basePnt
          rdText.Update
          End If
          End Sub

~'J'~

Re: Подписать полилинию текстом

> Олег(jr.)
Прикольно благодарю!

Re: Подписать полилинию текстом

> SmeL
Согласен слабая попытка, я ж тока учусь...
~'J'~