void Mesh::begin_simplify() //简化过程 { int counter = 0; build_pairqueue(); while(fsize > finalsize) { counter++; current_change++; simplify_one(); if(counter == 2000) //如果已经做了2000次单独的删除操作,那么edges和planes里面就可能已经积蓄了一些不存在的点或者面了,就要重新rebuild一次 { counter = 0; rebuild(); } } }
static void simplify_merges(struct rev_info *revs) { struct commit_list *list; struct commit_list *yet_to_do, **tail; if (!revs->topo_order) sort_in_topological_order(&revs->commits, revs->lifo); if (!revs->prune) return; /* feed the list reversed */ yet_to_do = NULL; for (list = revs->commits; list; list = list->next) commit_list_insert(list->item, &yet_to_do); while (yet_to_do) { list = yet_to_do; yet_to_do = NULL; tail = &yet_to_do; while (list) { struct commit *commit = list->item; struct commit_list *next = list->next; free(list); list = next; tail = simplify_one(revs, commit, tail); } } /* clean up the result, removing the simplified ones */ list = revs->commits; revs->commits = NULL; tail = &revs->commits; while (list) { struct commit *commit = list->item; struct commit_list *next = list->next; struct merge_simplify_state *st; free(list); list = next; st = locate_simplify_state(revs, commit); if (st->simplified == commit) tail = &commit_list_insert(commit, tail)->next; } }