Скачать файл можно здесь.


// Урок 1

// Для начала - в проекте АРХИКАД создать элемент типа Морф.

// задать ему классификатор "Лестница" по классификации "Классификация ARCHICAD"

// выбрать его

// открыть LabPP_Calc

// открыть в нем правой нижней маленькой кнопкой окно сообщений

// второй справа нижней маленькой кнопкой запустить этот программный модуль средствами LabPP_Calc

// Результат - в расчетное поле "a" калькулятора запишется высота середины элемента Морф а в комментарий - его ID

// Задание 1

// Сделать так, чтобы значение записывалось во второе поле

// Задание 2

// Создать в классификаторе "Классификация ARCHICAD" класс "Отделка стен". 

// Присвоить этот класс элементу Морф

// Сделать так, чтобы в поле LabPP_Calc записывалась середина высоты этого элемента.

// Подсказка: при выборке элементов из проекта - слово "Лестница" надо на что-то заменить

// Задание 3

// Результат перед записью в поле увеличить на 10% (умножить на 1.1)


int main()

{

       // загрузить из проекта в список 1 все элементы, у которых присвоено любое значение классификатора ARCHICAD 

       ac_request_special("add_elements_list_from_selection", 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 sElemTypeName, sID;

       int ielemstoryindex;

       int i;

       int ires;

       // выполнить цикл icount раз

       // в нашем случае нам нужен один элемент, поэтому отработаем цикл только 1 раз на элементе с индексом 0

       icount = 1;


       for (i = 0; i < icount; i++)

       {

               ires = ac_request("set_current_element_from_list", 1, i); // сделать текущим i-вый элемент из списка 1


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

               ires = ac_request("get_element_value", "ID"); // запросить ID элемента

               sID = ac_getstrvalue(); // получить его в переменную

               coutvar << sID; // вывести ID в окно сообщений

       }

       string svalue = ecvt(elemprojectlevel);

       string scomment = "Высота элемента с ID=" + sID + "от 0 проекта";

       ac_request("interface", "calc_field", "set", "a", 1, svalue, scomment);

       // "a" - здесь имя ячейки у LabPP_Calc куда записать значение. Всего ячеек - a,b,c и main

}