let del_zone (x : float) (y : float) : unit =
let zone_length = ref 0. in
let rec aux0 l res =
match l with [] -> List.rev res
|(((click_x,click_y),zone)::ls) ->
if(click_y=y && click_x=x)
then (zone_length := ((max_l zone) -. (min_l zone)) ; aux0 ls res)
else aux0 ls (((click_x,click_y),zone)::res);
in infos_zones:=(aux0 (!infos_zones) []);
let dist = !zone_length -. (min !zone_length (((float_of_int (number_of_common_line_between_all_zones x y)) -. 0.) *. !yDelta)) in
let rec aux l_infos_zones res =
match l_infos_zones with [] -> List.rev res
|(((absX,ordY),points_list)::ls) ->
if(ordY <= y)
then aux ls (((absX,(ordY +. dist)),(List.map (fun p -> p +. dist) points_list))::res)
else aux ls (((absX,ordY),points_list)::res)
in
let lock = ref true in
List.iter
(fun ((role_x,tag_pos),zone) ->
if (role_x <> x && tag_pos=y && ((max_l zone) -. (min_l zone)) >= (!zone_length))
then lock:=false)
(!infos_zones);
if(!lock) then(
infos_zones:= aux (!infos_zones) []
)