/* free undo ListBase of MetaElems */ static void free_undoMball(void *lbv) { ListBase *lb = lbv; freeMetaElemlist(lb); MEM_freeN(lb); }
static void undomball_to_editmball(UndoMBall *umb, MetaBall *mb) { freeMetaElemlist(mb->editelems); mb->lastelem = NULL; /* copy 'undo' MetaElems to 'edit' MetaElems */ int index = 0; for (MetaElem *ml_undo = umb->editelems.first; ml_undo; ml_undo = ml_undo->next, index += 1) { MetaElem *ml_edit = MEM_dupallocN(ml_undo); BLI_addtail(mb->editelems, ml_edit); if (index == umb->lastelem_index) { mb->lastelem = ml_edit; } } }
static void undoMball_to_editMball(void *lbu, void *lbe, void *UNUSED(obe)) { ListBase *lb = lbu; ListBase *editelems = lbe; MetaElem *ml, *newml; freeMetaElemlist(editelems); /* copy 'undo' MetaElems to 'edit' MetaElems */ ml = lb->first; while (ml) { newml = MEM_dupallocN(ml); BLI_addtail(editelems, newml); ml = ml->next; } }
/* free undo ListBase of MetaElems */ static void undomball_free_data(UndoMBall *umb) { freeMetaElemlist(&umb->editelems); }