Зная индекс этажа и высоту от уровня этого этажа (может быть с минусом) получить высоту от ноля проекта.

Вызов:

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; // выводим в окно сообщений

}