|
|
Модератор форума: GUNNER161, Panikaha |
Форум РЕДАКТОР - ArmA 3 Скрипты Поиск дорог и создание N количества маркеров |
Поиск дорог и создание N количества маркеров |
› Четверг
› 21.07.2016
› 12:39
› Сообщение #
//Поиск дорог от указанной точки в радиусе 1700 метров
_road = _pos1 nearRoads 1700; REINFORCEMENT=[]; //Фильтруем найденные частки дорог на удаленность от указанной точки.Если участок удален дальше 1400 метров, то заносим в отдельный массив _cnt =(count _road)-1; ROADS_FOR_REINFORCEMENT=[]; for "_i" from 0 to _cnt step 1 do { _rfnt = _road select _i; if(((getPos _rfnt) distance _pos)>1400) then { _rfntname = format ["[Reinf_mrk_%1,%2]",_i,getPos _rfnt]; // попытка преобразовать в массив ROADS_FOR_REINFORCEMENT = ROADS_FOR_REINFORCEMENT + [_rfntname]; diag_log format["Location ROADS_FOR_REINFORCEMENT = %1", _rfntname]; }; }; ROADS_FOR_REINFORCEMENT call BIS_fnc_arrayShuffle; ROADS_FOR_REINFORCEMENT resize 10; diag_log format["Locations ROADS_FOR_REINFORCEMENT = %1", ROADS_FOR_REINFORCEMENT]; { _mrk_name = str (_x select 0); _mrk_coord = _x select 1; _reinf_mrk=createMarker [_mrk_name,_mrk_coord]; _reinf_mrk setMarkerShape "ICON"; _reinf_mrk setMarkerType "hd_dot"; REINFORCEMENT=REINFORCEMENT + [_reinf_mrk]; } foreach ROADS_FOR_REINFORCEMENT; ROADS_FOR_REINFORCEMENT=[]; //ЛОГ /* "Location ROADS_FOR_REINFORCEMENT = [Reinf_mrk_922,[11852.4,19286.4,0]]" "Location ROADS_FOR_REINFORCEMENT = [Reinf_mrk_923,[11866.9,19264.9,0]]" "Location ROADS_FOR_REINFORCEMENT = [Reinf_mrk_924,[11896.4,18807.2,0]]" "Location ROADS_FOR_REINFORCEMENT = [Reinf_mrk_925,[11880.6,19232.6,0]]" "Location ROADS_FOR_REINFORCEMENT = [Reinf_mrk_926,[11919.1,18803.1,0]]" "Location ROADS_FOR_REINFORCEMENT = [Reinf_mrk_927,[11940.8,18799.7,0]]" "Locations ROADS_FOR_REINFORCEMENT = ["[Reinf_mrk_17,[8665.91,18580.8,0]]","[Reinf_mrk_19,[8640.02,18959.3,0]]","[Reinf_mrk_21,[8652.54,19011.9,1.52588e-005]]","[Reinf_mrk_24,[8655,19047.2,0]]","[Reinf_mrk_25,[8646.99,19059.9,-1.52588e-005]]","[Reinf_mrk_26,[8669.31,19422.1,0]]","[Reinf_mrk_29,[8663.79,19525.7,0]]","[Reinf_mrk_32,[8679.95,18597.4,0]]","[Reinf_mrk_35,[8694.72,18765,0]]","[Reinf_mrk_38,[8671.16,18897.1,0]]"]" Error in expression { _mrk_name = str (_x select 0); diag_log _mrk_name; _mrk_coor> Error position: <select 0); diag_log _mrk_name; _mrk_coor> Error Generic error in expression */ ///////////////////////////////////////////////////////////////////////////////// Error Generic error in expression как я понял - несоответсвие типа. Возможно ли реализовать мою задумку ? Добавлено (21.07.2016, 12:39) |
› Четверг
› 21.07.2016
› 15:49
› Сообщение #
Твоя ошибка в этом месте
_rfntname = format ["[Reinf_mrk_%1,%2]",_i,getPos _rfnt]; // попытка преобразовать в массив Это создаёт НЕ массив (Array) а строку (String) и уже из этого, действия _mrk_name = str (_x select 0); невозможны наверно нужно записать так _rfntname = [_i,getPos _rfnt]; |
› Четверг
› 21.07.2016
› 23:28
› Сообщение #
Спасибо Slon.
конечный рабочий вариант ниже (м.б. кому понадобится). //В итоге получаем 5 маркеров на дорогах вокруг точки (мне нужны для вызова подкрепления) _pos1 = //любая точка (в моем случе РБД) _mrk_cnt = 5; // количество маркеров //Поиск дорог от указанной точки в радиусе 1700 метров _road = _pos1 nearRoads 1700; REINFORCEMENT=[]; //Фильтруем найденные частки дорог на удаленность от указанной точки.Нужен диапазон 1600-1700 _cnt =(count _road)-1; _road_array=[]; for "_i" from 0 to _cnt step 1 do { _rfnt = _road select _i; if(((getPos _rfnt) distance _pos)>1600) then { _rfntn = format ["Reinf_mrk_%1",_i]; _rfntname = [_rfntn,getPos _rfnt]; _road_array = _road_array + [_rfntname]; diag_log format["Location _road_array = %1", _rfntname]; }; }; KK_fnc_arrayShuffle { private "_cnt"; _cnt = count _this; for "_i" from 1 to 5 do { for "_i" from 1 to _cnt do { _this pushBack (_this deleteAt floor random _cnt); }; }; _this; }; _road_array call KK_fnc_arrayShuffle; //перемешиваем массив _road_array resize _mrk_cnt; { _mrk_name = str (_x select 0); _mrk_coord = _x select 1; _reinf_mrk=createMarker [_mrk_name,_mrk_coord]; _reinf_mrk setMarkerShape "ICON"; //нужны лишь для диагностики _reinf_mrk setMarkerType "hd_dot"; //нужны лишь для диагностики REINFORCEMENT=REINFORCEMENT + [_reinf_mrk]; } foreach _road_array; _road_array=[]; diag_log format["Locations REINFORCEMENT = %1", REINFORCEMENT]; Добавлено (21.07.2016, 23:28) |
| |||
| |||
Чат сайта |