Загрузить заданный список элементами 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);