Cleanup: mostly namings in `make_object_duplilist_real` code.
This commit is contained in:
parent
a78b596272
commit
ddfd57c0d2
|
@ -1344,15 +1344,15 @@ static void make_object_duplilist_real(bContext *C, Scene *scene, Base *base,
|
|||
const bool use_hierarchy)
|
||||
{
|
||||
Main *bmain = CTX_data_main(C);
|
||||
ListBase *lb;
|
||||
ListBase *lb_duplis;
|
||||
DupliObject *dob;
|
||||
GHash *dupli_gh = NULL, *parent_gh = NULL;
|
||||
Object *object;
|
||||
GHash *dupli_gh, *parent_gh = NULL;
|
||||
|
||||
if (!(base->object->transflag & OB_DUPLI))
|
||||
if (!(base->object->transflag & OB_DUPLI)) {
|
||||
return;
|
||||
}
|
||||
|
||||
lb = object_duplilist(bmain->eval_ctx, scene, base->object);
|
||||
lb_duplis = object_duplilist(bmain->eval_ctx, scene, base->object);
|
||||
|
||||
dupli_gh = BLI_ghash_ptr_new(__func__);
|
||||
if (use_hierarchy) {
|
||||
|
@ -1364,52 +1364,55 @@ static void make_object_duplilist_real(bContext *C, Scene *scene, Base *base,
|
|||
}
|
||||
}
|
||||
|
||||
for (dob = lb->first; dob; dob = dob->next) {
|
||||
Base *basen;
|
||||
Object *ob = ID_NEW_SET(dob->ob, BKE_object_copy(bmain, dob->ob));
|
||||
for (dob = lb_duplis->first; dob; dob = dob->next) {
|
||||
Object *ob_src = dob->ob;
|
||||
Object *ob_dst = ID_NEW_SET(dob->ob, BKE_object_copy(bmain, ob_src));
|
||||
Base *base_dst;
|
||||
|
||||
/* font duplis can have a totcol without material, we get them from parent
|
||||
* should be implemented better...
|
||||
*/
|
||||
if (ob->mat == NULL) ob->totcol = 0;
|
||||
if (ob_dst->mat == NULL) {
|
||||
ob_dst->totcol = 0;
|
||||
}
|
||||
|
||||
basen = MEM_dupallocN(base);
|
||||
basen->flag &= ~(OB_FROMDUPLI | OB_FROMGROUP);
|
||||
ob->flag = basen->flag;
|
||||
basen->lay = base->lay;
|
||||
BLI_addhead(&scene->base, basen); /* addhead: othwise eternal loop */
|
||||
basen->object = ob;
|
||||
base_dst = MEM_dupallocN(base);
|
||||
base_dst->flag &= ~(OB_FROMDUPLI | OB_FROMGROUP);
|
||||
ob_dst->flag = base_dst->flag;
|
||||
base_dst->lay = base->lay;
|
||||
BLI_addhead(&scene->base, base_dst); /* addhead: othwise eternal loop */
|
||||
base_dst->object = ob_dst;
|
||||
|
||||
/* make sure apply works */
|
||||
BKE_animdata_free(&ob->id, true);
|
||||
ob->adt = NULL;
|
||||
BKE_animdata_free(&ob_dst->id, true);
|
||||
ob_dst->adt = NULL;
|
||||
|
||||
/* Proxies are not to be copied. */
|
||||
ob->proxy_from = NULL;
|
||||
ob->proxy_group = NULL;
|
||||
ob->proxy = NULL;
|
||||
ob_dst->proxy_from = NULL;
|
||||
ob_dst->proxy_group = NULL;
|
||||
ob_dst->proxy = NULL;
|
||||
|
||||
ob->parent = NULL;
|
||||
BKE_constraints_free(&ob->constraints);
|
||||
ob->curve_cache = NULL;
|
||||
ob->transflag &= ~OB_DUPLI;
|
||||
ob->lay = base->lay;
|
||||
ob_dst->parent = NULL;
|
||||
BKE_constraints_free(&ob_dst->constraints);
|
||||
ob_dst->curve_cache = NULL;
|
||||
ob_dst->transflag &= ~OB_DUPLI;
|
||||
ob_dst->lay = base->lay;
|
||||
|
||||
copy_m4_m4(ob->obmat, dob->mat);
|
||||
BKE_object_apply_mat4(ob, ob->obmat, false, false);
|
||||
copy_m4_m4(ob_dst->obmat, dob->mat);
|
||||
BKE_object_apply_mat4(ob_dst, ob_dst->obmat, false, false);
|
||||
|
||||
BLI_ghash_insert(dupli_gh, dob, ob);
|
||||
BLI_ghash_insert(dupli_gh, dob, ob_dst);
|
||||
if (parent_gh) {
|
||||
void **val;
|
||||
/* Due to nature of hash/comparison of this ghash, a lot of duplis may be considered as 'the same',
|
||||
* this avoids trying to insert same key several time and raise asserts in debug builds... */
|
||||
if (!BLI_ghash_ensure_p(parent_gh, dob, &val)) {
|
||||
*val = ob;
|
||||
*val = ob_dst;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (dob = lb->first; dob; dob = dob->next) {
|
||||
for (dob = lb_duplis->first; dob; dob = dob->next) {
|
||||
Object *ob_src = dob->ob;
|
||||
Object *ob_dst = BLI_ghash_lookup(dupli_gh, dob);
|
||||
|
||||
|
@ -1476,20 +1479,21 @@ static void make_object_duplilist_real(bContext *C, Scene *scene, Base *base,
|
|||
}
|
||||
|
||||
if (base->object->transflag & OB_DUPLIGROUP && base->object->dup_group) {
|
||||
for (object = bmain->object.first; object; object = object->id.next) {
|
||||
if (object->proxy_group == base->object) {
|
||||
object->proxy = NULL;
|
||||
object->proxy_from = NULL;
|
||||
DAG_id_tag_update(&object->id, OB_RECALC_OB);
|
||||
for (Object *ob = bmain->object.first; ob; ob = ob->id.next) {
|
||||
if (ob->proxy_group == base->object) {
|
||||
ob->proxy = NULL;
|
||||
ob->proxy_from = NULL;
|
||||
DAG_id_tag_update(&ob->id, OB_RECALC_OB);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BLI_ghash_free(dupli_gh, NULL, NULL);
|
||||
if (parent_gh)
|
||||
if (parent_gh) {
|
||||
BLI_ghash_free(parent_gh, NULL, NULL);
|
||||
}
|
||||
|
||||
free_object_duplilist(lb);
|
||||
free_object_duplilist(lb_duplis);
|
||||
|
||||
BKE_main_id_clear_newpoins(bmain);
|
||||
|
||||
|
|
Loading…
Reference in New Issue