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


// Урок 2

// Для начала - в проекте АРХИКАД в любом окне разложить штриховки 600х600. Задать им типы штриховок произвольно.

// Поставить там же GDL элемент LABPP_Table.gsm.

// Выделить одновременно все штриховки и элемент таблицы.

// открыть LabPP_Calc

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

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

// Результат - в таблицу запишется список штриховок с названием типа и количеством

// Задание 1

// Переименовать колонку "Название штриховки" в "Тип плитки"

// Задание 2

// Поменять местами колонки. 

// Задание 3

// Упорядочить строки по колонке с названием штриховки (см. команду "Sort")


int main()

{

       // загрузить из проекта в список 1 все выбранные элементы штриховок

       ac_request_special("add_elements_list_from_selection", 1, "HatchType", 2);

       // зарузить из проекта в список 2 все выбранные элементы таблиц

       ac_request_special("add_elements_list_from_selection", 2, "ObjectType", 2,

                       "", "EP", "ObjectName", "=", "LABPP_Table", "");


       // запросить количество собранных элементов штриховок 

       ac_request("get_loaded_elements_list_count", 1);

       int icount = ac_getnumvalue(); // получить количество в переменную

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


       if (icount == 0)

       {

               cout << "В списке нет элементов штриховок";

               return -1;

       }


       // запросить количество собранных элементов штриховок 

       ac_request("get_loaded_elements_list_count", 2);

       int icountTables = ac_getnumvalue(); // получить количество в переменную

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


       if (icountTables == 0)

       {

               cout << "В списке нет элемента таблицы";

               return -1;

       }



       int iTable;

       object("create", "ts_table", iTable); // создать таблицу


       // Создаем колонки таблицы

       ts_table(iTable, "add_column", 0, "string", "Название штриховки");

       ts_table(iTable, "add_column", 1, "double", "Площадь");

       ts_table(iTable, "add_column", 2, "int", "Кол-во");

       ts_table(iTable, "set_first_key", 0); // по этой колонке будет отслеживаться одинаковость строк при суммировании показатей


       // объявляем необходимые переменные для работы

       double dSquare, dAllSquare=0;

       string sFillName;

       int i;

       int ires;

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

       // обратите внимание, что одинаковые строки в таблице суммируются автоматически ("add_row_sum")

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

       {

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


               ires = ac_request("get_element_value", "fillName"); // запрашиваем название типа штриховки у элемента штриховки

               sFillName = ac_getstrvalue(); // получаем его в переменную

               ires = ac_request("get_quantity_value", "Surface"); // запрашиваем площадь элемента штриховки

               dSquare = ac_getnumvalue(); // получаем его в переменную

               dAllSquare += dSquare; // суммируем общую площадь

               // Добавляем строку в таблицу, если уже есть - то суммируем

               ts_table(iTable, "add_row_sum", 0, sFillName, 1, dSquare, 2, 1);

       }


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

       string str;

       ts_table(iTable, "print_to_str", str);

       coutvar << str;


       // вывести содержимое таблицы в элемент LABPP_Table.gsm

       ac_request("set_current_element_from_list", 2, 0); // сделать текущим 0-ой элемент из списка 2

       bool withheader = true; // выводить с заголовками колонок

       int startcolindex = 1;  // стартовая колонка в LABPP_Talbe будет 1

       int startObjectrow = 1; // стартовая строка в LABPP_Table будет 1 (т.е. с левого верхнего угла)

       int starttablerow = 0;  // из таблицы iTable начинать с первой строки (индекс первой строки 0)

       int maxcolumns;      // сколько колонок задействовано

       int maxrows;         // сколько строк получилось задействовано

       // получить число колонок и строк

       ts_table(iTable, "get_columns_count", maxcolumns);

       ts_table(iTable, "get_rows_count", maxrows);

       ts_table(iTable, "export_to_LABPP_Table", withheader, startcolindex, startObjectrow, starttablerow, maxrows);

       // Задать в объекте количество использованных строк

       ac_request("set_object_property_value", "TS_RowsUsedCount", maxrows + 1);

       // Задать в объекте количество использованных колонок

       ac_request("set_object_property_value", "TS_ColumnsUsedCount", maxcolumns);

       // Дать команду GDL объекту таблицы LABPP_Table выполнить внутренний перерасчет

       ac_request("set_object_property_value", "TS_DoRecalcAll", 1);

       // Удалить из памяти таблицу

       object("delete", iTable);


       // Записываем общую площадь в поле "a" калькулятора с комментарием

       string svalue = ecvt(dAllSquare); // переводим общую площадь в текст

       string scomment = "Общая площадь шриховок";

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

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

}