private void BreakIt(int min_angel)
{
List<int> tmp_list4one = new List<int>();
for (int i = 0; i < _char_list.Count; i++)
{
if (_char_list[i].sizefilter_included == false)
{
tmp_list4one.Add(i); continue;
}
_char_list[i].split_visited = 1;
if (_char_list[i].neighbor_count == 2)
{
if (_debug) Console.WriteLine("Break test: Points");
double angel = CosAngel(_char_list[i].neighbors[0], _char_list[i].neighbors[1], i);
if (_debug) Console.WriteLine("Break test: Idx " + _char_list[i].neighbors[0] + " " + i + " " + _char_list[i].neighbors[1] + " _ " + angel);
if (angel < min_angel) // acute
{
_char_list[i].split_visited++;
_char_list[i].split_here = true;
if (_debug) Console.WriteLine("Break here @ " + i);
}
else
if (_debug) Console.WriteLine("Break test passed");
}
}
List<List<int>> tmp_list4two = new List<List<int>>();
for (int i = 0; i < _char_list.Count; i++)
{
if (_char_list[i].sizefilter_included == false || _char_list[i].split_visited <= 0 || _char_list[i].split_here == true)
continue;
List<int> substring_list = new List<int>();
if (_debug) Console.Write(" BreakItTrace: ");
BreakItTrace(substring_list, i);
if (_debug) Console.WriteLine();
if (substring_list.Count == 2)
{
tmp_list4two.Add(substring_list);
if (_debug) Console.WriteLine(" Add tmp2ts: " + substring_list[0] + " " + substring_list[1]);
}
else
AddSubstring(substring_list);
}
MergeTwo(tmp_list4two);
MergeOne(tmp_list4one);
}