Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/object/object_add.c
| Show First 20 Lines • Show All 1,880 Lines • ▼ Show 20 Lines | for (CollectionPointerLink *link = selected_editable_bases.first; link; link = link->next) { | ||||
| keep_original = true; | keep_original = true; | ||||
| BKE_reportf(op->reports, RPT_INFO, | BKE_reportf(op->reports, RPT_INFO, | ||||
| "Converting some linked object/object data, enforcing 'Keep Original' option to True"); | "Converting some linked object/object data, enforcing 'Keep Original' option to True"); | ||||
| } | } | ||||
| DEG_id_tag_update(&base->object->id, ID_RECALC_GEOMETRY); | DEG_id_tag_update(&base->object->id, ID_RECALC_GEOMETRY); | ||||
| } | } | ||||
| uint64_t customdata_mask_prev = scene->customdata_mask; | CustomData_MeshMasks customdata_mask_prev = scene->customdata_mask; | ||||
| scene->customdata_mask |= CD_MASK_MESH; | CustomData_MeshMasks_update(&scene->customdata_mask, &CD_MASK_MESH); | ||||
| BKE_scene_graph_update_tagged(depsgraph, bmain); | BKE_scene_graph_update_tagged(depsgraph, bmain); | ||||
| scene->customdata_mask = customdata_mask_prev; | scene->customdata_mask = customdata_mask_prev; | ||||
| } | } | ||||
| for (CollectionPointerLink *link = selected_editable_bases.first; link; link = link->next) { | for (CollectionPointerLink *link = selected_editable_bases.first; link; link = link->next) { | ||||
| Object *newob = NULL; | Object *newob = NULL; | ||||
| Base *base = link->ptr.data; | Base *base = link->ptr.data; | ||||
| Object *ob = base->object; | Object *ob = base->object; | ||||
| ▲ Show 20 Lines • Show All 62 Lines • ▼ Show 20 Lines | else if (ob->type == OB_MESH) { | ||||
| } | } | ||||
| /* make new mesh data from the original copy */ | /* make new mesh data from the original copy */ | ||||
| /* note: get the mesh from the original, not from the copy in some | /* note: get the mesh from the original, not from the copy in some | ||||
| * cases this doesn't give correct results (when MDEF is used for eg) | * cases this doesn't give correct results (when MDEF is used for eg) | ||||
| */ | */ | ||||
| Scene *scene_eval = (Scene *)DEG_get_evaluated_id(depsgraph, &scene->id); | Scene *scene_eval = (Scene *)DEG_get_evaluated_id(depsgraph, &scene->id); | ||||
| Object *ob_eval = DEG_get_evaluated_object(depsgraph, ob); | Object *ob_eval = DEG_get_evaluated_object(depsgraph, ob); | ||||
| Mesh *me_eval = mesh_get_eval_final(depsgraph, scene_eval, ob_eval, CD_MASK_MESH); | Mesh *me_eval = mesh_get_eval_final(depsgraph, scene_eval, ob_eval, &CD_MASK_MESH); | ||||
| me_eval = BKE_mesh_copy_for_eval(me_eval, false); | me_eval = BKE_mesh_copy_for_eval(me_eval, false); | ||||
| BKE_mesh_nomain_to_mesh(me_eval, newob->data, newob, CD_MASK_MESH, true); | BKE_mesh_nomain_to_mesh(me_eval, newob->data, newob, &CD_MASK_MESH, true); | ||||
| BKE_object_free_modifiers(newob, 0); /* after derivedmesh calls! */ | BKE_object_free_modifiers(newob, 0); /* after derivedmesh calls! */ | ||||
| } | } | ||||
| else if (ob->type == OB_FONT) { | else if (ob->type == OB_FONT) { | ||||
| ob->flag |= OB_DONE; | ob->flag |= OB_DONE; | ||||
| if (keep_original) { | if (keep_original) { | ||||
| basen = duplibase_for_convert(bmain, scene, view_layer, base, NULL); | basen = duplibase_for_convert(bmain, scene, view_layer, base, NULL); | ||||
| newob = basen->object; | newob = basen->object; | ||||
| ▲ Show 20 Lines • Show All 553 Lines • Show Last 20 Lines | |||||