atac_fnc_drawTriangle = {
params ['_triangles'];
private _ctrl = (findDisplay 5000) displayCtrl 5201;
_ctrl setVariable ["triangles",_triangles];
_ctrl ctrlAddEventHandler ["Draw",
{
private _triangles = (findDisplay 5000) displayCtrl 5201 getVariable "triangles";
diag_log format["Треугольники получены: %1",_triangles];
{
diag_log format["На отрисовку: %1",_x];
_this select 0 drawTriangle
[
_x,
[1,0,0,0.5],
"#(rgb,1,1,1)color(1,1,1,1)"
];
} forEach _triangles;
}];
};
diag_log "НАЧАЛО!!!!!!!!!!!!!!!!!!!!!!!!";
private _points = [];
private _triangles = [];
private _pass = false;
private _notFinished = true;
private _time = 0;
private _x2 = 0;
private _x3 = 0;
{
private _str = _x splitString "_";
if (_str # 0 == "t") then {
_points pushBack (getMarkerPos _x);
};
} forEach allMapMarkers;
//Проверка, чтобы треугольник идущий до начальной точки был выпуклым
diag_log format["Полный список: %1",_points];
private _pointsOrigin = +_points;
while {_notFinished} do {
_time = _time + 1;
diag_log format["Цикл: %1",_time];
{
diag_log format["Полный список: %1",_points];
diag_log format["Текущая точка: %1",_x];
if (count _points == 3) exitWith {
_x2 = _points # 1;
_x3 = _points # 2;
private _markerX = ((_x # 0) + (_x2 # 0) + (_x3 # 0)) / 3;
private _markerY = ((_x # 1) + (_x2 # 1) + (_x3 # 1)) / 3;
diag_log format["Центр треугольника: [%1, %2]",_markerX,_markerY];
if ([_markerX,_markerY,0] inPolygon _pointsOrigin) then {
_triangles pushBack _points;
diag_log "Точка в полигоне!";
diag_log format["Передаём треугольник: [%1, %2, %3]",_x, _x2, _x3];
} else {
diag_log "Точка не в полигоне!";
};
_notFinished = false;
diag_log "Конец";
};
if ((count _points) - 1 == _forEachIndex) then {
diag_log "Последняя точка!";
if ((_points # 1 # 0) == (_points # 1 # 0)) then {
diag_log "Точка не проверяется!";
};
_x2 = _points # 0;
_x3 = _points # 1;
} else {
if ((count _points) - 2 == _forEachIndex) then {
diag_log "Предпоследняя точка!";
_x2 = _points # (_forEachIndex + 1);
_x3 = _points # 0;
} else {
_x2 = _points # (_forEachIndex + 1);
_x3 = _points # (_forEachIndex + 2);
};
};
if (_pass) then {
_pass = false;
_points deleteAt _forEachIndex;
diag_log format["Пропускаем точку: %1",_x];
} else {
diag_log format["Точки +1,+2: %1, %2",_x2,_x3];
private _markerX = ((_x # 0) + (_x2 # 0) + (_x3 # 0)) / 3;
private _markerY = ((_x # 1) + (_x2 # 1) + (_x3 # 1)) / 3;
diag_log format["Центр треугольника: [%1, %2]",_markerX,_markerY];
if ([_markerX,_markerY,0] inPolygon _pointsOrigin) then {
_triangles pushBack [_x, _x2, _x3];
_pass = true;
diag_log format["Передаём треугольник: [%1, %2, %3]",_x, _x2, _x3];
} else {
diag_log "Точка снаружи";
};
};
diag_log format["Конец цикла для: %1 из %2",_forEachIndex + 1,count _points];
} forEach _points;
};
diag_log format["Треугольники: %1",_triangles];
[_triangles] call atac_fnc_drawTriangle;