| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > VBA сортировка блоков, выбранных SelectOnScreen

VBA сортировка блоков, выбранных SelectOnScreen

Ответ
Поиск в этой теме
Непрочитано 24.07.2020, 15:22 #1
VBA сортировка блоков, выбранных SelectOnScreen
gizmo_zx
 
Проектировщик ЭО,ЭМ, ЭОС
 
Нижний Новгород
Регистрация: 18.07.2007
Сообщений: 256

Бодрого дня.
Подскажите как отсортировать по координатам X (по горизонтали) блоки выбранные, через SelectOnScreen.

Хотел выдернуть в отдельный массив координатам X, и уникальный номер блока (OwnerID)
У трех блоков OwnerID оказался одинаковым ?


Код:
[Выделить все]
Public Function nnum_select_blocks()
UserForm1.Hide
' poisk bloka po imeni
Dim oSset As AcadSelectionSet
Dim nSset As AcadSelectionSet
Dim oEnt As AcadEntity
Dim oBlkRef As AcadBlockReference
Dim oAtt As AcadAttributeReference
Dim varAtt As Variant
Dim i As Long
Dim ftype(1) As Integer
Dim fdata(1) As Variant
ftype(0) = 0: fdata(0) = "INSERT"
ftype(1) = 66: fdata(1) = 1
Dim dxftype As Variant
Dim dxfdata As Variant
dxftype = ftype
dxfdata = fdata

'
'
'

On Error GoTo Err_Control
''создаем два набора
         With ThisDrawing.SelectionSets
               While .Count > 0
                    .Item(0).Delete
               Wend
          Set nSset = .Add("$Attribs$")
          Set oSset = .Add("$GripTest$")
          End With
          
oSset.SelectOnScreen dxftype, dxfdata
'
'
Dim name_block1, name_block2, name_block_f As String
Dim name_tag1, name_tag2, name_tag_f As String
Dim name_atr1, name_atr2, name_atr_f As String
Dim name_ok1, name_ok2, name_ok3 As Boolean


Dim objAtr
'name_block_f = objBlk
'name_tag_f = Label2.Caption
'name_atr_f = Label3.Caption
'name_ok1 = False
'name_ok2 = False
'name_ok3 = False
'
'If name_block_f = "*" Then
'name_ok1 = True
'End If
'
'If name_tag_f = "*" Then
'name_ok2 = True
'End If
'
'If name_atr_f = "*" Then
'name_ok3 = True
'End If

Dim sovpad1, sovpad2, sovpad3, sovpad4 As Integer

Dim kol_vo As Integer
kol_vo = oSset.Count
Dim mass_block() As String

sovpad1 = 0
For Each oEnt In oSset
    Set oBlkRef = oEnt
    If oBlkRef.IsDynamicBlock And name_block = oBlkRef.EffectiveName Then
        sovpad1 = sovpad1 + 1
    Else
        If name_block = oBlkRef.Name Then
            sovpad1 = sovpad1 + 1
        End If
    End If
Next oEnt

ReDim mass_block(sovpad1 - 1, 5)

'Xpos = tobj.InsertionPoint(0): Ypos = tobj.InsertionPoint(1)
i = 0

For Each oEnt In oSset
    sovpad1 = 0
    Set oBlkRef = oEnt
    If oBlkRef.IsDynamicBlock And name_block = oBlkRef.EffectiveName Then
        mass_block(i, 0) = oBlkRef.OwnerID
        mass_block(i, 1) = oBlkRef.InsertionPoint(0)
        mass_block(i, 2) = oBlkRef.InsertionPoint(1)
        i = i + 1
    Else
                If name_block = oBlkRef.Name Then
                        mass_block(i, 0) = oBlkRef.OwnerID
                        mass_block(i, 1) = oBlkRef.InsertionPoint(0)
                        mass_block(i, 2) = oBlkRef.InsertionPoint(1)
                        i = i + 1
                End If
    End If
Next oEnt

kol_vo = 0
QuickSortArray mass_block, , 2


Err_Control:

UserForm1.show
End Function

Последний раз редактировалось Кулик Алексей aka kpblc, 24.07.2020 в 18:05.
Просмотров: 2872
 
Непрочитано 24.07.2020, 15:25
1 | #2
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,587


OwnerID - Id владельца, а не уникальный номер блока... Вам просто Id нужен
Boxa вне форума  
 
Автор темы   Непрочитано 24.07.2020, 17:43
#3
gizmo_zx

Проектировщик ЭО,ЭМ, ЭОС
 
Регистрация: 18.07.2007
Нижний Новгород
Сообщений: 256
<phrase 1= Отправить сообщение для gizmo_zx с помощью Skype™


использовал .Handle вроде работает.
или лучше использовать .ObjectID?
Просто ID не нашел.
gizmo_zx вне форума  
 
Непрочитано 24.07.2020, 19:29
1 | #4
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,587


Цитата:
Сообщение от gizmo_zx Посмотреть сообщение
использовал .Handle вроде работает.
тож норм. Работает и хорошо.
Boxa вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > VBA сортировка блоков, выбранных SelectOnScreen

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какой язык перспективен для инженера-конструктора с условием The_Mercy_Seat Программирование 705 17.03.2021 14:19
Добавление индекса к именам выбранных блоков Кочетков Андрей Программирование 13 30.08.2018 18:35
Нужен метод автосумирования полей в значениях выбранных атрибутов выбранных динамических блоков adu Программирование 17 24.10.2012 12:57
Подсчет и сортировка блоков на текущем слое. Помогите отредактировать. Kortes Программирование 17 26.03.2010 18:46
Сортировка блоков в алфовитном порядке ERN AutoCAD 4 27.08.2007 23:39