void load_editLatt(Object *obedit) { Lattice *lt, *editlt; KeyBlock *actkey; BPoint *bp; float *fp; int tot; lt= obedit->data; editlt= lt->editlatt->latt; if(lt->editlatt->shapenr) { actkey= BLI_findlink(<->key->block, lt->editlatt->shapenr-1); /* active key: vertices */ tot= editlt->pntsu*editlt->pntsv*editlt->pntsw; if(actkey->data) MEM_freeN(actkey->data); fp=actkey->data= MEM_callocN(lt->key->elemsize*tot, "actkey->data"); actkey->totelem= tot; bp= editlt->def; while(tot--) { VECCOPY(fp, bp->vec); fp+= 3; bp++; } } else { MEM_freeN(lt->def); lt->def= MEM_dupallocN(editlt->def); lt->flag= editlt->flag; lt->pntsu= editlt->pntsu; lt->pntsv= editlt->pntsv; lt->pntsw= editlt->pntsw; lt->typeu= editlt->typeu; lt->typev= editlt->typev; lt->typew= editlt->typew; } if(lt->dvert) { free_dverts(lt->dvert, lt->pntsu*lt->pntsv*lt->pntsw); lt->dvert= NULL; } if(editlt->dvert) { tot= lt->pntsu*lt->pntsv*lt->pntsw; lt->dvert = MEM_mallocN (sizeof (MDeformVert)*tot, "Lattice MDeformVert"); copy_dverts(lt->dvert, editlt->dvert, tot); } }
Lattice *BKE_lattice_copy(Lattice *lt) { Lattice *ltn; ltn = BKE_libblock_copy(<->id); ltn->def = MEM_dupallocN(lt->def); ltn->key = BKE_key_copy(ltn->key); if (ltn->key) ltn->key->from = (ID *)ltn; if (lt->dvert) { int tot = lt->pntsu * lt->pntsv * lt->pntsw; ltn->dvert = MEM_mallocN(sizeof(MDeformVert) * tot, "Lattice MDeformVert"); copy_dverts(ltn->dvert, lt->dvert, tot); } ltn->editlatt = NULL; return ltn; }
void make_editLatt(Object *obedit) { Lattice *lt= obedit->data; KeyBlock *actkey; free_editLatt(obedit); actkey= ob_get_keyblock(obedit); if(actkey) key_to_latt(actkey, lt); lt->editlatt= MEM_callocN(sizeof(EditLatt), "editlatt"); lt->editlatt->latt= MEM_dupallocN(lt); lt->editlatt->latt->def= MEM_dupallocN(lt->def); if(lt->dvert) { int tot= lt->pntsu*lt->pntsv*lt->pntsw; lt->editlatt->latt->dvert = MEM_mallocN (sizeof (MDeformVert)*tot, "Lattice MDeformVert"); copy_dverts(lt->editlatt->latt->dvert, lt->dvert, tot); } if(lt->key) lt->editlatt->shapenr= obedit->shapenr; }