bool MeshDispose::deal_with_odd(Vertex * &vertex, QQueue<Vertex *> &vtx_queue) { if (vertex->edge_list_in.size()==6 && vertex->edge_list_out.size()==6) { for (int j=0; j<vertex->edge_list_out.size(); ++j) { if (vertex->edge_list_out.at(j)->vertex2->isEven()) { Vertex * vertex_even = vertex->edge_list_out.at(j)->next->next->reverse->next->next->reverse->next->next->vertex1; set_even(vertex_even, vtx_queue); } } return true; } // Vertex * vtx_out = NULL; // Vertex * vtx_in = NULL; Edge * edge_out = NULL; Edge * edge_in = NULL; for (int i=0; i<vertex->edge_list_out.size(); ++i) { if (vertex->edge_list_out.at(i)->vertex2->isEven()) { // vtx_out = vertex->edge_list_out.at(i)->vertex2; edge_out = vertex->edge_list_out.at(i); break; } } for (int i=0; i<vertex->edge_list_in.size(); ++i) { if (vertex->edge_list_in.at(i)->vertex1->isEven()) { // vtx_in = vertex->edge_list_in.at(i)->vertex1; edge_in = vertex->edge_list_in.at(i); break; } } if (edge_in!=NULL && edge_out!=NULL) { return true; } else { // ---------------------------- // --- for more code // ----------------------------- Vertex * another_even = NULL; if (edge_in == NULL) { another_even = edge_out->prev->reverse->prev->reverse->prev->vertex1; } else { another_even = edge_in->next->reverse->next->reverse->next->vertex2; } return set_even(another_even, vtx_queue); } }
bool MeshDispose::partition(HalfEdge *&halfEdge) { // ____ // /\ /\ // /__\/__\ // \ /\ /\ // \/__\/ \ unpart_vtx(halfEdge); Vertex * start_vertex = halfEdge->get_vertex_extraordinary(); QQueue<Vertex *> vtx_queue; bool flag = true; while (start_vertex != NULL && flag) { set_even(start_vertex, vtx_queue); while (!vtx_queue.empty() && vtx_queue.size()!=0 && flag) { Vertex * vertex = vtx_queue.dequeue(); if (!deal_with_odd(vertex, vtx_queue)) flag = false; } start_vertex = halfEdge->get_vertex_extraordinary(); } return flag; }
void *op_slider_even_positive_strict(t_brick *brick) { int dir; op_slider( brick); if( brick->state_pressed == BRICK_RIGHT) dir = 1; else dir = -1; t_plug *plug = &brick->plug_intern; void *data = plug->data; set_even( data, plug->data_type, dir, 1, 0, 1); return NULL; }