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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как получить свойства item SelectionSets (VBA)

Как получить свойства item SelectionSets (VBA)

Ответ
Поиск в этой теме
Непрочитано 29.09.2015, 15:39 #1
Как получить свойства item SelectionSets (VBA)
doctorraz
 
электрик
 
Волгоград
Регистрация: 19.02.2010
Сообщений: 2,299

В коде ниже я выбираю в коллекцию все линии документа. (линии для примера, пытаюсь ковырять прокси, с энаблером)
и потом идет перебор свойств.

Код:
[Выделить все]
Sub main()
 Dim intType(0) As Integer
  Dim varDat(0) As Variant
    intType(0) = 0
    varDat(0) = "LINE"
    Set objSelSet = vbdPowerSet("sortblocks")
    objSelSet.Select acSelectionSetAll, filtertype:=intType, filterdata:=varDat

    For Each objBlkRef In objSelSet
			Цвет = objBlkRef.Color
			Угол = objBlkRef.Angle
    Next objBlkRef

End Sub

Public Function vbdPowerSet(strName As String) As AcadSelectionSet
  Dim objSelSet As AcadSelectionSet
  Dim objSelCol As AcadSelectionSets
  Set objSelCol = ThisDrawing.SelectionSets
    For Each objSelSet In objSelCol
      If objSelSet.Name = strName Then
        objSelSet.Delete
        Exit For
      End If
    Next
  Set objSelSet = ThisDrawing.SelectionSets.Add(strName)
  Set vbdPowerSet = objSelSet
End Function
в принципе почти все свойства objBlkRef видны в локалс (за исключением габаритов)
используя код Lisp:
Код:
[Выделить все]
(entget(car(entsel)))
получаю еще свойства объекта недоступные из VBA, в частности интересует Model
((-1 . <Имя объекта: 7ffffb08c30>) (0 . "LINE") (5 . "5DB")
(102 . "{ACAD_XDICTIONARY") (360 . <Имя объекта: 7ffffb08e00>) (102 . "}") (330
. <Имя объекта: 7ffffb039f0>) (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8
. "0") (100 . "AcDbLine") (10 640.946 -489.527 0.0) (11 1381.33 -489.527 0.0)
(210 0.0 0.0 1.0))

Собственно вопрос, как можно из VBA достучаться до этих свойств?
__________________
Мастерская СПДС
Просмотров: 3016
 
Непрочитано 29.09.2015, 16:48
1 | #2
ssn

Инженер проектировщик (раздел ТМ - фриланс)
 
Регистрация: 06.12.2003
Геленджик
Сообщений: 1,784
Отправить сообщение для ssn с помощью Skype™


я делал проверку принадлежности к тому или иному пространству через Block.ObjectID32
узнавал номер пространства (Модель, лист1, лист2. и так далее) и потом сравнивал с OwnerID32 объекта

понимаю, я тот ещё програмист, но вдруг поможет )

Код:
[Выделить все]
 Set oLayout = Acdoc.Layouts("Model")
oID = oLayout.Block.ObjectID32

Объект1.OwnerID32 <> oID
ssn вне форума  
 
Автор темы   Непрочитано 29.09.2015, 16:56
#3
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,299
Отправить сообщение для doctorraz с помощью Skype™


спасибо, но в объекте могут быть другие свойства (сторонние типа прокси с энаблером), как до них достучаться?
__________________
Мастерская СПДС
doctorraz вне форума  
 
Непрочитано 29.09.2015, 17:11
#4
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450


Наверняка через СОМ, по-другому вряд ли получится (и то только при наличии ObejctEnabler)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 29.09.2015, 17:28
#5
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,299
Отправить сообщение для doctorraz с помощью Skype™


через СОМ получается, легко..
может задачу ставлю неправильно.
Мне нужно получить все объекты из документа (лист и модель) по фильтру
Последовательным обходом вкладок получается собрать коллекцию, но листы моргают, регениерируют, тормозят, а в СОМ метода получить всю коллекцию сразу я не нашел.
Потому попробовал через SelectionSets, но через него недоступны свойства объектов, которые нужны , но есть в СОМ.
Круг замкнулся ((
__________________
Мастерская СПДС
doctorraz вне форума  
 
Непрочитано 29.09.2015, 17:37
#6
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450


Проходишь по всем описаниям блоков в текущем документе, заходишь внутрь каждого описания и получаешь что хочется.

----- добавлено через ~4 мин. -----
Без проверки, только для иллюстрации идеи:
Код:
[Выделить все]
Option Explicit

Public Sub test()
Dim BlkDef As AcadBlock
Dim ent As AcadEntity

  For Each BlkDef In ThisDrawing.Blocks
    If InStr(UCase(BlkDef.Name), "SPACE*") Then
      For Each ent In BlkDef
        ' ...
      Next
    End If
  Next
End Sub
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 29.09.2015, 20:06
#7
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,299
Отправить сообщение для doctorraz с помощью Skype™


если перебирать AcadEntity, то получается та же проблема, что и SelectionSets, нет доступа к свойствам "прокси"
поэтому так по кривому (((
Код:
[Выделить все]
Function МСсборСоВсехЛистов() 'МаркерСпец
    Dim Layouts As AcadLayouts, Layout As AcadLayout
    Dim МаркерСпец  As McCOM2.ObjectsCollection
    Dim МаркерСпецTemp As McCOM2.ObjectsCollection
    Dim АдресМодели As String
'----------------------------------
    ThisDrawing.SetVariable "regenmode", 0
    Set Layouts = ThisDrawing.Layouts
    АдресМодели = ThisDrawing.ActiveLayout.Name '  запоминаем лист где находимся
    Set МаркерСпец = SPDS.Query(ОбъектПоиска, УсловияПоиска)  'собираем с текущего
    For Each Layout In Layouts
'    добавить
        If Layout.Name <> АдресМодели Then 'проверочка что с него начали, что б с него не собирать
            ThisDrawing.ActiveLayout = ThisDrawing.Layouts.Item(Layout.Name)
            Set МаркерСпецTemp = SPDS.Query(ОбъектПоиска, УсловияПоиска)
            If МаркерСпецTemp.Count > 0 Then Set МаркерСпец = МаркерСпец.Or(МаркерСпецTemp)
        End If
    Next Layout
    ThisDrawing.ActiveLayout = ThisDrawing.Layouts.Item(АдресМодели) '    вернемся откуда пришли
   Set МСсборСоВсехЛистов = МаркерСпец
   ThisDrawing.SetVariable "regenmode", 1
End Function
__________________
Мастерская СПДС
doctorraz вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как получить свойства item SelectionSets (VBA)

Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разработка ПОС, искусство проектирования Tyhig Технология и организация строительства 117 25.11.2021 17:38
Как зная точку выбрать объект и получить его свойства? Zaghim Программирование 6 13.09.2010 09:07
Как получить свойства layout луки Программирование 2 23.06.2009 10:50
Как получить свойства 3dSolid Box в VB... 99garry Программирование 8 22.06.2009 20:58
как получить из примитива его свойства paradoxvaha Программирование 5 24.07.2007 22:24