static void rna_Lattice_update_size(Main *bmain, Scene *scene, PointerRNA *ptr) { Lattice *lt= ptr->id.data; Object *ob; int newu, newv, neww; /* we don't modify the actual pnts, but go through opnts instead */ newu= (lt->opntsu > 0)? lt->opntsu: lt->pntsu; newv= (lt->opntsv > 0)? lt->opntsv: lt->pntsv; neww= (lt->opntsw > 0)? lt->opntsw: lt->pntsw; /* resizelattice needs an object, any object will have the same result */ for(ob=bmain->object.first; ob; ob= ob->id.next) { if(ob->data == lt) { resizelattice(lt, newu, newv, neww, ob); if(lt->editlatt) resizelattice(lt->editlatt->latt, newu, newv, neww, ob); break; } } /* otherwise without, means old points are not repositioned */ if(!ob) { resizelattice(lt, newu, newv, neww, NULL); if(lt->editlatt) resizelattice(lt->editlatt->latt, newu, newv, neww, NULL); } rna_Lattice_update_data(bmain, scene, ptr); }
static int make_regular_exec(bContext *C, wmOperator *UNUSED(op)) { Object *ob= CTX_data_edit_object(C); Lattice *lt; if(ob) { lt= ob->data; resizelattice(lt->editlatt->latt, lt->pntsu, lt->pntsv, lt->pntsw, NULL); } else { ob= CTX_data_active_object(C); lt= ob->data; resizelattice(lt, lt->pntsu, lt->pntsv, lt->pntsw, NULL); } DAG_id_tag_update(&ob->id, OB_RECALC_DATA); WM_event_add_notifier(C, NC_GEOM|ND_DATA, ob->data); return OPERATOR_FINISHED; }
Lattice *add_lattice(const char *name) { Lattice *lt; lt= alloc_libblock(&G.main->latt, ID_LT, name); lt->flag= LT_GRID; lt->typeu= lt->typev= lt->typew= KEY_BSPLINE; lt->def= MEM_callocN(sizeof(BPoint), "lattvert"); /* temporary */ resizelattice(lt, 2, 2, 2, NULL); /* creates a uniform lattice */ return lt; }