void join_edges(CRACKEDGE *edge1, // edges to join CRACKEDGE *edge2, // no specific order CRACKEDGE **free_cracks, C_OUTLINE_IT* outline_it) { if (edge1->pos.x() + edge1->stepx != edge2->pos.x() || edge1->pos.y() + edge1->stepy != edge2->pos.y()) { CRACKEDGE *tempedge = edge1; edge1 = edge2; // swap araound edge2 = tempedge; } if (edge1->next == edge2) { // already closed complete_edge(edge1, outline_it); // attach freelist to end edge1->prev->next = *free_cracks; *free_cracks = edge1; // and free list } else { // update opposite ends edge2->prev->next = edge1->next; edge1->next->prev = edge2->prev; edge1->next = edge2; // make joins edge2->prev = edge1; } }
void join_edges( //join edge fragments CRACKEDGE *edge1, //edges to join CRACKEDGE *edge2 //no specific order ) { CRACKEDGE *tempedge; //for exchanging if (edge1->pos.x () + edge1->stepx != edge2->pos.x () || edge1->pos.y () + edge1->stepy != edge2->pos.y ()) { tempedge = edge1; edge1 = edge2; //swap araound edge2 = tempedge; } // tprintf("Joining %x=(%d,%d)+(%d,%d)->%x<-%x ", // edge1,edge1->pos.x(),edge1->pos.y(),edge1->stepx,edge1->stepy, // edge1->next,edge1->prev); // tprintf("to %x=(%d,%d)+(%d,%d)->%x<-%x\n", // edge2,edge2->pos.x(),edge2->pos.y(),edge2->stepx,edge2->stepy, // edge2->next,edge2->prev); if (edge1->next == edge2) { //already closed complete_edge(edge1); //approximate it //attach freelist to end edge1->prev->next = free_cracks; free_cracks = edge1; //and free list } else { //update opposite ends edge2->prev->next = edge1->next; edge1->next->prev = edge2->prev; edge1->next = edge2; //make joins edge2->prev = edge1; } }