void BKE_libblock_free_datablock(ID *id, const int UNUSED(flag)) { const short type = GS(id->name); switch (type) { case ID_SCE: BKE_scene_free((Scene *)id); break; case ID_LI: BKE_library_free((Library *)id); break; case ID_OB: BKE_object_free((Object *)id); break; case ID_ME: BKE_mesh_free((Mesh *)id); break; case ID_CU: BKE_curve_free((Curve *)id); break; case ID_MB: BKE_mball_free((MetaBall *)id); break; case ID_MA: BKE_material_free((Material *)id); break; case ID_TE: BKE_texture_free((Tex *)id); break; case ID_IM: BKE_image_free((Image *)id); break; case ID_LT: BKE_lattice_free((Lattice *)id); break; case ID_LA: BKE_lamp_free((Lamp *)id); break; case ID_CA: BKE_camera_free((Camera *) id); break; case ID_IP: /* Deprecated. */ BKE_ipo_free((Ipo *)id); break; case ID_KE: BKE_key_free((Key *)id); break; case ID_WO: BKE_world_free((World *)id); break; case ID_SCR: BKE_screen_free((bScreen *)id); break; case ID_VF: BKE_vfont_free((VFont *)id); break; case ID_TXT: BKE_text_free((Text *)id); break; case ID_SPK: BKE_speaker_free((Speaker *)id); break; case ID_SO: BKE_sound_free((bSound *)id); break; case ID_GR: BKE_group_free((Group *)id); break; case ID_AR: BKE_armature_free((bArmature *)id); break; case ID_AC: BKE_action_free((bAction *)id); break; case ID_NT: ntreeFreeTree((bNodeTree *)id); break; case ID_BR: BKE_brush_free((Brush *)id); break; case ID_PA: BKE_particlesettings_free((ParticleSettings *)id); break; case ID_WM: if (free_windowmanager_cb) free_windowmanager_cb(NULL, (wmWindowManager *)id); break; case ID_GD: BKE_gpencil_free((bGPdata *)id, true); break; case ID_MC: BKE_movieclip_free((MovieClip *)id); break; case ID_MSK: BKE_mask_free((Mask *)id); break; case ID_LS: BKE_linestyle_free((FreestyleLineStyle *)id); break; case ID_PAL: BKE_palette_free((Palette *)id); break; case ID_PC: BKE_paint_curve_free((PaintCurve *)id); break; case ID_CF: BKE_cachefile_free((CacheFile *)id); break; } }
/** * used in headerbuttons.c image.c mesh.c screen.c sound.c and library.c * * \param do_id_user: if \a true, try to release other ID's 'references' hold by \a idv. */ void BKE_libblock_free_ex(Main *bmain, void *idv, const bool do_id_user) { ID *id = idv; short type = GS(id->name); ListBase *lb = which_libbase(bmain, type); DAG_id_type_tag(bmain, type); #ifdef WITH_PYTHON BPY_id_release(id); #endif if (do_id_user) { BKE_libblock_relink_ex(bmain, id, NULL, NULL, true); } switch (type) { case ID_SCE: BKE_scene_free((Scene *)id); break; case ID_LI: BKE_library_free((Library *)id); break; case ID_OB: BKE_object_free((Object *)id); break; case ID_ME: BKE_mesh_free((Mesh *)id); break; case ID_CU: BKE_curve_free((Curve *)id); break; case ID_MB: BKE_mball_free((MetaBall *)id); break; case ID_MA: BKE_material_free((Material *)id); break; case ID_TE: BKE_texture_free((Tex *)id); break; case ID_IM: BKE_image_free((Image *)id); break; case ID_LT: BKE_lattice_free((Lattice *)id); break; case ID_LA: BKE_lamp_free((Lamp *)id); break; case ID_CA: BKE_camera_free((Camera *) id); break; case ID_IP: /* Deprecated. */ BKE_ipo_free((Ipo *)id); break; case ID_KE: BKE_key_free((Key *)id); break; case ID_WO: BKE_world_free((World *)id); break; case ID_SCR: BKE_screen_free((bScreen *)id); break; case ID_VF: BKE_vfont_free((VFont *)id); break; case ID_TXT: BKE_text_free((Text *)id); break; case ID_SPK: BKE_speaker_free((Speaker *)id); break; case ID_SO: BKE_sound_free((bSound *)id); break; case ID_GR: BKE_group_free((Group *)id); break; case ID_AR: BKE_armature_free((bArmature *)id); break; case ID_AC: BKE_action_free((bAction *)id); break; case ID_NT: ntreeFreeTree((bNodeTree *)id); break; case ID_BR: BKE_brush_free((Brush *)id); break; case ID_PA: BKE_particlesettings_free((ParticleSettings *)id); break; case ID_WM: if (free_windowmanager_cb) free_windowmanager_cb(NULL, (wmWindowManager *)id); break; case ID_GD: BKE_gpencil_free((bGPdata *)id, true); break; case ID_MC: BKE_movieclip_free((MovieClip *)id); break; case ID_MSK: BKE_mask_free((Mask *)id); break; case ID_LS: BKE_linestyle_free((FreestyleLineStyle *)id); break; case ID_PAL: BKE_palette_free((Palette *)id); break; case ID_PC: BKE_paint_curve_free((PaintCurve *)id); break; case ID_CF: BKE_cachefile_free((CacheFile *)id); break; } /* avoid notifying on removed data */ BKE_main_lock(bmain); if (free_notifier_reference_cb) { free_notifier_reference_cb(id); } if (remap_editor_id_reference_cb) { remap_editor_id_reference_cb(id, NULL); } BLI_remlink(lb, id); BKE_libblock_free_data(bmain, id); BKE_main_unlock(bmain); MEM_freeN(id); }
FreestyleLineStyle *BKE_linestyle_copy(struct Main *bmain, FreestyleLineStyle *linestyle) { FreestyleLineStyle *new_linestyle; LineStyleModifier *m; int a; new_linestyle = BKE_linestyle_new(bmain, linestyle->id.name + 2); BKE_linestyle_free(new_linestyle); for (a = 0; a < MAX_MTEX; a++) { if (linestyle->mtex[a]) { new_linestyle->mtex[a] = MEM_mallocN(sizeof(MTex), "BKE_linestyle_copy"); memcpy(new_linestyle->mtex[a], linestyle->mtex[a], sizeof(MTex)); id_us_plus((ID *)new_linestyle->mtex[a]->tex); } } if (linestyle->nodetree) { new_linestyle->nodetree = ntreeCopyTree(bmain, linestyle->nodetree); } new_linestyle->r = linestyle->r; new_linestyle->g = linestyle->g; new_linestyle->b = linestyle->b; new_linestyle->alpha = linestyle->alpha; new_linestyle->thickness = linestyle->thickness; new_linestyle->thickness_position = linestyle->thickness_position; new_linestyle->thickness_ratio = linestyle->thickness_ratio; new_linestyle->flag = linestyle->flag; new_linestyle->caps = linestyle->caps; new_linestyle->chaining = linestyle->chaining; new_linestyle->rounds = linestyle->rounds; new_linestyle->split_length = linestyle->split_length; new_linestyle->min_angle = linestyle->min_angle; new_linestyle->max_angle = linestyle->max_angle; new_linestyle->min_length = linestyle->min_length; new_linestyle->max_length = linestyle->max_length; new_linestyle->chain_count = linestyle->chain_count; new_linestyle->split_dash1 = linestyle->split_dash1; new_linestyle->split_gap1 = linestyle->split_gap1; new_linestyle->split_dash2 = linestyle->split_dash2; new_linestyle->split_gap2 = linestyle->split_gap2; new_linestyle->split_dash3 = linestyle->split_dash3; new_linestyle->split_gap3 = linestyle->split_gap3; new_linestyle->dash1 = linestyle->dash1; new_linestyle->gap1 = linestyle->gap1; new_linestyle->dash2 = linestyle->dash2; new_linestyle->gap2 = linestyle->gap2; new_linestyle->dash3 = linestyle->dash3; new_linestyle->gap3 = linestyle->gap3; new_linestyle->panel = linestyle->panel; new_linestyle->sort_key = linestyle->sort_key; new_linestyle->integration_type = linestyle->integration_type; new_linestyle->texstep = linestyle->texstep; new_linestyle->pr_texture = linestyle->pr_texture; new_linestyle->use_nodes = linestyle->use_nodes; for (m = (LineStyleModifier *)linestyle->color_modifiers.first; m; m = m->next) BKE_linestyle_color_modifier_copy(new_linestyle, m); for (m = (LineStyleModifier *)linestyle->alpha_modifiers.first; m; m = m->next) BKE_linestyle_alpha_modifier_copy(new_linestyle, m); for (m = (LineStyleModifier *)linestyle->thickness_modifiers.first; m; m = m->next) BKE_linestyle_thickness_modifier_copy(new_linestyle, m); for (m = (LineStyleModifier *)linestyle->geometry_modifiers.first; m; m = m->next) BKE_linestyle_geometry_modifier_copy(new_linestyle, m); BKE_id_copy_ensure_local(bmain, &linestyle->id, &new_linestyle->id); return new_linestyle; }