GetHotlinkNodes
Получить список модулей, вставленных в проект.
Вызов:
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);
}