Получить список модулей, вставленных в проект.

Вызов:

int err = ac_request("hotlinks","GetHotlinkNodes",int iTable);

Здесь:

err - возвращает отрицательное число или 0 если нет ошибки,

iTable - дескриптор таблицы, куда записать результат (колонки таблицы сформируются автоматически).


Формат таблицы:


Имя колонки

Тип данных

Значение

guid

string

guid базового модуля

name

stting

имя модуля

type

int

тип 0/1/2 - неизвестный/модуль типа проекта ARCHICAD/dwg или dxf и др.

refFloorName

string

Имя этажа, если привязан к одному этажу

refFloorInd

int

Индекс этажа, если привязан к одному этажу

instancesCount

int

Количество применений в проекте


Пример.

Получить список ставленных в проект модулей и вывести таблицу в окно сообщений, а затем только колонки guid, name и instancesCount с другими заголовками вывести в элемент диалога iListBox.

По кнопке дать возможность посчитать количество элементов балок в модуле из выбранной строки.



//******************************************

// Create dialog and listbox

// Get from project list of the modules

// Print list to message window

// Place 3 columns of the list to listbox

// Calc beams in modules by pressing button

//******************************************


int iDialogDescr; // Дескриптор диалога

int iListBoxNodes, iTableNodes;    // Листбокс элементов hotlink nodes


int iTable;


int iButtonCalcElementsCountInModule;


int main()

{

#pragma region Создаем диалог

       int x, y, w, h;

       object("create", "ts_dialog", iDialogDescr);

       ts_dialog(iDialogDescr, "init_dialog", "palette", 0, 0, 450, 310); // Создаем окно диалога как палитку, т.е. немодальное

       ts_dialog(iDialogDescr, "set_as_main_panel"); // Если так сделать, то все немодальные окна этого сеанса будут закрываться вместе с этим окном

       ts_dialog(iDialogDescr, "SetTitle", "Здесь название назначаем сами");


       // листбокс

       object("create", "ts_dialogcontrol", iListBoxNodes, "iListBoxNodes");

       ts_dialogcontrol(iListBoxNodes, "init_control", "singlesellistbox", iDialogDescr, 3, 3, 450-3, 300-5-22, 48, 20);

       ts_dialogcontrol(iListBoxNodes, "SetAnchorToPanelResize", 0, 0, 1, 1);


       // кнопка расчета для позиции диалога

       int delta = 3;

       int yy = 282;

       x = 3; y = yy; w = 120; h = 20;


       object("create", "ts_dialogcontrol", iButtonCalcElementsCountInModule, "iButtonCalcElementsCountInModule");

       ts_dialogcontrol(iButtonCalcElementsCountInModule, "init_control", "button", iDialogDescr, x, y, w, h);

       ts_dialogcontrol(iButtonCalcElementsCountInModule, "eventreaction", "Event_ButtonClicked");

       ts_dialogcontrol(iButtonCalcElementsCountInModule, "settext", "Рассчет");

       ts_dialogcontrol(iButtonCalcElementsCountInModule, "SetAnchorToPanelResize", 0, 1, 0, 0);

       ts_dialogcontrol(iButtonCalcElementsCountInModule, "SetToolTip", "Рассчитать количество элеменов балок в модуле");


#pragma endregion


       object("create", "ts_table", iTable);

       // получить список hotlinks - колонки таблицы сформируются автоматически

       ac_request("hotlinks", "GetHotlinkNodes", iTable);

       // добавить  в конец колонку "количество элементов"

       ts_table(iTable, "add_column", -1, "int", "Кол-во элементов");


       // вывести список hotlink nodes в окно сообщений

       string str;

       ts_table(iTable, "print_to_str", str);

       coutvar << str;


       // задать имена колонок перед экспортом в листбокс

       ts_table(iTable, "mapping_columns_to_export",

               "guid", "GUID модуля", "",

               "name", "Имя модуля", "",

               "instancesCount", "Кол-во вхождений в проект", "",

               "Кол-во элементов","","" // имя колонки оставляем как есть

               );

       // задать ширину колонок при экспорте

       ts_table(iTable, "set_columns_width_when_export", 100);

       // экспортировать таблицу в листбокс

       ts_table(iTable, "export_to_dialogcontrol", iListBoxNodes, -1, -1);


       //object("delete", iTable); если объект таблицы больше не потребуется, то можно ее удалить

       //но если потом будем к ней обращаться из обработчиков событий (кнопки и т.п.) то оставляем в памяти


       bool bres;

       // запускаем диалог

       ts_dialog(iDialogDescr, "invoke", bres);

}



// обработчик событий кнопок на нажатие

int Event_ButtonClicked(int iDescr, string sDescr)

{

       if (sDescr == "iButtonCalcElementsCountInModule") {

               cout << sDescr << "\n";

               do_iButtonCalcElementsCountInModule();

       }

}


int do_iButtonCalcElementsCountInModule()

{

       // получить имя модуля, выбранного в листбоксе

       int item;

       string smodulename;


       ts_dialogcontrol(iListBoxNodes, "GetSelectedItem", item);

       if (item == 0) {

               return -1;

       }


       ts_table(iTable, "select_row", item - 1);

       ts_table(iTable, "get_value_of", "name", smodulename);

       // выбрать элементы, у которых совпадает имя модуля с выбранным в листбоксе

       ac_request_special("load_elements_list", 2, "BeamType", 2,

               "", "EP", "hotlinkName", "=", smodulename, "");


       ac_request("get_loaded_elements_list_count", 2);

       int icount = ac_getnumvalue();


       // записать результат в текущую строку таблицы

       ts_table(iTable, "set_value_of", "Кол-во элементов", icount);

       coutvar << icount;

       // экспортировать таблицу в листбокс (вид колонок уже был задан при первом экспорте в main())

       ts_table(iTable, "export_to_dialogcontrol", iListBoxNodes, -1, -1);

       ts_dialogcontrol(iListBoxNodes, "SelectItem", item);

}