static void clean_viewport_memory(Main *bmain, Scene *scene, int renderlay) { Object *object; Scene *sce_iter; Base *base; for (object = bmain->object.first; object; object = object->id.next) { object->id.flag |= LIB_DOIT; } for (SETLOOPER(scene, sce_iter, base)) { if ((base->lay & renderlay) == 0) { continue; } if (RE_allow_render_generic_object(base->object)) { base->object->id.flag &= ~LIB_DOIT; } } for (SETLOOPER(scene, sce_iter, base)) { object = base->object; if ((object->id.flag & LIB_DOIT) == 0) { continue; } object->id.flag &= ~LIB_DOIT; BKE_object_free_derived_caches(object); } }
static bool gpencil_object_modifier_remove(Main *bmain, Object *ob, GpencilModifierData *md, bool *UNUSED(r_sort_depsgraph)) { /* It seems on rapid delete it is possible to * get called twice on same modifier, so make * sure it is in list. */ if (BLI_findindex(&ob->greasepencil_modifiers, md) == -1) { return 0; } DEG_relations_tag_update(bmain); BLI_remlink(&ob->greasepencil_modifiers, md); BKE_gpencil_modifier_free(md); BKE_object_free_derived_caches(ob); return 1; }
void BKE_mesh_to_curve(Main *bmain, Depsgraph *depsgraph, Scene *UNUSED(scene), Object *ob) { /* make new mesh data from the original copy */ Scene *scene_eval = DEG_get_evaluated_scene(depsgraph); Object *ob_eval = DEG_get_evaluated_object(depsgraph, ob); Mesh *me_eval = mesh_get_eval_final(depsgraph, scene_eval, ob_eval, &CD_MASK_MESH); ListBase nurblist = {NULL, NULL}; BKE_mesh_to_curve_nurblist(me_eval, &nurblist, 0); BKE_mesh_to_curve_nurblist(me_eval, &nurblist, 1); if (nurblist.first) { Curve *cu = BKE_curve_add(bmain, ob->id.name + 2, OB_CURVE); cu->flag |= CU_3D; cu->nurb = nurblist; id_us_min(&((Mesh *)ob->data)->id); ob->data = cu; ob->type = OB_CURVE; BKE_object_free_derived_caches(ob); } }