add function for rotating linked list so at item is last.
This commit is contained in:
parent
8f49054b77
commit
2e0422b17f
|
@ -74,7 +74,8 @@ void BLI_freelinkN(struct ListBase *listbase, void *vlink);
|
|||
void BLI_movelisttolist(struct ListBase *dst, struct ListBase *src);
|
||||
void BLI_duplicatelist(struct ListBase *dst, const struct ListBase *src);
|
||||
void BLI_reverselist(struct ListBase *lb);
|
||||
void BLI_rotatelist(struct ListBase *lb, void *vlink);
|
||||
void BLI_rotatelist_first(struct ListBase *lb, void *vlink);
|
||||
void BLI_rotatelist_last(struct ListBase *lb, void *vlink);
|
||||
|
||||
/* create a generic list node containing link to provided data */
|
||||
struct LinkData *BLI_genericNodeN(void *data);
|
||||
|
|
|
@ -581,19 +581,34 @@ void BLI_reverselist(ListBase *lb)
|
|||
/**
|
||||
* \param vlink Link to make first.
|
||||
*/
|
||||
void BLI_rotatelist(ListBase *lb, void *vlink)
|
||||
void BLI_rotatelist_first(ListBase *lb, void *vlink)
|
||||
{
|
||||
/* make circular */
|
||||
((LinkData *)lb->first)->prev = lb->last;
|
||||
((LinkData *)lb->last)->next = lb->first;
|
||||
((Link *)lb->first)->prev = lb->last;
|
||||
((Link *)lb->last)->next = lb->first;
|
||||
|
||||
lb->first = vlink;
|
||||
lb->last = ((LinkData *)vlink)->prev;
|
||||
lb->last = ((Link *)vlink)->prev;
|
||||
|
||||
((LinkData *)lb->first)->prev = NULL;
|
||||
((LinkData *)lb->last)->next = NULL;
|
||||
((Link *)lb->first)->prev = NULL;
|
||||
((Link *)lb->last)->next = NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* \param vlink Link to make last.
|
||||
*/
|
||||
void BLI_rotatelist_last(ListBase *lb, void *vlink)
|
||||
{
|
||||
/* make circular */
|
||||
((Link *)lb->first)->prev = lb->last;
|
||||
((Link *)lb->last)->next = lb->first;
|
||||
|
||||
lb->first = ((Link *)vlink)->next;
|
||||
lb->last = vlink;
|
||||
|
||||
((Link *)lb->first)->prev = NULL;
|
||||
((Link *)lb->last)->next = NULL;
|
||||
}
|
||||
|
||||
/* create a generic list node containing link to provided data */
|
||||
LinkData *BLI_genericNodeN(void *data)
|
||||
|
|
|
@ -121,7 +121,7 @@ static void bm_bridge_best_rotation(struct BMEdgeLoopStore *el_store_a, struct B
|
|||
}
|
||||
|
||||
if (el_b_best) {
|
||||
BLI_rotatelist(lb_b, el_b_best);
|
||||
BLI_rotatelist_first(lb_b, el_b_best);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -274,7 +274,7 @@ static void bridge_loop_pair(BMesh *bm,
|
|||
const int len_b = BM_edgeloop_length_get(el_store_b);
|
||||
ListBase *lb_b = BM_edgeloop_verts_get(el_store_b);
|
||||
LinkData *el_b = BLI_rfindlink(lb_b, positive_mod(twist_offset, len_b));
|
||||
BLI_rotatelist(lb_b, el_b);
|
||||
BLI_rotatelist_first(lb_b, el_b);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -919,13 +919,13 @@ static void bm_edgering_pair_order(BMesh *bm,
|
|||
}
|
||||
BLI_assert(node != NULL);
|
||||
|
||||
BLI_rotatelist(lb_b, node);
|
||||
BLI_rotatelist_first(lb_b, node);
|
||||
|
||||
/* now check we are winding the same way */
|
||||
if (bm_edgering_pair_order_is_flipped(bm, el_store_a, el_store_b)) {
|
||||
BM_edgeloop_flip(bm, el_store_b);
|
||||
/* re-ensure the first node */
|
||||
BLI_rotatelist(lb_b, node);
|
||||
BLI_rotatelist_first(lb_b, node);
|
||||
}
|
||||
|
||||
/* sanity checks that we are aligned & winding now */
|
||||
|
|
|
@ -2913,7 +2913,7 @@ static void edbm_fill_grid_prepare(BMesh *bm, int span, int offset)
|
|||
}
|
||||
|
||||
/* set this vertex first */
|
||||
BLI_rotatelist(verts, v_act_link);
|
||||
BLI_rotatelist_first(verts, v_act_link);
|
||||
BM_edgeloop_edges_get(el_store, edges);
|
||||
|
||||
/* un-flag 'rails' */
|
||||
|
|
|
@ -785,7 +785,7 @@ static int object_origin_set_exec(bContext *C, wmOperator *op)
|
|||
}
|
||||
|
||||
if (ctx_ob_act) {
|
||||
BLI_rotatelist(&ctx_data_list, (LinkData *)ctx_ob_act);
|
||||
BLI_rotatelist_first(&ctx_data_list, (LinkData *)ctx_ob_act);
|
||||
}
|
||||
|
||||
for (tob = bmain->object.first; tob; tob = tob->id.next) {
|
||||
|
|
Loading…
Reference in New Issue