Рисуем названия блоков из модели на листе
Пример без нормальных проверок, зато наглядно и просто показывает как указать объект модели из листа и нарисовать в листе имя указанного пользователем блока.
Смущает одно, Thisdrawing.ActivePviewport указывает на вьюпорт, который пользователь видит в данный момент, а если вьюпортов на лайоте несколько, то у казывает на тот, который был выделен ранее или занимает весь экран. Это удобно, но будет ли работать всегда так хорошо? (Пробуется это на ACAD2005)
Вопрос знатокам: как не заставлять пользователя сначала указывать нужный вьюпорт, а потом уже тыкать нужный блок?
Можно как-то за один клик и определить нужный вьюпорт, и выбрать в нем объект?
(В голову приходят только вычурные решения по перехвату координат курсора и имитации двух кликов от юзера)
Sub DrawBlockName()
Dim returnObj As AcadObject
Dim basePnt As Variant
On Error GoTo finish
ThisDrawing.ActivePViewport.Display True
ThisDrawing.MSpace = True
ThisDrawing.Utility.GetEntity returnObj, basePnt, "Select an object"
ThisDrawing.MSpace = False
basePnt = ThisDrawing.Utility.GetPoint(, "Specify text [" & returnObj.Name & "] insertion point")
ThisDrawing.PaperSpace.AddText returnObj.Name, basePnt, 3
finish:
ThisDrawing.MSpace = False
If Err <> 0 Then
Err.Clear
MsgBox "Program ended." & Err.Description, , "GetEntity Example"
Exit Sub
Else
returnObj.Update
MsgBox "The object type is: " & returnObj.Name, , "GetEntity Example"
returnObj.Update
End If
End Sub