get_levelfromprojectnull_by_floorindexandlevel
Зная индекс этажа и высоту от уровня этого этажа (может быть с минусом) получить высоту от ноля проекта.
Вызов:
ac_request("get_levelfromprojectnull_by_floorindexandlevel", int floorInd, double bottomOffset, double &levelfromprojectnull);
Здесь:
floorind - индекс этажа,
bottomOffset - смещение относительно уровня этого этажа,
levelfromprojectnull - результат - смещение по вертикали относительно ноля проекта.
Пример:
Выбрать элементы из проекта.
У элементов типа Морф определить расстояние середины элемента от уровня 0 проекта.
Вариант 1. Сначала выборка всех элементов, затем по ходу опроса элементов определяем нужные по типу.
// загрузить из проекта в список 1 все элементы, у которых присвоено любое значение классификатора ARCHICAD (не обязательно)
ac_request_special("add_elements_list", 1, "ZombieType", 2,
"", "Cls", "Классификация ARCHICAD", "ASSIGNED", "", "");
// запросить количество собранных элементов
ac_request("get_loaded_elements_list_count", 1);
int icount = ac_getnumvalue(); // получить количество в переменную
coutvar << icount; // вывести в окно сообщений
if (icount == 0)
{
cout << "В списке нет элементов";
return -1;
}
// объявляем необходимые переменные для работы
double dLevel, dHeight, elemlevel, elemprojectlevel;
int ielemstoryindex;
string sElemTypeName, sID;
int i;
int ires;
// выполнить цикл icount раз
for (i = 0; i < icount; i++)
{
ires = ac_request("set_current_element_from_list", 1, i); // сделать текущим i-вый элемент из списка 1
ac_request("get_element_value", "TypeName"); // запросить название типа этого элемента
sElemTypeName = ac_getstrvalue();
coutvar << sElemTypeName; // вывести имя типа элемента в окно сообщений
// если это элемент типа Морф:
if (sElemTypeName == "MorphType")
{
ires = ac_request("get_element_value", "ID"); // запросить ID элемента
sID = ac_getstrvalue(); // получить его в переменную
coutvar << sID; // вывести ID в окно сообщений
ires = ac_request("get_element_value", "Level"); // запрашиваем свойство Level (для Морф - высота над уровнем его этажа)
dLevel = ac_getnumvalue(); // получаем его в переменную
coutvar << dLevel; // выводим в окно сообщений
ires = ac_request("get_quantity_value", "max_height"); // запрашиваем максимальный размер Морф по вертикали
dHeight = ac_getnumvalue(); // получаем его в переменную
coutvar << dHeight; // выводим в окно сообщений
elemlevel = dLevel + dHeight / 2; // рассчитываем уровень центра Морф по высоте относительно этажа
ac_request("get_element_value", "StoryIndex"); // запрашиваем индекс этажа
ielemstoryindex = ac_getnumvalue(); // получаем индекс этажа в переменную
// получаем высоту центра Морф относительно 0 проекта в переменную elemprojectlevel
ac_request("get_levelfromprojectnull_by_floorindexandlevel", ielemstoryindex, elemlevel, elemprojectlevel);
coutvar << elemprojectlevel; // выводим в окно сообщений
}
}
Вариант 2. Сразу выбираем только элементы типа Морф, которые классифицированы как "Лестница"
// загрузить из проекта в список 1 элементы типа Морф, у которых присвоено значение классификатора ARCHICAD "Лестница"
ac_request_special("add_elements_list", 1, "MorphType", 2,
"", "Cls", "Классификация ARCHICAD", "=", "Лестница", "");
// запросить количество собранных элементов
ac_request("get_loaded_elements_list_count", 1);
int icount = ac_getnumvalue(); // получить количество в переменную
coutvar << icount; // вывести в окно сообщений
if (icount == 0)
{
cout << "В списке нет элементов типа Морф, классифицированных как \"Лестница\"";
return -1;
}
// объявляем необходимые переменные для работы
double dLevel, dHeight, elemlevel, elemprojectlevel;
string sID;
int ielemstoryindex;
int i;
int ires;
// выполнить цикл icount раз
for (i = 0; i < icount; i++)
{
ires = ac_request("set_current_element_from_list", 1, i); // сделать текущим i-вый элемент из списка 1
ires = ac_request("get_element_value", "ID"); // запросить ID элемента
sID = ac_getstrvalue(); // получить его в переменную
coutvar << sID; // вывести ID в окно сообщений
ires = ac_request("get_element_value", "Level"); // запрашиваем свойство Level (для Морф - высота над уровнем его этажа)
dLevel = ac_getnumvalue(); // получаем его в переменную
coutvar << dLevel; // выводим в окно сообщений
ires = ac_request("get_quantity_value", "max_height"); // запрашиваем максимальный размер Морф по вертикали
dHeight = ac_getnumvalue(); // получаем его в переменную
coutvar << dHeight; // выводим в окно сообщений
elemlevel = dLevel + dHeight / 2; // рассчитываем уровень центра Морф по высоте относительно этажа
ac_request("get_element_value", "StoryIndex"); // запрашиваем индекс этажа
ielemstoryindex = ac_getnumvalue(); // получаем индекс этажа в переменную
// получаем высоту центра Морф относительно 0 проекта в переменную elemprojectlevel
ac_request("get_levelfromprojectnull_by_floorindexandlevel", ielemstoryindex, elemlevel, elemprojectlevel);
coutvar << elemprojectlevel; // выводим в окно сообщений
}