Получить полное имя слоя по частичному фрагменту.

Требуется, когда пользователи договариваются именовать слои в ARCHICAD с числовыми или текстовыми префиксами.

Например слой "Квартиры" можно написать как "01 Квартиры" или "20 Квартиры". Такой подход встречается когда пользователь хочет установить удобный ему порядок следования слоев в проекте.
Однако с точки зрения программы - это совершенно разные слои.

Чтобы избежать ошибки, удобно пользоваться данной функцией.


Вызов:

int ires = ac_request("get_layer_by_substring",string slayernamefragment, int from);
int ires = ac_request("get_layer_by_substring",string slayernamefragment, int from, int range);


Здесь:

slayernamefragment - фрагмент в имени, который точно определяет слой (например "Квартиры").

from - порядковый номер символа от начала полного имени слоя в проекте, с которого начать сравнение на соответствие.

range - количество символов, которые нужно проверить.

ires - 0, если слой найден.

Полное наименование найденного слоя считывается командой ac_getstrvalue();


Пример.

Получить полное имя слоя "Квартиры" в проекте, если известно, что в организации принято для сортировки слоев пользоваться префиксом типа "01 ".


string smalllayername="Квартиры";
string longlayername;
ires = ac_request("get_layer_by_substring",smalllayername,3); // начать сравнение с 3-й позиции
if(ires != 0) {
       tsalert(-1,"Ошибка во время выполнения","Не обнаружен слой",smalllayername);
       cout << "Ошибка: Не обнаружен слой - "<< smalllayername << "\n";
}
longlayername = ac_getstrvalue(); // считать полное имя слоя