Тема: Как выбрать последнюю построенную линию?
Линия строится командой _line и является последним элементом чертежа. Как средствами vba выбрать эту линию как AcADLine не указывая ее дополнительно мышью.
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → VBA → Как выбрать последнюю построенную линию?
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Линия строится командой _line и является последним элементом чертежа. Как средствами vba выбрать эту линию как AcADLine не указывая ее дополнительно мышью.
ThisDrawing.SendCommand "select last "
Возможно я некорректно задал вопрос.
линия строится командой с последующим запуском макроса либо лисп-функцией типа:
(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), как обойтись без дополнительных мышинных действий, если линия является последним элементом данного чертежа?
Заранее спасибо за ответ
Надо создать набор и поместить в него Вашу линию (если Вы действительно уверены, что она создавалась последней).
Dim objSelSet As AcadSelectionSet objSelSet.Select acSelectionSetLast
А как в таком случае быть с типом переменной AcadLine?
Как всё же модифицировать выбранную линию?
А если вместо линии нужно подобным способом модифицировать, например, размер?
(если не затруднит, приведите более пространный пример)
Спасибо за ответ.
Надо соорудить массив из линий. Последний элемент массива и будет порследней нарисованой линией. (мне так кажется)
Т.е. примерно
объект Это акадентити
Для всех объектов в моделспейс
Если обект.имя (может не имя) = Акадлиния То
... бла бла бла (сооружаете массив из линий)
Конец если
Сл. объект
или наверное можно фильтром воспользоваться
Наверное можно даже массив не городить просто найти последнюю линию в моделспейс. На самом деле все просто.
> Сергей
Поясните, пожалуйста, как Вы собираетесь на VBA
просто найти последнюю линию в моделспейс
> LAA
Какой вопрос, такой и ответ. Все началось с
Линия строится командой _line и является последним элементом чертежа. Как средствами vba выбрать эту линию как AcADLine не указывая ее дополнительно мышью.
Я ведь не зря писал, что надо быть увереным, что последним созданным примитивом в чертеже является тот, который нужен.
В таком случае в наборе будет один элемент и в данном случае именно AcadLine.
Дополнение.
А доступ к свойствам определенного примитива (в данном случае линии) в таком случае
Dim objLine As AcadLine Set objLine=objSelSet.Item(0)
> bender
Перебрать все примитивы и последний примитив, который AcadLine, и будет последней линией. Наверное, чтобы не заморачиваться можно как-то фильтр использовать. Но я фильтры использовал для SelectionSet скажем для того чтоб только солиды выделить, думаю аналогичным способом можно и все линии вычленить. А перебрать все примитивы - вообще плевое дело.
Вот что-то типа этого
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
Всё, разобрался. Огромное всем спасибо!
Перебрать все примитивы и последний примитив, который AcadLine, и будет последней линией
Откуда такая уверенность?
А перебирать все примитивы вообще занятие не благодарное. Наборами надо пользоваться.
> bender
Да я и не утверждаю, что это красивое решение - перебирать примитивы. Смысл в том, что надо получить массив из линий и последний элемент массива и будет последней нарисованной линией. Почему я в этом уверен. Не знаю. Это можно империческим путем проверить.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → VBA → Как выбрать последнюю построенную линию?
Форум работает на PunBB, при поддержке Informer Technologies, Inc