load_elements_list
Загрузить заданный список элементами ARCHICAD по заданным условиям
Вызов:
Первый вариант:
ac_request("load_elements_list",int iListNum,string sElemTypeName,"MainFilter",int iMainFilterValue,string filterparametrname, string/double filterparametervalue,...);
Здесь:
iListNum - номер внутреннего списка элементов (от 0...9).
sElemTypeName - название типа элемента. Если нужно выбрать любые элементы - "ZombieElemType", если только колонны, то "ColumnType", стены - "WallType" и т.д.
"MainFilter" - сообщает, что мы задаем параметры для отфильтровывания элементов по типу доступности для редактирования, видимости и т.п. iMainFilterValue - обычно значение для видимых и редактируемых элементов - 3.
Далее идут названия параметров и их значения для дополнительного отбора.
Например "ID","Значение ID" - означает, что нужно выбрать элементы с ID="Значение ID" и т.д.
Фильтр "MainFilter" можно и не указывать. Это равносильно тому, что написать "MainFilter",0.
Т.е. при формировании списка в него попадут все подходящие элементы в проекте без учета основного критерия.
Значение фильтра собирается по формуле.
MainFilterValue=j1+2*j2+4*j3+8*j4+16*J5+32*j6+64*j7+128*j8+256*j9+512*j10+1024*j11+2048*j12+4096*j13+268435456*j14,
где каждое j может быть 0 или 1.
j1: только редактируемые.
j2: на видимом слое.
j3: на текущем этаже
j4: имеет представление в 3d окне
j5: в моем рабочем пространстве
j6: не подчиненные а только независимые элементы
j7: на активном чертеже
j8: отображается внутри обрезанной части базы данных чертежа
j9: указывает, передан ли данному элементу идентификатор изменения в параметре variationID
j10: имеются права доступа к элементу
j11: элемент виден в реновации
j12: дополнительный флаг; проверяет, переопределены ли атрибуты элемента текущим фильтром обновления
j13: дополнительный флаг; проверяет видимость элемента с учетом текущей настройки отображения структуры
j14: только из 2d окна
Второй вариант:
ac_request_special("load_elements_list", int iListNum, string ElemTypeName, int iMainFilterValue,
string left_braces1, string genesis1, string parname1, string operation1, string value1, string right_braces1, string operation1and2,
string left_braces2, string genesis2, string parname2, string operation2, string value2, string right_braces2, string operation2and3,
...
string left_bracesN, string genesisN, string parnameN, string operationN, string parvalueN, string right_bracesN);
Здесь:
left_braces1 - открывающие скобки выражения, например "((".
right_braces - закрывающие скобки выражения, например ")))".
Количество скобок должно быть четное и осмысленное.
genesis1 - происхождение сравниваемого параметра,
Возможны значения:
"ANY" - любое,
"GDL" - параметр GDL элемента,
"EP" - параметр элемента проекта,
"UP" - пользовательское свойство,
"UPb" - пользовательское свойство встроенное,
"UPub" - пользовательское свойство встроенное, созданное пользователем проекта,
"UPa" - пользовательское свойство встроенное,
"Cls" - параметр классификатора,
"IFC" - свойство UFC,
"UTS" - собственное свойство, назначенное элементу,
"Q" - количественное свойство
value1 - значение, с которым сравнивается значение параметра.
operation1and2 - операция с нижеследующими выражениями.
Может быть "И" (AND) или "ИЛИ" (OR).
Третий вариант:
ac_request_special("load_elements_list", int iListNum, string ElemTypeName, int iMainFilterValue, int iTableFilter);
Здесь:
iListNum - номер списка, в который нужно загрузить элементы,
ElemTypeName - низвание типа выбираемых элементов,
iMainFilterValue - значение главного фильтра элементов по видимости, доступности и т.п (см.выше).
iTableFilter - дескриптор таблицы, в которой заданы параметры фильтрации.
Этот вариант удобен, если нужно формировать сложные запросы фильтрации по ходу выполнения программы.
Пример:
Загрузить маркеры квартир в список №1 с этажей, у которых индекс 1 и 2.
int iTableFilter;
object("create", "ts_table", iTableFilter);
ts_table(iTableFilter, "create_structure_for_filter_table");
ts_table(iTableFilter, "add_row_to_filter_table", "", "EP", "ObjectName", "CONTAINS", "labelLabPP_Flat", "", "AND");
// дополнить таблицу фильтра элементов индексами этажей
ts_table(iTableFilter, "add_row_to_filter_table", "", "EP", "StoryIndex", "!=", 1, "", "AND");
ts_table(iTableFilter, "add_row_to_filter_table", "", "EP", "StoryIndex", "!=", 2, "", "");
ac_request_special("load_elements_list", 1, "ObjectType", 2, iTableFilter);
object("delete", iTableFilter);
Список логических операций в фильтрах выборки
Операция |
Варианты обозначения |
Примечание |
Истинно, если свойство существует у элемента (доступно) |
"EXIST", "СУЩЕСТВУЕТ" |
|
Истинно, если свойство не существует у элемента (не доступно) |
"NOTEXIST", "NOT EXIST", "НЕСУЩЕСТВУЕТ", "НЕ СУЩЕСТВУЕТ" |
|
Меньше |
"<" |
|
Меньше или равно |
"<=" |
|
Больше |
">" |
|
Больше или равно |
">=" |
|
Не равно |
"<>", "NOT", "НЕРАВНО", "НЕ РАВНО", "!=" |
Сравниваются числа или строки. Если число сравнивается со строкой, то строка переводится в число |
Не равно. Текст сравнивается без учета регистра |
"_<>", "_NOT", "_НЕРАВНО", "_НЕ РАВНО", "_!=" |
Сравниваются числа или строки. Если число сравнивается со строкой, то строка переводится в число |
Число в рамках диапазона |
"INRANGE", "ВПРЕДЕЛАХ", "В ПРЕДЕЛАХ" |
Пределы задаются числами и уточняются скобками разного вида. |
[ и ] означает что чиловая граница слева или справа "включительно". "[-1;1]" - число больше или равно -1 и меньше или равно 1 "]-1;1]" - число меньше или равно 1 "(-1;1]" - число больше -1 и меньше или равно 1 |
||
Число не в рамках диапазона |
"NOTINRANGE", "ЗАПРЕДЕЛАМИ", "ЗА ПРЕДЕЛАМИ" |
|
Содержит текст |
"CONTAINS", "СОДЕРЖИТ" |
|
Содержит текст. Сравнение без учета регистра |
"_CONTAINS", "_СОДЕРЖИТ" |
|
Не содержит фрагмент текста |
"NOTCONTAINS", "NOT CONTAINS", "НЕСОДЕРЖИТ", "НЕ СОДЕРЖИТ" |
|
Не содержит фрагмент текста. Сравнение без учета регистра |
"_NOTCONTAINS", "_NOT CONTAINS", "_НЕСОДЕРЖИТ", "_НЕ СОДЕРЖИТ" |
|
Равно |
"=","==","EQ","РАВНО" |
|
Равно. Текст сравнивается без учета регистра |
"_=","_==","_EQ","_РАВНО" |
|
Проверка текста на соответствие шаблону (регулярному выражению) |
"~", "~~", "REGEXMATCH", "СООТВ.ШАБЛОНУ", "СООТВШАБЛОНУ" |
|
Проверка текста на несоответствие шаблону (регулярному выражению) |
"!~", "NOTREGEXMATCH", "НЕ СООТВ.ШАБЛОНУ", "НЕСООТВШАБЛОНУ" |
|
Проверка текста на содержание шаблона (регулярного выражения) |
"REGEXSEARCH","СОДЕРЖИТ ШАБЛОН","СОДЕРЖИТШАБЛОН" |
|
Проверка текста на то, что он не содержит шаблон (регулярное выражение) |
"NOTREGEXSEARCH", "НЕ СОДЕРЖИТ ШАБЛОН", "НЕСОДЕРЖИТШАБЛОН" |
|
Для классификатора |
|
|
Присвоено какое-то значение в указанном классификаторе |
"#","ASSIGNED","НАЗНАЧЕНО" |
Справа ставится пустая строка ("") |
Не присвоено значение в указанном классификаторе |
"!#", "NOTASSIGNED", "NOT ASSIGNED", "НЕНАЗНАЧЕНО", "НЕ НАЗНАЧЕНО" |
|
Класс элемента в заданном классификаторе находится в указанной ветви |
"-=<", "INBRANCH", "ВВЕТВИ", "В ВЕТВИ" |
|
Класс элемента в заданном классификаторе не находится в указанной ветви |
"!-=<", "NOTINBRANCH", "NOT INBRANCH", "НЕВВЕТВИ", "НЕ ВВЕТВИ" |
|