Загрузить заданный список элементами 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", "НЕВВЕТВИ", "НЕ ВВЕТВИ"