Untitled
unknown
csharp
a year ago
3.5 kB
2
Indexable
Never
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;