Тема: Как выбрать последнюю построенную линию?

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

Re: Как выбрать последнюю построенную линию?

ThisDrawing.SendCommand "select last "

Re: Как выбрать последнюю построенную линию?

Возможно я некорректно задал вопрос.
линия строится командой с последующим запуском макроса либо лисп-функцией типа:

(defun c:linia ()
(command "line" pause pause "")
(command "vbarun" "MODlin")
)
это макрос:
Sub MODlin()
Dim lin As AcadLine
ThisDrawing.Utility.GetEntity lin, basePnt, ""
lin.Linetype = "hidden"
lin.Layer = "hidden"
lin.Update
End Sub

для выбора предлагается кликнуть по объекту (basePnt), как обойтись без дополнительных мышинных действий, если линия является последним элементом данного чертежа?
Заранее спасибо за ответ

Re: Как выбрать последнюю построенную линию?

Надо создать набор и поместить в него Вашу линию (если Вы действительно уверены, что она создавалась последней).

Dim objSelSet As AcadSelectionSet
objSelSet.Select acSelectionSetLast

Re: Как выбрать последнюю построенную линию?

А как в таком случае быть с типом переменной AcadLine?
Как всё же модифицировать выбранную линию?
А если вместо линии нужно подобным способом модифицировать, например,  размер?
(если не затруднит, приведите более пространный пример)
Спасибо за ответ.

Re: Как выбрать последнюю построенную линию?

Надо соорудить массив из линий. Последний элемент массива и будет порследней нарисованой линией. (мне так кажется)
Т.е. примерно
объект Это акадентити
Для всех объектов в моделспейс
Если обект.имя (может не имя) = Акадлиния То
  ... бла бла бла (сооружаете массив из линий)
   Конец если
Сл. объект
или наверное можно фильтром воспользоваться

Re: Как выбрать последнюю построенную линию?

Наверное можно даже массив не городить просто найти последнюю линию в моделспейс. На самом деле все просто.

Re: Как выбрать последнюю построенную линию?

> Сергей
Поясните, пожалуйста, как Вы собираетесь на VBA

просто найти последнюю линию в моделспейс

> LAA
Какой вопрос, такой и ответ.  Все началось с

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

Я ведь не зря писал, что надо быть увереным, что последним созданным примитивом в чертеже является тот, который нужен.
В таком случае в наборе будет один элемент и в данном случае именно AcadLine.

Re: Как выбрать последнюю построенную линию?

Дополнение.
А доступ к свойствам определенного примитива (в данном случае линии) в таком случае

Dim objLine As AcadLine
Set objLine=objSelSet.Item(0)

Re: Как выбрать последнюю построенную линию?

> bender
Перебрать все примитивы и последний примитив, который AcadLine, и будет последней линией. Наверное, чтобы не заморачиваться можно как-то фильтр использовать. Но я фильтры использовал для SelectionSet скажем для того чтоб только солиды выделить, думаю аналогичным способом можно и все линии вычленить.  А перебрать все примитивы - вообще плевое дело.

Re: Как выбрать последнюю построенную линию?

Вот что-то типа этого

Sub FindLastLine()
    On Error Resume Next
    Dim entity As AcadEntity
    Dim LastLine As AcadLine
    For Each entity In ThisDrawing.ModelSpace
     If entity.ObjectName = "AcDbLine" Then
      Set LastLine = entity
     End If
    Next entity
End Sub

Re: Как выбрать последнюю построенную линию?

Всё, разобрался. Огромное всем спасибо!

Re: Как выбрать последнюю построенную линию?

Сергей пишет:

Перебрать все примитивы и последний примитив, который AcadLine, и будет последней линией

Откуда такая уверенность?
А перебирать все примитивы вообще занятие не благодарное. Наборами надо пользоваться.

Re: Как выбрать последнюю построенную линию?

> bender
Да я и не утверждаю, что это красивое решение - перебирать примитивы. Смысл в том, что надо получить массив из линий и последний элемент массива и будет последней нарисованной линией. Почему я в этом уверен. Не знаю. Это можно империческим путем проверить.