Esempio n. 1
0
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);
    }
}
Esempio n. 2
0
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;
}
Esempio n. 3
0
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;
}