private void SplitIt()
{
if (_debug) Console.WriteLine("************ SplitIt *****************");
List<int> tmp_list4one = new List<int>();
List<List<int>> tmp_list4two = new List<List<int>>();
for (int i = 0; i < _char_list.Count; i++)
if (_char_list[i].neighbor_count > 2)
_char_list[i].split_here = true;
for (int i = 0; i < _char_list.Count; i++)
{
if (_char_list[i].sizefilter_included == false)
{
tmp_list4one.Add(i);
if (_debug) Console.WriteLine(" Add " + i + " to one");
continue;
}
int next = FindNextNeighbor(i);
if (next == -1 && _char_list[i].included != true) // no neighbor
{
tmp_list4one.Add(i);
if (_debug) Console.WriteLine(" Add " + i + " to one");
continue;
}
while (next != -1)
{
List<int> substring_list = new List<int>();
if (_debug) Console.WriteLine(" Start to trace from:" + i + " to " + next);
substring_list.Add(i);
substring_list.Add(next);
_char_list[i].neighbors.Remove(next);
_char_list[next].neighbors.Remove(i);
if (_char_list[next].split_here || _char_list[i].split_here)
TraceCharacters(substring_list, i, next, _larger_angle_threshold); // strict
else TraceCharacters(substring_list, i, next, _smaller_angle_threshold);
if (_char_list[next].split_here || _char_list[i].split_here)
TraceCharacters(substring_list, next, i, _larger_angle_threshold);
else TraceCharacters(substring_list, next, i, _smaller_angle_threshold);
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);
next = FindNextNeighbor(i);
}
}
MergeTwo(tmp_list4two);
MergeOne(tmp_list4one);
}