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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Выбор объектов с учетом XData (VBA)

Выбор объектов с учетом XData (VBA)

Ответ
Поиск в этой теме
Непрочитано 22.08.2007, 23:02 #1
Выбор объектов с учетом XData (VBA)
e_v_a
 
Регистрация: 25.06.2007
Сообщений: 68

Неожиданно столкнулся с тем, что выборка объектов в SelectionSet с фильтром, в котором используются расширенные данные работает для для всех типов объектов. Вот тестовый пример, который создает линию и полилинию, к обеим добавляются одинаковые расширенные данные, затем делается выборка с фильтром, а в результате полилиния выбирается, а линия нет. Интересно, почему? Вот собственно код
Код:
[Выделить все]
Const AppName As String = "TestApp"
        
Sub TestProp()
    Dim ent1 As AcadLine
    Dim ent2 As AcadLWPolyline
    Dim startPoint(0 To 2) As Double
    Dim endPoint(0 To 2) As Double
    Dim points(0 To 3) As Double
    
    ' Define the start and end points for the line
    startPoint(0) = 1#: startPoint(1) = 1#: startPoint(2) = 0#
    endPoint(0) = 5#: endPoint(1) = 5#: endPoint(2) = 0#
    
    ' Define the start and end points for the polyline
    points(0) = 1: points(1) = 1
    points(2) = 1: points(3) = 2
    
    ' Create the line and polyline in model space
    Set ent1 = ThisDrawing.ModelSpace.AddLine(startPoint, endPoint)
    Set ent2 = ThisDrawing.ModelSpace.AddLightWeightPolyline(points)
    
    Dim xdataType(0 To 1) As Integer
    Dim xDataValue(0 To 1) As Variant
    xdataType(0) = 1001: xDataValue(0) = AppName
    xdataType(1) = 1070: xDataValue(1) = 1
    ent1.SetXData xdataType, xDataValue
    ent2.SetXData xdataType, xDataValue
    
    ' Make test selection
    Dim ssetObj As AcadSelectionSet
    Set ssetObj = ThisDrawing.SelectionSets.Add("MySSet")
    Dim fType(0 To 1) As Integer
    Dim fVal(0 To 1) As Variant
    fType(0) = 1001: fVal(0) = AppName
    fType(1) = 1070: fVal(1) = 1
    ssetObj.Select acSelectionSetAll, , , fType, fVal
    Dim n1 As Integer
    n1 = ssetObj.Count ' смотрим сколько попало в выборку
    
    ssetObj.Delete
    ent1.Delete
    ent2.Delete
    
    ' Выводим результат, должно быть 2
    MsgBox "Selected n1=" & CStr(n1)

End Sub
Просмотров: 3337
 
Непрочитано 22.08.2007, 23:42
#2
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,407
Отправить сообщение для Александр Ривилис с помощью Skype™


Потому что фильтровать можно только по группе 1001 - все остальное недокументированные особенности поведения, на которые не следует полагаться.
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 23.08.2007, 13:32
#3
e_v_a


 
Регистрация: 25.06.2007
Сообщений: 68


Спасибо за ответ, а где можно почитать про допустимость использования в фильтрах тех или иных групп? А так же интересно как поведет себя выборка с фильтром если у объекта есть несколько записей с кодом 1001 и разными значениями? Будет выбран если хотя бы одна из записей совпадает с фильтром или опять неопределенное поведение?

PS: Прочитал про ограничения для фильтров в LISP-овой (ssget ) они те же самые и для VBA-шного SelectionSet - Select? И код мне надо было использовать -3 а не 1001?
e_v_a вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Выбор объектов с учетом XData (VBA)

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

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