Тема: SelectOnScreen

Выбор объектов на экране происходит по формату:
SelectionSet.SelectOnScreen [FilterType][, FilterData]
Что такое FilterType и FilterData? Мне нужно отобрать BlockRefs и изменить их координаты.

Re: SelectOnScreen

Посмотрел вот Example к функции SelectAtPoint, и наваял нечто:

Sub Example_SelectOnScreen()
    ' Create the selection set
    Dim ssetObj As AcadSelectionSet
    Set ssetObj = ThisDrawing.SelectionSets.Add("TEST_SSET")
    ' Add objects to a selection set by prompting user to select on the screen
    Dim gpCode(0) As Integer
    Dim dataValue(0) As Variant
    gpCode(0) = 0
    dataValue(0) = "INSERT"
    Dim groupCode As Variant, dataCode As Variant
    groupCode = gpCode
    dataCode = dataValue
    ssetObj.SelectOnScreen groupCode, dataCode
    MsgBox ssetObj.Count
    ThisDrawing.SelectionSets.Item("TEST_SSET").Delete
    Set ssetObj = Nothing
End Sub

Теперь вопрос ко всем: можно ли в бейсике сделать сложный выбор, как в лиспе на (ssget) с расширенным фильтром (см. примеры здесь https://www.caduser.ru/forum/topic15231.html)

Re: SelectOnScreen

На днях было https://www.caduser.ru/forum/topic15165.html

Re: SelectOnScreen

Сделать можно. Проблемма в том, что в VBA не берётся SelectionSet по Handle. А в VB срабатывает. Но если не учитывать Handle, то такой SelectionSet можно написать.
Кстати сделай такую функцию и каждый раз перед созданием своего SelectionSet-а запускай её, передавая ей имя твоего SelectionSet-а.
Sub CleanSelSet(name_set)
    Dim i As Integer
    Dim a As Integer
    a = -1
        For i = 0 To ThisDrawing.SelectionSets.Count - 1
            If name_set = ThisDrawing.SelectionSets.Item(i).Name Then
            a = i
            End If
        Next i
        If a >= 0 Then
            ThisDrawing.SelectionSets.Item(a).Delete
        End If
End Sub

Re: SelectOnScreen

2Vig11:
зачем в цикле for беребирать до упора всю коллекцию?
можно проще:
https://www.caduser.ru/forum/topic13110.html